13.2. The DispatcherServlet

<web-app>

    <servlet>
        <servlet-name>example</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>example</servlet-name>
        <url-pattern>*.form</url-pattern>
    </servlet-mapping>

</web-app>

이렇게 web.xml에서 DispatcherServlet을 등록해 두면 .form 으로 끝나는 url은 모두 ‘example’ 이라는 DispatcherServlet이 담당하게 됩니다.

사용자 삽입 이미지
(1)Front Controller 패턴을 사용하여 모든 요청을 하나의 서브릿에서 받은 뒤
(2)각각의 요청을 처리할 컨트롤러를 Handler Mapping을 기반으로 찾아서 요청을 넘기게 됩니다.
(3)컨트롤러에서 요청을 처리한 뒤 ModelAndView 객체를 다시 Dispatcher에게 넘기면
(4)Dispatcher는 받은 객체의 view 이름과 ViewResolver를 사용하여 해당 응답을 랜더링할 view에게 Model 객체들을 넘기게 되고 그것을 바탕으로 HTML 을 만들고
(5)다시 Dispatcher에게 제어권을 넘기면
(6)Reponse에 방금 만들어낸 HTML을 실어 보냅니다.

Spring 프레임워크는 맨 위에 있는 web.xml의 내용을 바탕으로 Dispatcher를 초기화 할 때
“Dispatcher의 이름”-servlet.xml 파일을 WEB-INF 폴더에서 찾고 그 안에 등록한 모든 bean들을 생성합니다.

each DispatcherServlet has its own WebApplicationContext, which inherits all the beans already defined in the root WebApplicationContext. These inherited beans defined can be overridden in the servlet-specific scope, and new scope-specific beans can be defined local to a given servlet instance.

위의 레퍼런스 인용구에서 볼 수 있듯이 DispatcherSevlet이 WebApplicationContext를 가지고 있고 여기에 설정할 수 있는 특별한 bean들은 다음과 같습니다.

Bean type

Explanation

Controllers

MVC C에 해당하는 각종 컨트롤러들

Handler mappings

요청을 처리할 컨트롤러들
명시

View resolvers

View 이름을 풀 수 있는 컴포넌트들

Locale resolver

국제화 지원하기 위해 client locale 알아낸다

Theme resolver

테마 사용할 때 사용

multipart file resolver

Http
폼에서 파일 업로드 할 때 사용

Handler exception resolver(s)

특정 예외가 발생할 때의 보여줄 view 등록

13.1. Introduction

Spring MVC 의 특징

  • 다른 web MVC 프레임워크와 마찬가지로 모든 요청을 DispatcherServlet 을 사용하여 요청을 처리할 핸들러에게 dispatch 합니다.
  • 요청을 처리할 핸들러(Controller)로는 가장 심플한 Controller 인터페이스 부터 여러 경우에 사용할 수 있는 구현체들을 제공합니다.
  • 어떤 객체라도 폼에 입력되는 값을 받아들이는 객체(폼 객체, Command)로 사용할 수 있습니다.
  • view resolution이 매우 유연(flexible)합니다.
  • ModelAndView 객체를 사용하여 view 와 model(맵 형태)을 담게 됩니다.
  • ModelAndView에 있는 view이름을 다양한 ViewResolver 를 사용하여 적당한 view에 매핑할 수 있습니다.

13.1.1. Pluggability of other MVC implementations

스트럿츠나 웹워크 같은 다른 웹 MVC 프레임워크로 Spring MVC를 대체 할 수 있습니다.

13.1.2. Features of Spring Web MVC

  • Clear separation of roles – controller, validator, command object, form object, model object, DispatcherServlet, handler mapping, view resolver, 기타 등등. 여러 책임을 각각의 객체로 나눠 놨기 때문에 보다 객체 지향적인 MVC 구현이 가능합니다.
  • Powerful and straightforward configuration – 웹 컨트롤러들 부터 비즈니스 객체까지 모든 객체들을 컨텍스트에 빈으로 등록하여 사용할 수 있습니다.
  • Adaptability, non-intrusiveness – 각각 상황에 맞는 컨트롤러를 골라서 사용할 수 있습니다.
  • Reusable business code – 비즈니스 객체를 커맨드 객체로 재사용할 수 있습니다.
  • Customizable binding and validation – 애플리케이션 차원에서 데이터를 바인딩하고 검증할 수 있습니다.
  • Customizable handler mapping and view resolution – 다양한 방법으로 핸들러 맵핑과 뷰 리졸버를 사용할 수 있습니다.
  • Flexible model transfer – 모델이 name/value 쌍의 맵으로 구성되기 때문에 여러 view간에 이동할 때 사용하기 편합니다.
  • 여러 view 기술들과 연동할 수 있습니다.
  • spring 태그를 제공합니다.
  • form 태그를 제공합니다.
  • session 과 request Scope을 사용할 수 있습니다.

13. Web MVC framework

13.1. Introduction

Spring MVC는 DispatcherServlet  를 중심으로 만들어졌습니다.
모든 객체가 Command 객체로 사용될 수 있습니다.
View Resolution이 정말 유연하다.

13.2. The DispatcherServlet

Spring MVC 프레임워크도 다른 request 중심의 웹 MVC 프레임워크와 마찬가지로 중앙 서브릿에서 요청(request)을 디스패칭하여 웹 애플리케이션의 다른 기능들을 제공합니다.

13.3. Controllers

MVC에서 “C”에 해당하며 Service 인터페이스를 사용하여 애플리케이션의 기능을 제공합니다. ModelAdnView 객체와 더불어 Spring MVC를 구성하는 기본 요소 입니다.

13.4. Handler mappings

Handler mapping을 사용하여 웹에서 들어온 요청을 처리할 적당한 핸들러(컨트롤러)로 매핑 시킵니다.

13.5. Views and resolving them

컨트롤러에서 요청을 처리한 뒤 ModelAndView 객체에 넘기는 View에 대한 정보를 풀어제낄 녀석과 VIew에 대해 살펴봅니다.

13.6. Using locales

DispatcherServlet 을 사용하여 국제화를 위해 사용자의 Locale을 읽을 수 있습니다.

13.7. Using themes

웹에 특정 테마를 적용하고 싶다면 리소스 파일과 <spring:theme/> 태그를 사용 할 수 있습니다.

13.8. Spring’s multipart (fileupload) support

파일 업로드 기능을 지웝합니다.

13.9. Using Spring’s form tag library

Spring의 form 태그 사용법

13.10. Handling exceptions

웹에서 요청에서 에외가 발생했을 때 그것을 처리할 핸들러를 지정할 수 있습니다.

13.11. Convention over configuration

네이밍 규약만 잘 지킨다면 상당량의 설정 내용을 줄일 수 있습니다. Spring에서 지원하는 CoC를 설명합니다.

13.12. Further Resources

Spring 사이트에 있는 Spring MVC Step-by-Step
Expert Spring Web MVC and WebFlow