Spring MVC ... (1) - DispatcherServlet

으음... 예전에도 이 부분에 해당하는 포스팅을 한 적이 있는것 같다. 항상, 게으름에 제자리를 맴도는 것 같네... ^^;

Spring MVC 는 다른 MVC 프레임워크와 동일하게 앞단에 프론트 컨트롤러를 두고있다.

DispatcherServlet 은 web.xml 에 정의한 서블릿을 의미한다.
web.xml 에서의 설정을 살펴보면 다음과 같다. 서블릿을 하나 등록하고 해당 서블릿에 매핑을 시켜주는것이 전부이다.

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

다음은 Spring MVC 의 흐름이다.


1. 어떤 요청이 들어오면 DispatcherServlet (프론트 컨트롤러) 이 해당 요청을 받는다. 모든 요청의 진입점이 되는 것이다.
2. HandlerMapping을 통해 해당 Request에 맞는 Controller를 찾아 매핑 시킨다
3. 매핑된 Handler의 메소드를 호출한다 
4. Request를 처리 후 ModelAndView객체가 존재할 경우 ModelAndView 객체를 리턴한다.

뱀발을 달자면 1번과 2번 단계 사이에 locale 을 판단하게 된다.
한국어만 지원을 하는 웹페이지를 만든다면 크게 상관은 없겠지만, 여러가지 언어를 지원하게 될 경우 locale 별로 판단하여 보여주는 메시지를 변경시켜주는 것은 상당히 메리트가 있는 작업이다. ^^; 뭐 다들 알고 있는 이야기 꺼낸다고 돌 던지지 마세요~

Spring MVC 에서의 applicationContext는  WebApplicationContext 를 사용하고 해당 파일의 이름은 기본적으로 [servlet-name]-servlet.xml 파일에 정의를 할 수 있다.
위에서 web.xml 의 DispatcherServlet 정의한 것을 예로 들경우 example-servlet.xml 이 applicationContext 파일이 되는 것이다.

Controllers : MVC 의 c 에 해당하는 컴포넌트

  • Handler mappings : 특정 컨트롤러에 Request 를 매핑시킨다.
  • View resolver : view 이름을 view 로 해석한다.
  • Locale resolver : 클라이언트의 locale 을 해석하여 국제화된 view 를 제공할 수 있게한다.
  • Theme resolver : 개인화 페이지(layout)를 제공하는것 처럼 웹 어플리케이션이 사용할 수 있는 테마를 해석한다.
  • multipart file resolver : 파일업로드 기능을 제공한다.
  • Handler exception resolver : 예외 발생시 특정 view 로 보내거나, 좀 더 복잡한 예외 핸들링 코드를 구현하는 기능을 제공


by 겔군 | 2007/05/12 20:57 | Spring | 트랙백(1) | 덧글(2)

트랙백 주소 : http://gerions.egloos.com/tb/3399467
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from Whiteship's .. at 2007/05/12 22:07

제목 : 13.2. The DispatcherServlet
example org.springframework.web.servlet.DispatcherServlet 1 example ...more

Commented by decoder at 2007/05/15 17:42
1번과 2번 사이에서 Locale을 판단하는 거였군요!! 감사합니다. ^^
Commented by 겔군 at 2007/05/17 23:48
HandlerMapping 에서 매핑이 이뤄지기 직전에 이루어지는 듯 싶군요.
레퍼런스에 나와있는 야그~ ^^;

:         :

:

비공개 덧글

<< 이전 페이지     다음 페이지 >>