스프링 MVC의 핵심 - DispatcherServlet
DispatcherServlet 은 클라이언트의 요청을 가장 앞단에서 받아 처리하는 스프링의 FrontController 이다.
따라서 DispatcherServlet 를 통해 처리되는 요청은 일련의 스프링 MVC 의 처리 과정을 거친다는의미이다.
요청 흐름
- 서블릿이 호출되면 HttpServlet 이 제공하는 serivce() 를 호출
- 스프링 MVC는 DispatcherServlet 의 부모인 FrameworkServlet 에서 service() 를 Override 해둠
- FrameworkServlet.service() 를 시작으로 여러 메서드가 호출되면서 DispacherServlet.doDispatch() 를 호출
동작 순서
- 핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다.
- 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
- 핸들러 어댑터 실행: 핸들러 어댑터를 실행한다.
- 핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행한다.
- ModelAndView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다.
- viewResolver 호출: 뷰 리졸버를 찾고 실행한다.
JSP의 경우: InternalResourceViewResolver 가 자동 등록되고, 사용된다. - View 반환: 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다.
JSP의 경우 InternalResourceView(JstlView) 를 반환하는데, 내부에 forward() 로직이 있다. - 뷰 렌더링: 뷰를 통해서 뷰를 렌더링 한다.
'백엔드 > Spring' 카테고리의 다른 글
BeanValidation 써보기 (0) | 2023.09.22 |
---|---|
@ModelAttribute 와 @RequestBody 써보기 (0) | 2023.09.21 |
Thread Pool (0) | 2023.07.25 |
Servlet (0) | 2023.07.25 |
의존성 주입: Spring을 사용할 때 의존성 주입 방법 (0) | 2023.07.18 |