아래 그림은 스프링 기본 흐름과 주요 컴포넌트에 대해 설명한다.
- DispatcherServlet
클라이언트의 요청을 전달 받는다. 컨트롤러에게 클라이언트의 요청을 전달하고, 컨트롤러가 리턴한 결과값을 View에 전달하여 알맞은 응답을 생성한다. - HandlerMapping
클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정한다. - HandlerAdapter
DispatcherServlet의 처리 요청을 변환해서 컨트롤러에게 전달하고, 컨트롤러의 응답 결과를 DispatcherServlet이 요구하는 형식으로 변환한다. 웹 브라우저 캐시등의 설정도 담당한다. - Controller
클라이언트의 요청을 처리한 뒤, 결과를 리턴한다. 응답 결과에서 보여줄 데이터를 모델에 담아 전달한다. - ModelAndView
컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담는다. - ViewResolver
컨트롤러의 처리 결과를 보여줄 뷰를 결정한다. - View
컨트롤러의 처리결과 화면을 생성한다.
스프링 MVC 설정 기초
스프링 MVC를 사용하기 위한 기본 설정 과정은 다음과 같다.
- web.xml에 DispatcherServlet 설정
- web.xml에 캐릭터 인코딩 처리 위한 필터 설정
- 스프링 MVC 설정 (HandlerMapping, HandlerAdapter, ViewResolver 설정)
DispatcherServlet 설정
DispatcherServlet은 내부적으로 스프링 컨테이너를 생성한다. 별도의 초기화 파라미터 없이 DispatcherServlet을 설정하면, 웹 어플리케이션의 /WEB-INF/ 디렉터리에 위치한 [서블릿이름]-servlet.xml 파일을 스프링 설정파일로 사용한다. 아래의 경우에는 spring-servlet.xml 파일을 이용해 스프링 컨테이너를 생성한다.
1 | <servlet> |
한 개이상 설정파일을 사용하거나 기본형식이 아닌 파일을 사용해야 한다면 다음과 같이 contextConfigLocation 초기화 파라미터로 설정파일 목록을 지정하면 된다.
1 | <servlet> |
캐릭터 인코딩 필터 설정
스프링은 요청 파라미터의 캐릭터 인코딩을 지정할 수 있는 서블릿 필터 CharacterEncodingFilter를 제공하고 있다.
1 | <filter> |
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 프로그래밍