Spring boot Request Life Cycle
구조
흐름
Filter
모든 요청에 대한 서블릿 필터가 실행된다. (설정되어있다면)
이후 모든 요청은 DispatcherServlet으로 전달된다.DispatcherServlet
받은 요청을 분석한다. (Common Service)1. DispatcherServlet은 HandlerMapping 에게 위임하여 요청을 처리할 Handler (Controller)를 찾는다.
2. HandlerMapping은 요청 URL을 보고 Handler를 찾아 Handler의 이름과 함께 반환한다. (HandlerExecutionChain타입) - handler과 인터셉터 관련 상태를 가지고 있다.
3. DispatcherServlet은 찾아낸 Handler를 실행할 수 있는 HandlerAdapter 를 찾는다.
4. 찾아낸 HandlerAdapter 를 사용해 Handler를 실행한다.
- 실행 전에 전처리, 후처리로 실행해야할 인터셉터 목록을 결정하고 실행
- Handler를 실행하며 비즈니스 로직 실행
- Handler의 리턴값: View(뷰의 파일명), Model(비즈니스 로직 처리한 후의 데이터)
5. DispatcherServlet은 ViewResolver에게 View의 파일명을 전달하고 View 객체를 얻는다.
- View의 이름에 해당하는 View를 찾는 단계
- View Resolver 는 전략 객체이며 view name 뿐 아니라 헤더 정보(accept)도 전달된다.
- View Resolver 는 전달된 정보를 바탕으로 사용자에게 보여줄 View 가 무엇인지 결정한다.
6. DispatcherServlet 은 View 객체에게 Model 과 함께 화면 표시를 의뢰한다.
7. View 는 해당하는 뷰를(ex. JSP, Thymleaf..) 호출하며, Model 객체에서 화면 표시에 필요한 정보를 가져와 화면 표시를 처리한다.
8. DispatcherServlet 은 View 로부터 받은 결과를 클라이언트에게 반환한다.
9. 요청중 발생하는 예외는 DispatcherServlet가 catch를 해서 처리해준다. (doDispatch)
참조
https://github.com/binghe819/TIL/blob/master/Spring/MVC/Spring%20MVC%20flow.md