DIspatcher-doDisPatch
DispatcherServlet - doDispatch
1. checkMultipart
-
multipartResolver가 있고 request가 MultiPart이면,
-
multipartResolver로 AbstractMultipartHttpServletRequest를 상속받는 MultiPartRequest로 변환해서 반환
-
request에서 File을 꺼내서
-
-
그게 아니면 그냥 그대로 request 반환
2. getHandler
-
getHandlerInternal : 해당 request를 통해 lookupPath를 찾아서 맞는 handlerMethod 검색
-
getHandlerExecutionChain : 해당 request를 통해 lookupPath를 찾아서 매치되는 interceptor들을 추가한 HandlerExecutionChain 반환
3. getHanlerAdapter
- getHandler로 얻은 handler를 위한 HandlerAdapter 를 찾아서 반환
4. HandlerExecutionChain.applyPreHandle
- interceptor들 실행
5. HandlerAdapter.handle
-
invokeHandlerMethod를 통해 실제 handlerMethod를 실행시키고 ModelAndView를 반환
-
ServletInvocableHandlerMethod에다가 ArgumentResolvers, ReturnValueHandlers, DataBinderFactory, ParameterNameDiscoverer를 셋업하고 ModelAndViewContainer에 넣음
-
ServletInvocableHandlerMethod.invokeAndHandle : 실제 실행
-
getModelAndView : viewName을 통해 ModelAndView를 얻어서 반환
-
6. HandlerExecutionChain.applyPostHandle
- interceptor들 실행
7. processDispatchResult
-
render 를 통해 response view 결정
-
modelAndView가 String이면 resolveViewName를 통해 view 반환
-
그렇지 않으면 getView
-
-
View.render를 통해 response에 model 값과 view 결과 render
댓글
댓글 쓰기