Servlet
은 HTTP를 통해 웹 클라이언트의 요청 수신 및 응답하는 역할을 담당합니다. DispatcherServlet은 SpringMVC의 핵심이며 Front Controller(서버로 오는 모든 요청을 받아 처리하는 컨트롤러)를 담당하고 있습니다.
클라이언트로부터 요청이 오는 경우 서블릿 컨테이너가 요청을 받습니다. 이러한 모든 요청을 DispatcherServlet이 가장 먼저 받게 되며 공통적인 작업을 마친 이후에 알맞은 컨트롤러에게 작업을 위임하는 구조입니다. 모든 요청 및 공통작업을 처리해주어 컨트롤러만 구현해주면 되기 때문에 편리합니다.
하지만 모든 요청을 전부 처리하기 때문에 이미지,HTML와 같은 정적 파일에 대한 요청을 처리하는 과정에서 정적자원을 불러오지 못하는 상황이 나올 수 있습니다. 이러한 문제는 요청을 처리할 컨트롤러를 먼저 탐색하고 없다면 리소스경로를 탐색하여 자원을 찾아내는 것으로 해결이 가능합니다. 또한 영역 분리로 인한 효율적인 리소스 관리 및 확장을 용이하게 하는 것도 기대할 수 있습니다.
HandlerMapping
을 통해 요청에 맞는 컨트롤러 탐색HandlerAdapter
를 통해 컨트롤러의 메서드를 실행하고 ModelAndView
객체를 받는다.ViewResolver
를 통하여 ModelAndView
객체에 담긴 뷰 이름을 실제 뷰 객체로 변환.HttpServletResponse
객체에 담아 클라이언트에게 전송.스프링 MVC에서 클라이언트의 요청을 처리할 컨트롤러를 찾아주는 인터페이스입니다. DispatcherServlet
에서 해당 인터페이스를 통해 요청된 것을 처리할 수 있는 객체인 Handler
를 찾아주는 역할을 담당하고 있습니다. SpringMVC에서 다양한 구현체를 제공하고 있으며 우선순위에 따라 적용되는 특징이 있습니다.
DispatcherServlet
이 핸들러를 실행할 수 있도록 할 수 있는 인터페이스입니다. 해당 인터페이스의 supports()
메서드를 통해 탐색한 핸들러를 지원하는 어댑터를 찾고 handle()
메서드를 통해 핸들러를 실행합니다. 이 과정을 통해 핸들러의 파라미터와 리턴값을 처리,예외,검증 등의 로직을 수행합니다.
DispatcherServlet
은 ViewResolver
라는 Bean
를 사용하여 컨트롤러가 ModelAndView
를 리턴한 것을 전달 받아 HttpServletResponse
객체에 담을 수 있게 변환하는 역할을 담당하고 있습니다.
다양한 타입의 뷰를 지원하며 요청에 맞는 뷰를 찾아 모델 데이터와 함께 뷰에 전달합니다.
참조 - https://mangkyu.tistory.com/18
ModelAndView
에서 Model
인 경우 그대로 반환하지만 View
인 경우 이름에 맞게 반환할 수 있게 해주는 ViewResolver
를 통해 적절한 화면으로 적용할 수 있게 합니다. DispatcherServlet에서 모든 요청을 처리한다. 이러한 과정에서 HandlerMapping,HandlerAdapter를 통해 알맞은 Controller에 위임하여 처리한다. 반환값이 데이터인 경우 그대로 응답하지만 뷰인경우 ViewResolver를 통해 알맞게 반환할 수 있도록 한다.