Spring

스프링 MVC 구성 요소

라우브 2020. 8. 2. 21:23

( 왼쪽에 *이 붙어있는 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 초기화

  1. 특정 타입에 해당하는 빈을 찾는다.
  2. 없으면 기본 전략을 사용한다 (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