Spring

36. DispatcherServlet - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2025. 2. 17. 17:27

1. DispatcherServlet이란?

  • 관심사의 분리

  • DispatcherServlet과 Controller, registerForm.jsp 사이에 Adapter들이 있는이유?
    • 느슨한 결합으로 변경에 유리하기 위해

  • DispatcherServlet 소스 분석 

  • DispatcherServlet.properties
org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver

// 테마기능 ThemeResolver
org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver

// 요청을 어떤 메서드가 처리할 수 있는지 알려주는 기능 HandlerMapping
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping

org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter

// 예외처리 HandlerExceptionResolver
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver,\
    org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
    org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

// 요청 URL을가지고 어떤 View를 사용할지 알아내는 역할 RequestToViewNameTranslator
org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator

// 컨트롤러가 뷰네임을 반환했을때 그게 어떤 뷰인지 알려주는 역할 ViewResolver
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

// 데이터를 맵 형태로 일시적으로 저장하는 기능 FlashMapManager
org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
  • 디버그 모드를 통해 알아보자

  • login/login URL로 요청을 보내주면...

  • DispatcherServlet이 초기화를 시작하였고...

  • RequestMappingHandlerMapping : DispatcherServlet이 요청을 처리할 컨트롤러와 그에 대응하는 핸들러 메서드를 찾기위한 핵심 역할을 수행한다. 
    -> 핸들러 어답터를 선택하고 컨트롤러에서 처리된 결과를 DispatcherServlet에게 응답으로 전달한다.
  • 요청 URL과 컨트롤러 메서드를 매핑 해주고
  • RequestMappingHandlerAdapter : 메서드를 실제로 호출하고 처리하여 응답을 반환한다.

  • /ex2는 ExceptionController.main2()와 연결되어있다.