[Spring]Spring MVC
DispatcherServlet : 최초로 요청을 받아들임,
다른 MVC관련 빈 객체를 담는 컨테이너
Controller :
실제 요청을 처리하는 객체
HandlerMapping :
DispatcherServlet이 받은 요청을 실제로 처리할 컨트롤러를 결정
ModelAndView :
Controller의 요청 처리의 결과물로 사용할 View(page)와 Model(Data)의 집합
ViewResolver :
ModelAndView정보로 실제 View로 가공하는 작업을 수행
View :
Client에게 응답할 완성품
![](https://t1.daumcdn.net/cfile/tistory/27226A3456E6CF2C2C)
1. Spring MVC 환경 설정 및 예제
1-1. Dynamic web project 클릭후 아래의 그림처럼 next 를 계속 누른다.
1-2. 아래의 표시된 부분을 체크하고 finish!!
![](https://t1.daumcdn.net/cfile/tistory/2722B44956E6CF2C2E)
1-3. maven 속성 적용 후 필요 라이브러리 pom.xml 파일에 아래에 내용 추가 정의
org.springframework
spring-core
3.2.8.RELEASE
org.springframework
spring-context
3.2.8.RELEASE
org.springframework
spring-web
3.2.8.RELEASE
org.springframework
spring-webmvc
3.2.8.RELEASE
1-4. web.xml 파일에 아래의 그림에 표시된 필요없는 부분 삭제
![](https://t1.daumcdn.net/cfile/tistory/263F993456E6CF2C0B)
1-5. web.xml 파일 설정
- DispatcherServlet을 웹어플리케이션에 등록(ex: [servletname]-servlet.xml)
-
DispatcherServlet이 스프링 컨테이너가
되기 위해 사용할 스프링 설정파일 지정
예)
Spring_MVC
dispatcher
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/dispatcher-servlet.xml
1
dispatcher
*.do
org.springframework.web.context.ContextLoaderListener
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
EUC-KR
encodingFilter
/*
1-6. web.xml 파일에 정의한 /WEB-INF/dispatcher-servlet.xml 파일 생성후 설정
(Spring bean configuration file 형식으로 생성)
-
DispatcherServlet 설정파일에 Controller, HandlerMapping, ViewResolver 빈으로 등록
예)
1-7. controller 작성
예)
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
//@Controller 에노테이션으로 서블릿 컨테이너에 controller객체를 빈으로 등록
@Controller
public class HelloController {
//controller 클래스의 각 메소드에 처리할 url을 @RequestMapping으로 지정한다
//이것이 HandlerMapping을 대체함
@RequestMapping("hello.do")
public ModelAndView hello(){
ModelAndView modelAndView =new ModelAndView();
//ModelAndView 객체에 속성and값 추가
modelAndView.addObject("msg", "hello spring MVC");
//ModelAndView 객체에 view 파일 셋팅
modelAndView.setViewName("/jsp/hello.jsp"); // -> "hello"로 수정
return modelAndView; // ViewResolver에 modelAndview를 리턴
}
// 스프링 MVC 컨트롤러 요청처리에서 다양한 반환유형
// 데이터와 뷰의 정보가 둘다 있는 경우 : ModelAndView
// 데이터만 있는 경우(뷰의 정보가 없는 경우) : Map, Model등의 반환유형
// >>> 뷰의 정보는 요청 url에서 확장자를 뗀 값을 viewName으로 사용
// 뷰의 정보만 있는 경우(데이터의 정보가 없는 경우) : String, View 등의 반환유형
// >>> 매개변수의 Model객체를 데이터로 사용
// 둘다 없는 경우 : void
// >>> 뷰의 정보는 요청 url에서 확장자를 뗀 값을 viewName으로, 매개변수의 Model객체를 데이터로
@RequestMapping("onlyModel.do") //return view 정의 안했을때는 onlyModel.jsp 로 간다
public Map onlyModel() {
Map model = new HashMap();
model.put("msg", "모델만 있는 컨트롤러 메소드");
return model;
}
@RequestMapping("onlyViewName.do")
public String onlyViewName(Model model) {
model.addAttribute("msg", "ViewName만 있는 컨트롤러 메소드");
return "onlyViewName";
}
@RequestMapping("noInfo.do")
public void noInfo(Model model) {
model.addAttribute("msg", "아무정보도 없는 컨트롤러 메소드");
}
@RequestMapping("sessionTest.do")
public String accessSession(HttpSession session) {
session.setAttribute("sessionVal", "session에 값 넣었따");
return "sessionTest";
}
@RequestMapping("paramTest.do")
public String paramTest(Model model, @RequestParam("num1") int a,
@RequestParam("num2") int b) {
model.addAttribute("val", a + b);
return "paramTest";
}
//////////// 아래 Member가 모델 클래스에 있다고 가정했을때
class Member{
String id;
String pw;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
}
@RequestMapping("join.do") //join.do?id=kkk&pw=aaa 요청이 들어오면 알아서 member 객체에 들어감
public String join(Member member)
{
System.out.println(member.getId()); // 출력결과 : kkk
System.out.println(member.getPw()); // 출력결과 : aaa
return "main";
}
}
1-8. view 작성
예)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
Insert title here
${msg }
※ 이클립스에서 테스트시 해당 프로젝트 우클릭>RunAs>RunOnServer 클릭으로 테스트
결과)
![](https://t1.daumcdn.net/cfile/tistory/27689E5056E6CF2D05)
controller
관련 설정은 서블릿컨테이너 설정파일에
설정하고,
모든 서블릿이 공유해야하는 모델, 서비스, DAO 등을
루트컨테이너 설정 파일에 정의하자