본문 바로가기

자바/스프링

DispatcherServlet

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