-
HandlerMapping 은 핸들러를 찾아주는 Interface ( strategy pattern )
-
HandlerAdapter 은 핸들러를 실행하는 Interface
-
요청 분석 후 멀티 파트 타입 요청 ( 파일 업로드 ) 인지 로케일은 어떤건지 테마는 어떤 테마인지 정보를 판단 후 이 요청을 처리 할수 있는 핸들러를 찾는다. ( handlerMapping)
-
아무런 설정을 하지 않아도 디스패쳐서블릿이 기본으로 BeanNamerUrlHandler 와 RequestMappingHandler 를 갖고 있다.
-
RequestMappingHandler는 GetMapping, PostMapping 등이 핸들러를 지정한것을 찾아주는 핸들러 매핑
-
for문을 돌면서 핸들러를 찾고 찾으면 핸들러를 return 한다 ( handlerMapping)
-
그 다음 실행 할 수 있는 핸들러 어댑터를 찾는다. ( HandlerAdapter )
- 기본으로 HttpRequestHandlerAdapter , SimpleControllerHandlerAdapter , RequestMappingHandlerAdapter 이 존재한다.
-
이 중 실행할수 있는 핸들러를 return 한다.( HandlerAdapter )
-
핸들러를 실행하기 전에 http GET Method 라면 캐싱 기능을 지원.
-
핸들러 어댑터가 요청을 처리하는데
-
핸들러를 가져와서 handerIntener로 들어가서 reflection (InvokeHandlerMethod 메소드) 을 사용해서 요청에 등록된 controller을 실행
-
InvokeHandlerMethod는 인자로 request, response, handlerMethod를 주입받음.
- HandlerMethod 객체 안에는 이미 method에 대한 정보가 주입되어 있음.
-
이 주입된 정보를 reflection을 이용하여 호출
- @RestController은 일반적인 @Controller 에 @ResponseBody를 사용한것과 동일함
-
호출후 return값을 받아서 이 값을 처리 할수 있는 returnValueHandler를 찾는다.
- @ResponseBody가 있으면 returnValueHandler 는 Converter를 사용해서 return 값은 HTTP 본문에 넣어주는 처리를 함. ( view에 rendering 을 하지 않음 )
- @ReponseBody가 없으면 view의 이름을 찾아 model의 data를 rendering 시킴
- 이때 view의 이름은 Controller의 return 값
-
예외 발생시 등록된 HandlerExceptionResolver 중 가장 적절한 Resolver를 찾아서 예외를 처리.
-
최종적으로 응답을 보냄.
개발/Spring MVC
- DispatcherServlet - 1부 2020.08.14
DispatcherServlet - 1부
2020. 8. 14. 16:33