本篇文章将以下面几个步骤讲解
1.标准流程图
2.组件和流程详细介绍
3.代码实现--DispatcherServle请求分发的完整过程
4.提问解答
5.解决疑惑
1.标准流程图
(详细版)![](https://img-blog.csdnimg.cn/2019121322375783.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4Njc1OTY3,size_16,color_FFFFFF,t_70)
(精简版)![](https://img-blog.csdnimg.cn/20191213223702675.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4Njc1OTY3,size_16,color_FFFFFF,t_70)
2.组件和流程详解
第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找 Handler
第三步:处理器映射器HandlerMapping向前端控制器HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象,多个HandlerInterceptor拦截器对象)
第四步:前端控制器调用处理器适配器去执行Handler(通俗的讲就是controller)
第五步:处理器适配器HandlerAdapter将会根据适配的结果去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView (ModelAndView是springmvc框架的一个底层对象,包括 Model和view)
第八步:前端控制器请求视图解析器去进行视图解析 (根据逻辑视图名解析成真正的视图(jsp/freemarker/pdf/...)),通过这种策略很容易更换其他视图技术,只需要更改视图解析器即可
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染 (视图渲染将模型数据(在ModelAndView对象中)填充到request域)
第十一步:前端控制器向用户响应结果
3.代码实现- DispatcherServle请求分发的完整过程
下面将以DispatcherServle.java展开,因为涉及到的类继承关系太多,所以先看DispatcherServlet的继承关系图,首先说明一下,好多方法都是底层调底层,最底层的就是Servlet的service()方法,也就是和Servlet的生命周期有关了
首先打开DispatcherServlet.java文件
找到doService方法,看代码
protected void doService(HttpServletRequest request, HttpServletResponse response) thr