(1)
웹 브라우저로부터 Request가 들어오면 DispatcherServlet 클래스의 객체가 요청을 받는다.
요청을 한곳에서 받아서 처리하고, 요청에 맞는 handler로 요청을 Dispatch하고, 해당 handler의 실행 결과를 Http Response 형태로 만드는 역할을 한다.
(2)
DispatcherServlet은 해당 요청을 처리하기 위한 컨트롤러를 검색하기 위해 HandlerMapping 객체를 이용한다.
HandlerMapping은 여러 개의 Controller 파일 중, request에 해당하는 적합한 컨트롤러를 찾아서 연결한다.
HandlerMapping으로 실행하지 않고 HandlerAdapter 객체를 따로 둔 이유는?
컨트롤러 구현 방법
- @Controller annotation
- Controller interface 구현
- HttpRequestHandler interface 구현
위 세 가지 방식 중 어떠한 방법으로 컨트롤러를 구현했는지에 상관없이 동일한 방법으로 컨트롤러를 실행하기 위해서이다.
(3)
다시 DispatcherServlet으로 돌아와서 HandlerAdapter에게 요청을 보낸다.
(4)
HandlerAdapter는 컨트롤러의 methods 중 요청에 맞는 적합한 method를 매칭하고,
(5)
컨트롤러 실행 결과를 ModelAndView 객체 타입으로 리턴한다.
뷰도 컨트롤러처럼 검색 객체와 실행 객체를 따로 둔다.
(6)
컨트롤러의 요청 처리 결과를 ModelAndView로 받으면 DispatcherServlet은 결과를 보여줄 뷰 객체를 검색하기 위해 ViewResolver 빈 객체를 사용한다.
(7)
ViewResolver 객체로부터 실행해야 할 뷰 객체를 찾았다면, DispatcherServlet은 ViewResolver가 리턴한 View 객체에게 응답 결과 생성을 요청한다.
(8)
마지막으로 View를 Response로 반환한다.
References