DispatcherServlet
Servlet Container에서 HTTP를 통해 들어오는 모든 요청을 가장 먼저 처리해주는 프론트 컨트롤러입니다. 클라이언트로부터 어떠한 요청이 오면 톰캣과 같은 서블릿 컨테이너가 요청을 받는데, 이때 제일 앞에서 서버로 들어오는 모든 요청을 처리하는 프론트 컨트롤러를 Dispatcher-servlet이라고 합니다. 그래서 공통된 작업을 DispatcherServlet이 처리한 후 적절한 세부 컨트롤러로 작업을 위임해줍니다. 일반적으로 DispatcherServlet이 처리하는 url패턴은 /*.do와 같이 /로 시작해서 .do로 끝나는 url패턴에 대해서 처리하라고 지정해줍니다.
HandlerMapping
dispatcher servlet으로 들어온 모든 요청을 각각의 Controller로 위임 처리를 하는 handler mapping 설정을 dispatcher servlet 설정 파일에서 합니다. HTTP 요청 정보를 이용해서 컨트롤러를 찾아주는 기능을 수행합니다. HandlerMapping 인터페이스를 구현해서 생성합니다.
public interface HandlerMapping{
HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
}
DispatcherServlet은 등록된 HandlerMapping 전략들에게 HttpServletRequest를 전달하면서 매칭되는 오브젝트를 찾습니다.
HandlerAdapter
HandlerMapping을 통해 찾은 컨트롤러를 직접 실행하는 기능을 수행합니다. HandlerAdapter는 인터페이스를 구현해서 생성합니다.
public interface HandlerAdapter{
boolean supports(Object handler);
ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
long getLastModified(HttpServletRequest request, Object handler);
}
HandlerMapping으로 찾은 오브젝트를 등록된 HandlerAdaptor들의 supports 메서드에 대입하며 지원 여부를 살핍니다. 부적합할 경우 handler 메서드를 실행하여 ModelAndView를 리턴합니다. 스프링 MVC가 지원하는 컨트롤러는 총 4개이므로, 핸들러 어댑터도 4개입니다.
- SimpleServletHandlerAdapter(Servlet interface)
- HttpRequestHandlerAdapter(HttpRequestHandler interface)
- SimpleControllerHandlerAdapter(Controller interface)
- AnnotationMethodHandlerAdapter
View Resolver
뷰 리졸버는 ViewResolver 인터페이스를 구현해서 만들어집니다. 뷰 리졸버를 빈으로 등록하지 않는다면 DispatcherServlet의 디폴트 뷰 리졸버인 InternalResourceViewResolver가 사용됩니다. 핸들러 매핑과 마찬가지로 뷰 리졸버도 하나 이상을 빈으로 등록해서 사용할 수 있습니다. 주요 뷰 리졸버에는 UrlBasedViewResolver, InternamResourceViewResolver, ResourceBundleViewResolver, XmlViewResolver 등이 있습니다.
'스프링' 카테고리의 다른 글
스프링부트 jpa PostgreSQL 사용하기 (0) | 2024.02.26 |
---|---|
스프링 부트 프로젝트 구조 알아보기 (0) | 2024.02.26 |
스프링부트 시작하기 (0) | 2024.02.26 |
스프링 AOP (0) | 2022.10.26 |
스프링 5가지 스코프 (0) | 2022.10.26 |