( 왼쪽에 *이 붙어있는 class는 하나 이상의 객체를 가질 수 있는 class 이다.)
Dispatcher Servlet의 기본 전략
- DispatcherServlet.properties에 정의
MultipartResolver
- 파일 업로드 요청 처리에 필요한 인터페이스
- HttpServletRequest를 MultipartHttpServletRequest로 변환해주어 요청이 담고 있는 File을 꺼낼 수 있는 API 제공
LocaleResolver
- 클라이언트의 위치(Locale) 정보를 파악하는 인터페이스
- Default 전략은 요청의 accept-language를 보고 판단
ThemeResolver
- 애플리케이션에 설정된 테마를 파악하고 변경할 수 있는 인터페이스
HandlerMapping
- 요청을 처리할 Handler를 찾는 인터페이스
- Default로 BeanNameUrlHandlerMapping, RequestMappingHandlerMapping이 등록되어있다
HandlerAdapter
- HandlerMapping이 찾아낸 Handler를 실행(처리)하는 인터페이스
- 스프링 MVC 확장력의 핵심
- Default로 HttpRequestHandlerAdapter, SimpleControllerHandlerAdapter, RequestMappingHandlerAdapter이 등록
HandlerExceptionResolver
- 요청 처리 중 발생한 예외 처리를 담당하는 인터페이스
RequestToViewNameTranslator
- 핸들러에서 뷰 이름을 명시적으로 리턴하지 않았을 경우, 요청을 기반으로 뷰 이름을 판단하는 인터페이스
- Default는 요청 Url을 보고 판단
ViewResolver
- 뷰 이름(String)에 해당하는 뷰를 찾아내는 인터페이스
- Default는 InternalResourceViewResolver
FlashMapManager
- FlashMap 인스턴스를 가져오고 저장하는 인터페이스
- FlashMap은 주로 리다이렉션을 사용할 때 요청 매개변수를 사용하지 않고 데이터를 전달하고 정리할 때 사용
- redirect:/events/200
- redirect:/events?id=200
- 위와 같이 pathvariable이나 요청 파라미터로 전달하지 않도록 도와준다.
- redirect:/events
스프링 MVC 동작 원리 정리
스프링 MVC 동작은, 결국엔 조금 복잡한 Servlet이다 (DispatcherServlet)
DispatcherServlet 초기화
- 특정 타입에 해당하는 빈을 찾는다.
- 없으면 기본 전략을 사용한다 (DispatcherServlet.properties에 정의)
스프링 부트 사용하지 않는 스프링 MVC
- 서블릿 컨테이너(ex. 톰캣)에 등록한 웹 애플리케이션(WAR)에 DispatcherServlet을 등록한다.
- web.xml에 서블릿 등록
- 또는 WebApplicationInitializer에 자바 코드로 서블릿 등록
스프링 부트로 사용하는 스프링 MVC
- 자바 애플리케이션에 내장 톰캣을 만들고 그 안에 DispatcherServlet을 등록한다.
- 스프링 부트 자동 설정이 자동으로 해줌
- 스프링 부트의 주관에 따라 여러 인터페이스 구현체를 빈으로 등록한다. -> 사용자의 일을 많이 줄여줌
**스프링 부트를 사용하지 않는 스프링 MVC는 서블릿 컨테이너에 등록한 애플리케이션 안에 DispatcherServlet이 등록되어 있고,
스프링 부트를 사용할 경우, 자바 애플리케이션 안에, 내장 톰캣 안에, DispatcherServlet이 등록되는 것을 다시 한 번 주의하자.
'Spring' 카테고리의 다른 글
Database Transaction과 데이터 동기화 -2 (0) | 2021.08.01 |
---|---|
Database Transaction과 데이터 동기화 -1 (0) | 2021.08.01 |
DispatcherServlet이란 (0) | 2020.08.02 |
서블릿 리스너와 서블릿 필터 (0) | 2020.08.01 |
서블릿이란 ? (0) | 2020.07.31 |