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

댓글