2011년 5월 2일 월요일

Spring MVC 가 무엇인지 알려주마...

Spring MVC
sjinpark@samsung.com

DispatcherServlet : 클라이언트의 요청을 전달받는다. 컨트롤러
에게 클라이언트의 요청을 전달하고, 컨트롤러가 리턴한 결과
값을 View에 전달하여 알맞은 응답을 생성하도록 한다.
HandlerMapping : 클라이언트 요청 URL을 어떤 컨트롤러가 처
리할지를 결정한다.
컨트롤러(Controller) : 클라이언트의 요청을 처리한 뒤, 그 결
과를 DispatcherServlet에 알려준다. 스트럿츠의 Action과 동일
한 역할을 수행한다.
ModelAndView : 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필
요한 정보를 담는다.
ViewResolver : 컨트롤러의 처리 결과를 생성할 뷰를 결정한다.
뷰(View) : 컨트롤러의 처리 결과 화면을 생성한다. JSP 나
Velocity 템플릿 파일 등을 뷰로 사용한다.

스프링 MVC 이용, 웹 어플리케이션 개
발의 단순화
1. 클라이언트의 요청을 받을 DispatcherServlet을 web.xml 파
일에 설정한다.
2. 클라이언트의 요청을 처리할 컨트롤러를 작성한다.
3. ViewResolver를 설정한다. ViewResolver는 컨트롤러가 전달
한 값을 이용해서 응답 화면을 생성할 뷰를 결정한다.
4. JSP 나 Velocity 등을 이용하여 뷰 영역의 코드를 작성한다.
5. 실행

단계1. DispatcherServlet 설정 및 스프
링 컨텍스트 설정
* 클라이언트의 요청을 전달받을 DispatcherServlet 설정
* 공통으로 사용할 어플리케이션 컨텍스트 설정
dispatcher
org.springframework.web.servlet.DispatcherServlet
dispatcher
*.do
DispatcherServlet 은 WEB-INF/ 디렉토리에 위치한 [서블릿이
름]-servlet.xml 화일을 스프링 설정 화일로 사용한다.

@Controller 어노테이션을 클래스에 적용
@RequestMapping 어노테이션을 이용해서 클라이언트의 요청
을 처리할 메서드를 지정
...
@Controller
public class HelloController{
@RequestMapping("/hello.do")
public ModelAndView hello() {
ModelAndView mav = new ModelAndView();
mav.setViewName("hello");
...
이 경우 http://host:port[/컨텍스트경로]/hello.do 요청

DispatcherSevlet 은 스프링 컨테이너에서 컨트롤러 객체를 검
색하기 때문에 스프링 설정화일에 컨트롤러를 빈으로 등록
dispatcher-servlet.xml
....
....
class="madvirus.spring.chap06.controller.HelloController"/>
....
....

단계3. 설정 파일에 ViewResolver 설정
추가
컨트롤러 클래서는 직접 또는 간접적으로 ModelAndView 객체
를 생성하게 된다.
DispatcherServlet 은 뷰 이름과 매칭되는 뷰 구현체를 찾기 위
해 ViewResolver를 사용.
JSP를 뷰 기술로 사용할 경우 (Velocity, FreeMarker 등 기술가
class="org.springframework.web.servlet.view.
InternalResourceViewResolver">

단계4.
단계5. 실행.
예에서는
http://localhost:8080/chap06/hello.do

DispatcherServlet 설정과
ApplicationContext의 관계
기본 설정 화일 이름이 아닌 이름을 사용하거나 한개 이상의 설
정 파일을 사용하고 싶을 때.
...
contextConfigLocation
/WEB-INF/main.xml
/WEB-INF/bbs.xml

컨트롤러 메서드의 HTTP 전송방식 한
@Controller
@RequestMapping("/article/newArticle.do")
public class NewArticleController{
@RequestMapping(method= RequestMethod.GET)
public String form(){
...
}
@RequestMapping(method = RequestMethod.POST)
public String submit(){
...
}
...
}

컨트롤러 메서드의
ModelAndView : 뷰 정보 및 모델 정보를 담고있는 객체
Model : 뷰에 전달할 객체 정보를 담고 있는 객체. 이 때 뷰 이름은 요
청 URL 로부터 결정된다.
Map : 뷰에 전달할 객체 정보를 담고 있는 객체. 동일
String : 뷰 이름을 리턴한다.
View 객체 : View 객체를 직접 리턴. 해당 View 객체를 이용해서 뷰를
생성한다.
void : 메서드가 ServletResponse나 HttpServletResponse 타입의 파
라미터를 갖는 경우 메서드가 직접 응답을 처리한다고 가정한다. 그렇
지 않을 경우 요청 URL로부터 결정된 뷰를 보여준다.
@ResponseBody 어노테이션 적용 : 메서드에서 @ResponseBody 어
노테이션이 적용된 경우, 리턴 객체를 HTTP 응답으로 전송한다.
HttpMessageConverter를 이용해서 객체를 HTTP 응답스트림으로 변
환한다.

뷰 이름 지정
1. 생성자
@RequestMapping("/index.do")
public ModelAndView index(){
ModelAndView mav = new ModelAndView("index");
...
return mav;
}
2. 메서드로
ModelAndView mav = new ModelAndView();
mav.setViewName("search/game");
3.String 타입을 리턴할 경우
@RequestMapping("/help/main.do")
... return "help/main";
}

스프링이 제공하는 ViewResolver 구현
클래스
InternalResourceViewResolver : 뷰이름으로부터 JSP 나 Tiles
연동을 위한 View 객체를 리턴한다.
VelocityViewResolver : 뷰 이름으로부터 Velocity 연동을 위한
View 객체를 리턴한다.
VelocityLayoutViewResolver : VelocityViewResolver와 동일한
기능을 제공하며, 추가로 Velocity의 레이아웃 기능을 제공한
다.
BeanNameViewResolver : 뷰 이름과 동일한 이름을 갖는 빈 객
체를 View 객체로 사용한다.
ResourceBundleViewResolver : 뷰 이름과 View 객체간의 매핑
정보를 저장하기 위해 자원 파일을 사용한다.
XmlViewResolver : 뷰 이름과 View 객체간의 매핑 정보를 저장
하기 위해 XML 화일을

JSP 를 이용한 뷰 구현
InternalResourceViewResolver 를 사용하여 suffix 를 .jsp 로
지정함으로써 논리적 뷰 이름을 특정 JSP 에 매핑한다.
class="org.springframework.web.servlet.view.
InternalResourceViewResolver"
p:prefix="/WEB-INF/viewjsp/" p:suffix=".jsp" />


댓글 없음:

댓글 쓰기