자바/스프링

DispatcherServlet

gthoya 2019. 2. 11. 10:20

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