Spring MVC请求处理过程

---恢复内容开始---

在使用spring MVC的时候一般都需要在web.xml中配置请求分发

所以我们大致清楚DispatcherServlet是spring MVC的核心类,也可以看出需要运行在Servlet容器中。

GenericServlet 实现了Servlet接口,为所有请求的模板。

一般我们使用tomcat作为Servlet容器,那么看一下tomcat是如何处理请求的

 

   可以看出tomcat是在过滤器链中调用ApplicationFilterChain的internalDoFilter来发起一个请求调用的。

  1、调用HttpServlet 的 service

  2、调用FrameworkServlet的service - doGet  -  processRequest

  3、调用DispatcherServlet的 doService - doDispatch

  4、获取methodAdpter

  5、调用methodAdpter的handle方法(反射调用Controller的方法)

  这大致是一个请求如何从Servlet容器到业务本身实现类的过程。

  具体的分发和业务处理大部分都在DispatcherServlet 中实现:

    在doService中设置请求属性,包含FlashMap(重定向使用),上下文

    在doDispatch中 1、检查请求是否有multipart,如果有则要包装一次请求,请求结束也会清理multipart资源

           2、获取Handler链

           3、获取handler的Adapter 

           4、拦截器pre处理 

           5、handler处理,得到ModelAndView

           6、拦截器post处理

           7、将ModelAndView或Exception都处理成ModelAndView,然后reander(参考配置的ViewResolver的处理)

           8、ModelView根据request的RequestDispatcher(Servlet容器实现)来实现响应处理,输出页面。

  大致请求与分发的流程就是这样,后面记录一下Bean的加载、注入和参数绑定

posted @ 2018-04-09 11:51  lion_eagle  阅读(226)  评论(0编辑  收藏  举报