1. Http(s)로 들어 오는 모든 request를 받음
2. HandlerMapping애 어떤 Controller(Handler)를 사용할건지 알아냄
3. HandlerAdapter를 통해 Controller에 전달
4. Controller에서 돌려준 view name으로 ViewResolver에서 View를 알아냄
5. View에 요청해 처리된 결과를 화면으로 표현함
6. 웹 브라우저에 최종 결과를 출력
DispatcherServlet이 가지는 기능(전략 인터페이스)
HandlerMapping
Request와 Controller 객체를 mapping을 정의하는 인터페이스
일반적으로 사용하는 @RequestMapping을 이용한 handler mapping 전략
BeanNameUrlHandlerMapping, DefaultAnnotationHandlerMapping이 default 전략
HandlerAdapter
HandlerMapping이 Controller를 찾아주면 해당 Handler(Controller)를 실행 시켜 ModelAndView를 받음
Spring의 Controller 종류는 4가지(Servlet, Controller, HttpRequestHandler, @Controller 어노테이션 사용)이므로 HandlerAdapter도 총 4개
이 중 SimpleServletHandlerAdapter를 제외한 3개의 Adapter가 default 전략으로 설정 되어 있음
ViewResolver
Controller에서 Request를 처리하고 생성하는 결과물에 대한 View 처리 전략 인터페이스
Controller가 view name만 돌려주더라도 ViewResolver가 ModelAndView 객체로 변경해서 돌려 줌
HandlerExceptionResolver
HandlerMapping이나 Controller 실행 도중 발생한 예외를 다룸
default 전략
- AnnotationMethodHandlerExceptionResolver : @ExceptionHandler 처리
- ResponseStatusExceptionResolver : 발생한 예외를 HTTP status code로 변경
- DefaultHandlerExceptionResolver : 앞선 exceptionResolver가 처리하지 못한 예외상황을 처리, 메소드를 찾지 못해 발생하는 예외는 HTTP 404를 발생
MultipartResolver
RFC 1867에 따라 multipartFile upload request에 대해 해석, 변환하는 전략 인터페이스
CommonsMultipartResolver, StandardServletMultipartResolver 가 있음
LocaleResolver
웹 기반의 Locale 결정 전략 인터페이스
Spring에서는 Request, Session, Cookie 등을 기반으로 사용한 구현체들이 있음
- "accept-language" 헤더 값 : AbstractLocaleContextResolver, AbstractLocaleResolver, AcceptHeaderLocaleResolver
- 쿠키 : CookieLocaleResolver
- Locale 고정 : FixedLocaleResolver
- 세션 : SessionLocaleResolver
ThemeResolver
웹 기반의 Theme 결정 전략 인터페이스
<Spring:theme> 태그를 사용한 경우 ThemeResolver 구현체로 Theme를 정의할 수 있음
[참조]
https://blog.zenika.com/2010/04/26/building-a-web-framework-on-top-of-spring-mvc/
https://hunit.tistory.com/189
https://jess-m.tistory.com/15
'자바 > 스프링' 카테고리의 다른 글
Spring Bean Scope (0) | 2019.04.04 |
---|---|
Spring AOP (0) | 2019.04.01 |
Spring Transaction (0) | 2019.03.15 |
IoC(Inversion of Controll) - 제어의 역전 (0) | 2019.02.13 |
Spring Bean 설정(XML) (0) | 2016.06.09 |