DispatcherServlet
이 모든 연결을 담당하며, 웹 브라우저로부터의 요청을 받음DispatcherServlet
은HandlerMapping
에게 컨트롤러 검색을 요청함HadlerMapping
은 클라이언트의 요청 경로를 이용해 컨트롤러 Bean 객체
를 DispatcherServlet에 전달함DispatcherServlet
은 전달받은 컨트롤러 객체를 처리할 수 있는 HandlerAdapter
에게 요청 처리를 위임HandlerAdapter
는 컨트롤러의 알맞은 메서드를 호출해 요청을 처리함ModelAndView
라는 객체로 DispatcherServlet
에게 반환DispatcherServlet
은 전달받은 결과의 뷰를 ViewResolver
객체를 이용하여 검색함ViewResolver
는 ModelAndView의 뷰 이름에 해당하는 View객체
를 찾거나 생성하여 리턴함DispathcerServlet
는 VeiwResolver
가 리턴한 View 객체
에게 응답 결과 생성을 요청클라이언트의 요청을 실제로 처리하는 것은 컨트롤러이고,
DispatcherServlet 은 클라이언트의 요청을 전달 받는 창구 역할을 한다.
DispatcherServlet 에게 어떤 컨트롤러가 요청을 처리하는가는 중요하지 않으며, 처리 결과를 ModelAndView 타입의 객체로 전달 받을 수 있기만 하면 된다.
이 때, 사용할 컨트롤러를 찾고, 처리 결과를 ModelAndView 객체로 변환해 주는 객체가 HandlerAdapter 이다.핸들러 객체의 실제 타입마다 그에 알맞은 HandlerMapping 과 HandlerAdapter 가 존재하기 때문에 사용할 핸들러의 종류에 따라 해당 HandlerMapping 과 HandlerAdapter 를 스프링 빈으로 등록해 주어야 하는데, 스프링 설정 기능(<mvc:annotaion-driven>)을 사용하면 직접 등록하지 않아도 스프링이 알아서 ㅓㅁ처리해 준다.
요청을 처리할 컨트롤러를 찾기 때문에 ControllerMapping 이라는 이름이 어울리는데, 스프링 MVC 는 웹 요청을 처리할 수 있는 범용적인 프레임워크를 제공하고 있기 때문에, 클라이언트의 요청을 처리하는 객체가 컨트롤러가 아닐 수도 있다(HttpRequestHandler 등). 그래서 스프링 MVC 는 웹 요청을 실제로 처리하는 객체를 Handler 라고 표현하고 있다. 따라서 컨트롤러는 DispatcherServlet 입장에서 보면 한 종류의 핸들러 객체이다.
출처: https://tinkerbellbass.tistory.com/40 [Welcome to NeverLand]