[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>
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 처리 절차
- WebApplicationContext 를 찾고, bound 한다. WebApplicationContext
DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE
에 default 로 bound 된다. - locale resolver 가 request 에 bound 된다. 이 locale resolver 가 element 들이 request 를 처리할 때 locale 을 사용할 수 있게 해준다.
resolver 를 사용하지 않아도, 아무런 영향이 없기 때문에, locale 을 알아야 할 필요가 없다면 굳이 쓰지 않아도 된다. - theme resolver 가 request 에 bound 된다. view 같은 element 가 어떤 theme 을 사용할 지를 알려준다. 이녀석도 사용하지 않아도 아무런 문제가 없다.
- multipart resolver 가 명시되어 있으면, request 는 multiparts 를 위해 점검되어 진다. 만약 multipart 를 찾으면, request 는 MultipartHttpServletRequest 로 감싸서 further processing 을 하게 된다.
- 알맞는 handler 를 찾는다. handler 를 찾으며, model 을 준비하기 위해 handler 와 연관있는 execution chain(preprocessors, postprocessors, controllers) 이 실행된다.
- model 이 return 되면, view 가 만들어진다. 만약 model 이 하나도 return 되지 않았다면, view 도 전혀 만들어지지 않는다.
DispatcherServlet customization
context paramter 를 web.xml 에 추가하는 작업, 즉 servlet 초기화 parameter 들을 이용해서 DispatcherServlet 를 customize 할 수 있다. 자세한 사항은 ref. 5 참조- contextClass : WebApplicationContext 를 implement 한 class. 이 녀석이 servlet 에 의해 instantiate 되고, 사용된다.
- contextConfigLocation
- namespace
See Also
- Spring MVC - 동작 살펴보기
- Spring MVC 기초 Spring / ORM, 2007/04/25
- Spring MVC Controller, 2008/06/09
댓글 없음:
댓글 쓰기