[컴][웹] Spring WebApplicationContext


[ref. 5] 의 내용을 간략하게 번역했습니다.

DispatcherServlet 

Spring Web MVC 는 "Front Controller" 디자인 패턴을 사용한다.
from : https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/images/mvc.png


위의 그림에서 Front Controller 가 spring 에서 DispatcherServlet 의 역할을 한다. 이 Front Controller 가 request 를 받으면 그것을 알맞는 Controller 로 넘겨주는 역할을 한다.

DispatcherServlet 도 하나의 Servlet (HttpServlet 을 상속받아서 만들어져 있다.)이다. 그래서 아래처럼 web.xml 에서 servlet 이름을 정의하고, mapping 시키는 일을 할 수 있다.

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

*.form 은 ".form"으로 끝나는 모든 request 가 이름이 example 인 DispatcherServlet 으로 mapping 한다는 이야기이다.

web MVC framework 에서는 각 DispatcherServlet 은 각자 자신의 WebApplicationContext 를 가지고 있다. 이 WebApplicationContext 는 root WebApplicationContext 에 정의된(defined) 모든 bean 들을 상속받으며, 이 상속받은 bean 들을 그대로 사용할 수도 있고, bean 들을 override 해서 사용할 수 있다.


[servlet-name]-servlet.xml

이녀석은 servlet 에서 사용할 bean 들을 적어놓은 file 이라고 보면 될 듯 하다.

framework 는 DispatcherServlet 이 초기화될 때, WEB-INF 디렉토리에서
  • [servlet-name]-servlet.xml

파일을 찾고, 이 파일안에 정의된 bean 들을 생성한다.

위의 예제 같은 경우라면,
  • /WEB-INF/example-servlet.xml 

파일이 있어야 한다. servlet 초기화 parameter 를 이용해서 이 xml 의 위치를 조정할 수도 있다.(contextConfigLocation : ref. 4 참조)


special beans

DispatcherServlet 은 special beans 를 가지고 있다. 이녀석들이 request 를 처리하고, 알맞은 view 들을 만든다.이 bean 들은 spring framework 가 가지고 있다. 아래와 같은 녀석들이 있다. 자세한 내용은 ref. 5를 보자.

  • Controller
  • Handler mappings
  • View resolvers
  • Locale resolver
  • Theme resolver
  • multipart file resolver
  • Handler exception resolver(s)


DispatcherServlet 의 request 처리 절차

  1. WebApplicationContext 를 찾고, bound 한다. WebApplicationContext
    DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE
    에 default 로 bound 된다.
  2. locale resolver 가 request 에 bound 된다. 이 locale resolver 가 element 들이 request 를 처리할 때 locale 을 사용할 수 있게 해준다.
    resolver 를 사용하지 않아도, 아무런 영향이 없기 때문에, locale 을 알아야 할 필요가 없다면 굳이 쓰지 않아도 된다.
  3. theme resolver 가 request 에 bound 된다. view 같은 element 가 어떤 theme 을 사용할 지를 알려준다. 이녀석도 사용하지 않아도 아무런 문제가 없다.
  4. multipart resolver 가 명시되어 있으면, request 는 multiparts 를 위해 점검되어 진다. 만약 multipart 를 찾으면, request 는 MultipartHttpServletRequest 로 감싸서 further processing 을 하게 된다.
  5. 알맞는 handler 를 찾는다. handler 를 찾으며, model 을 준비하기 위해 handler 와 연관있는 execution chain(preprocessors, postprocessors, controllers) 이 실행된다.
  6. model 이 return 되면, view 가 만들어진다. 만약 model 이 하나도 return 되지 않았다면, view 도 전혀 만들어지지 않는다.


DispatcherServlet customization

context paramter 를 web.xml 에 추가하는 작업, 즉 servlet 초기화 parameter 들을 이용해서 DispatcherServlet 를 customize 할 수 있다. 자세한 사항은 ref. 5 참조

  1. contextClass : WebApplicationContext 를 implement 한 class. 이 녀석이 servlet 에 의해 instantiate 되고, 사용된다.
  2. contextConfigLocation
  3. namespace


See Also

  1. Spring MVC - 동작 살펴보기
  2. Spring MVC 기초 Spring / ORM,  2007/04/25
  3. Spring MVC Controller, 2008/06/09


References

댓글 없음:

댓글 쓰기