스프링 MVC의 주요 구성 요소
DispatcherServlet : 클라이언트의 요청을 전달 받는다. 컨트롤러에게 클라이언트의 요청을 전달하고, 컨트롤러가 리턴한 결과 값을 View에 전달하여 알맞은 응답을 생성하도록 함(스프링 제공)
HandlerMapping : 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지를 결정(스프링 제공)
Controller : 클라이언트의 요청을 처리한 뒤, 그 결과를 DispatcherServlet에 알려 준다.(실제 로직을 담당)
ModelAndView : 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담는다.
ViewResolver : 컨트롤러의 처리 결과를 생성할 뷰를 결정(스프링 제공)
View : 컨트롤러의 처리 결과 화면을 생성




다음과 같은 흐름으로 동작함
1. 클라이언트의 요청이 DispatcherServlet에 전달
2. DispatcherServlet은 HandlerMapping을 사용하여 클라이언트의 요청을 처리할 컨트롤러 객체를 구함
3. DispatcherServlet은 컨트롤러 객체의 handleRequest() 메서드를 호출하여 클라이언트의 요청을 처리
4. 컨트롤러의 handlerRequest() 메서드는 처리 결과 정보를 담은 ModelAndView 객체를 리턴
5. DispatcherServlet은 ViewResolver로부터 응답 결과를 생성할 뷰 객체를 구함
6. 뷰는 클라이언트에 전송할 응답을 생성

 

======================================================================================================


1 단계 : DispatcherServlet 설정 및 스프링 컨텍스트 설정
자바 웹 어플리케이션의 설정 파일인 web.xml에 다음의 정보를 추가
     a : 클라이언트의 요청을 전달받을 DispatcherServlet 설정
     b : 공통으로 사용할 어플리케이션 컨텍스트 설정


DispatcherServlet의 설정은 웹 어플리케이션의 /WEB-INF/web.xml파일에 추가하면 됨.
예)

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

 <servlet>
  <servlet-name>shopping-1</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 
 <servlet-mapping>
  <servlet-name>shopping-1</servlet-name>
  <url-pattern>*.html</url-pattern>
 </servlet-mapping>
 
</web-app>

DispatcherServlet은 WEB-INF/ 디렉토리에 위치한 [서블릿명]-servlet.xml 파일을 스프링 설정 파일로 사용한다.
(ex : 위와 같을 경우에는 shopping-1-servlet.xml이 설정 파일로 사용됨)
[서블릿명]-servlet.xml 파일에서 스프링 MVC의 구성 요소인 HandlerMapping, Controller, ViewResolver, View 등의 빈을 설정하게 됨.


2 단계 : 설정 파일에 HandlerMapping 설정 추가
HandlerMapping은 클라이언트의 요청을 어떤 Controller가 처리할지에 대한 정보를 제공
예)
 <!-- HandlerMapping 설정 -->
 <bean id="beanNameUrlMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>


3 단계 : Controller 구현 및 설정
스프링에서 제공하는 Controller 인터페이스를 구현하면 됨.(다양한 Controller 인터페이스를 제공)
예)

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class IndexController implements Controller {

 private Shop shop;
 
 public void setShop(Shop shop) {
  this.shop = shop;
 }
 
 @Override
 public ModelAndView handleRequest(HttpServletRequest rq,
   HttpServletResponse rs) throws Exception {
  // TODO Auto-generated method stub
  //상품 리스트 가져오기
  List<ItemVO> itemList = this.shop.getItemList();
  
   ..........................
 
  //뷰 작성
  ModelAndView modelAndView = new ModelAndView();
  modelAndView.setViewName("/WEB-INF/jsp/index.jsp");
  modelAndView.addAllObjects(model);
  
  return modelAndView;
 }

}


  <!-- 컨트롤러 설정 -->
 <bean id="indexController" name="/index.html" class="IndexController">
  <property name="shop" ref="shop"></property>
 </bean>


4 단계 : 설정 파일에 ViewResolver 설정 추가
Controller가 리턴하는 ModelAndView는 뷰 정보를 담고 있음.
예)
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="prefix" value="/WEB-INF/view" />
   <property name="suffix" value=".jsp" />
</bean>


5 단계 : 뷰 코드 구현
JSP와 같은 웹 어플리케이션 자원을 이용하여 뷰를 생성



[참고자료] : 스프링 2.5 프로그래밍 (최범균 지음)

+ Recent posts