0%

스프링 MVC

아래 그림은 스프링 기본 흐름과 주요 컴포넌트에 대해 설명한다.

spring_mvc_process

  • DispatcherServlet
    클라이언트의 요청을 전달 받는다. 컨트롤러에게 클라이언트의 요청을 전달하고, 컨트롤러가 리턴한 결과값을 View에 전달하여 알맞은 응답을 생성한다.
  • HandlerMapping
    클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정한다.
  • HandlerAdapter
    DispatcherServlet의 처리 요청을 변환해서 컨트롤러에게 전달하고, 컨트롤러의 응답 결과를 DispatcherServlet이 요구하는 형식으로 변환한다. 웹 브라우저 캐시등의 설정도 담당한다.
  • Controller
    클라이언트의 요청을 처리한 뒤, 결과를 리턴한다. 응답 결과에서 보여줄 데이터를 모델에 담아 전달한다.
  • ModelAndView
    컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담는다.
  • ViewResolver
    컨트롤러의 처리 결과를 보여줄 뷰를 결정한다.
  • View
    컨트롤러의 처리결과 화면을 생성한다.

스프링 MVC 설정 기초

스프링 MVC를 사용하기 위한 기본 설정 과정은 다음과 같다.

  1. web.xml에 DispatcherServlet 설정
  2. web.xml에 캐릭터 인코딩 처리 위한 필터 설정
  3. 스프링 MVC 설정 (HandlerMapping, HandlerAdapter, ViewResolver 설정)

DispatcherServlet 설정

DispatcherServlet은 내부적으로 스프링 컨테이너를 생성한다. 별도의 초기화 파라미터 없이 DispatcherServlet을 설정하면, 웹 어플리케이션의 /WEB-INF/ 디렉터리에 위치한 [서블릿이름]-servlet.xml 파일을 스프링 설정파일로 사용한다. 아래의 경우에는 spring-servlet.xml 파일을 이용해 스프링 컨테이너를 생성한다.

1
2
3
4
5
6
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
</servlet>

한 개이상 설정파일을 사용하거나 기본형식이 아닌 파일을 사용해야 한다면 다음과 같이 contextConfigLocation 초기화 파라미터로 설정파일 목록을 지정하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/dispatcher-servlet.xml
classpath:/common-servlet.xml
</param-value>
</init-param>
</servlet>

캐릭터 인코딩 필터 설정

스프링은 요청 파라미터의 캐릭터 인코딩을 지정할 수 있는 서블릿 필터 CharacterEncodingFilter를 제공하고 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

HandlerMapping / HandlerAdapter 빈 등록

HandlerMapping, HandlerAdapter 빈 등록은 아래의 태그를 이용하면 설정이 끝난다.

1
<mvc:annotation-driven />

위 태그를 spring-servlet.xml 에 설정해 두면 다음의 두 클래스를 빈으로 등록해준다.

  • RequestMappingHandlerMapping
  • RequestMappingHandlerAdapter

디폴트 서블릿 핸들러

디폴트 서블릿 핸들러는 아래 설정을 추가함으로서 등록이 되며, 서블릿 매핑에 존재하지 않는 요청을 디폴트 서블릿에 전달해 요청을 처리하도록 한다. 요청에 맞는 컨트롤러가 없는경우 (../some/no_controller.css) 에 사용된다.

1
<mvc:default-servlet-handler />

Reference : Spring 4.0 프로그래밍