리루
5. Servlet (써블릿) - DispatcherServlet 본문
1. 요청이 어떻게 처리되느냐?
- 해당 요청의 정보들을 판단한다.(Multipart, Theme, etc..)
- 요청을 처리할 수 있는 Handler를 찾는다. (DispatcherServlet 이 들고있는 여러 종류의 HandlerMapping 중, 기본적으로는 BeanNameUrlHandlerMapping, RequestMappingHandlerMapping 인터페이스가 있다.)
- RequestMappingHandlerMapping 가 @Controller, @GetMapping, @PostMapping 등을 사용한 Handler를 찾아준다.
- 찾은 Handler를 가져와 어느 HandlerAdapter가 찾아낸 Handler를 실행할 수 있는가를 찾아낸다. 이 경우에는 RequestMappingHandlerAdaptor가 해당 Handler를 지원한다.
- HandlerInternal Method 안에서 Java의 Reflection을 통해서 invokeHandlerMethod를 수행한다.
- 해당 Hander를 수행하고, 결과값을 반환한다.
- 여러 타입(15가지)의 ReturnValueHandler 중 반환되는 값의 타입을 어던 Handler가 처리해줄 수 있는지 선택된다.
- @RestController(@Controller + @ResponseBody)일 경우에는 RequestResponseBodyMethodProcessor 가 처리해줄 수 있다.( 그리고 이 상황에서는 ModelAndView 값은 Null이다.)
- Convertor를 사용해 Return 값을 Http Reponse 본문에 넣어주는 역할을 한다.