<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 등록