Spring MVC는 MVC Model2의 발전된 형태로 구성되어 있다.
클라이언트의 요청을 받아 컨트롤러에게 전달, 컨트롤러가 리턴한 결과값을 View에 전달하여 알맞은 응답을 생성하도록 한다.
클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정한다.
DispatcherServlet의 처리 요청을 변환해서 컨트롤러에게 전달, 그 응답결과를 DispatcherServlet이 요구하는 형식으로 변환한다.
클라이언트의 요청을 처리한 뒤, 결과를 리턴한다.
컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담는다.
컨르롤러의 처리 결과를 보여줄 뷰를 결정한다.
컨트롤러의 처리 결과 화면을 생성한다. JSP 템플릿 파일등을 이용한다.
클라이언트의 모든 요청은 Dispatcher Servlet이라는 Servlet Class가 받는다.
Dispatcher Servlet은 요청 URL을 Handler Mapping에게 전달하고, 현재 요청에 알맞은 Controller와 Method에 대한 정보를 알아낸다. 어떤 요청에 대한 어떤 Controller가 동작할지를 xml 파일이나 Java파일의 어노테이션으로 설정한다. 또한 Spring으로 만들어진 Web Application이 실행될 떄, Handler Mapping 객체들이 생성되면서 이런 정보들을 관리한다.
Dispatcher Servlet은 HandlerAdapter에게 요청 처리를 위임한다.
Handler Adapter는 Controller와 해당 메서드를 실행한다.
Handler Mapping은 DispatcherServlet으로 부터 전달된 URL을 바탕으로 HandlerAdapter 객체를 포함하는 HandlerExecutionChain 객체를 생성하며, 이후 DispatcherServlet이 HandlerExecutionChain 객체로부터 HandlerAdapter 객체를 가져와서 해당 메소드를 실행하게 된다.
Controller는 비지니스 로직을 처리하고, 그 결과를 바탕으로 뷰(ex. JSP)에 전달할 객체를 Model객체에 저장한다. Dispatcher Servlet에게 View name을 리턴한다.
Modle : Controller에서 View로 넘겨줄 객체가 저장되는 곳.
Dispatcher Servlet은 view name을 View Resolver에게 전달하여 View객체를 얻는다.
이때 View name 뿐만 아니라 accept와 같은 header 정보도 전달된다.
header 정보 내의 Accept는 HTML, JSON, XML 일 수 있고, 기본적으로는 HTML이다.
View Resolver는 전달된 정보를 바탕으로 사용자에게 보여줄 View가 무엇인지 결정한다.
JSP인 경우 JstlView 객체가 생성되며, JstlView 객체가 "xxxx.jsp"에 포워딩하여 결과를 보여준다.
Dispatcher Servlet은 View 객체에 화면 표시를 의뢰한다.
View 객체는 해당하는 뷰(ex. JSP, Thymeleaf)를 호출하며, 뷰는 Model 객체에서 화면 표시에 필요한 객체를 가져와 화면 표시를 처리한다.