HTTP 프로토콜로 들어오는 모든 요청을 톰캣과 같은 서블릿 컨테이너가 받게 되면 그 안에서 각 요청을 적절한 컨트롤러에 전달하는 역할을 하는 Front Controller로 web.xml에서 정의한 모든 URL 요청 처리를 모두 담당하고 있어 번거로움을 해결해준다. 대신 모든 요청을 처리하니 정적 파일에 대한 요청까지 가로채기 때문에 /apps의 URI로 접근하면 DispatcherServlet이 담당을 하고 /resource의 URI로 접근하는 경우 담당하지 않게 하는 방식이나 요청을 처리할 컨트롤러를 찾을 수 없는 경우에만 Resource 경로를 탐색해서 자원을 탐색하는 방식으로 문제를 개선했다.
1. DispatchServlet으로 request가 들어온다.
2. 들어온 요청을 담당하는controller
를 handler Mapping을 통해 찾은 다음 handler Adapter를 이용해 호출한다.
3. controller
는 service 로직을 실행시켜 나온 결과를 model
로 저장하고 응답할 포맷인 view
를 지정해서 DispatcherServlet에게 알려준다.
4. viewResolver를 통해 응답할 view
를 찾은 뒤 DispatcherServlet에게 전달받은 model
을 이용해 랜더링한다.
5. DispatcherServlet는 렌더링된 view
를 결과로 response한다.
컨트롤러가 전달하는 모델을 이용해서 동적으로 화면을 구성하는 뷰 템플릿으로 기존에 사용되는 JSP와 다르게 가독성이 좋고 진입장벽이 낮은 장점을 가지고 있다.
controller class
@RequestMapping("/test")
public String test(Model model) {
model.addAttribute("test"," hello world");
return "view";
}
view.html
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<p th:text="${test}"></p>