地摊秘笈之Spring MVC源码(二)解密请求流程

概述

Spring MVC的流程主要是从Servlet的service方法作为入口,以时序图为例,将一些关键的方法表明大致了解流程所做的处理。

地摊秘笈之Spring MVC源码(二)解密请求流程_第1张图片

  1. 请求先进入DispatcherServlet的父类FrameworkServlet的service方法,进行PATCH方法的处理,其余方法调用FrameworkServlet]的父类HttpServlet的service方法,进行不同GET或POST等方法的不同处理。之后调用FrameworkServlet的processRequest方法,进行发布一些事件和调用DispatcherServlet的doService方法。而doService方法主要往request里面set一些属性,最主要还是在doDispatch进行分发请求。
  2. 调用DispatcherServlet的doDispatch方法进行分发请求。
  3. 调用DispatcherServlet的getHandler方法。主要进行遍历全部映射器处理器,通过映射器处理器找到处理器(Controller)和拦截器(HandlerInterceptor)。
  4. 调用DispatcherServlet的getHandlerAdapter方法.主要进行遍历处理器适配器,得到可以支持进行适配的适配器。
  5. 调用HandlerExecutionChain的拦截器前置方法applyPreHandle
  6. 使用适配器HandlerAdapter进行调用Controller的方法。主要进行使用适配器进行参数的映射,同时执行处理器(Controller),返回ModelAndView (数据Model和逻辑视图)。
  7. 调用DispatcherServlet的applyDefaultViewName方法,对于没有逻辑视图给予默认视图。
  8. 调用HandlerExecutionChain的拦截器后置方法applyPostHandle
  9. 调用DispatcherServlet的processDispatchResult方法,进行处理分发的结果,里面也会进行异常的处理。
  10. 调用DispatcherServlet的render方法,遍历视图解析器处理视图的逻辑名称,返回视图(View),然后使用视图(View)进行视图的渲染,并且将响应实体写进Response
  11. 调用DispatcherServlet的triggerAfterCompletion方法,进行调用拦截器HandlerInterceptor的afterCompletion方法。

你可能感兴趣的:(spring-mvc)