본문 바로가기
java/spring

spring - DispatcherServlet

by rewind 2024. 7. 6.

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 - 응답결과 생성해서 전달