1.DispatcherServlet?
공통처리부분을 별도로 분리할시에 그 역할(전처리)을 해주는것
전처리 외에도 실제로 하는 역할이 다양하다
핸들러 매핑
핸들러 - 키(URL):맵(메서드)으로 관리
메서드를 찾아서 디스패처 서블릿이 해당 메서드 호출
디스패처 서블릿 - 핸들러 어댑터 - 컨트롤러
핸들러 어댑터가 중간에 관여함으로써 느슨한 연결 -> 변경에 유리하다
디스패처서블릿이 직접 컨트롤러를 호출하면 변경시 불리
디스패처서블릿이 컨트롤러만이 아닌 서블릿이라던지 여러가지 호출 가능하다
뷰리졸버 - 인터널리소스뷰리졸버(servlet-context.xml, 기본)
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
컨트롤러가 뷰이름을 반환하면 뷰리졸버가 실제 뷰 이름을 찾아서 반환해줌(경로와 확장자까지 모두 포함한)
-> 모델이 응답 후 반환
실제로는 뷰인터페이스를 거쳐서 처리된다(뷰가 여러가지 있음)
기본전략 : DispatcherServlet.properfies 클래스
디자인패턴중 전략패턴이 있어서 기본전략이라고 부른다!
등호(=)를 기준으로 key=value로 저장되어있음
# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.
org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
// -> 지역
org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
// 테마
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
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
// 예외처리 관련
org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
// 요청 URL을 가지고 어떤 뷰를 사용할지
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
// 컨트롤러가 뷰를 반환했을때 실제 뷰가 어떤 뷰인지
org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
// 일시적으로 데이터를 저장/관리
전략들이 리스트로 되어있음 -> 순서가 있다
initStrategies - 기본 전략 초기화
doService - doDispatch() 호출
doDispatch - 실제요청처리
ProcessDispatchResult - 예외발생 여부 확인, 발생하지않았으면 render() 호출
render - 응답결과 생성해서 전달