SpringMVC中请求request执行过程

我们先在web.xml中配置好了 DispatcherServlet类

我们服务器端发送的请求 首先进入service方法 可是我们的DispatcherServlet类中没有service方法,所以自动执行其父类的父类的父类HttpServlet抽象类的该方法

在这里插入图片描述
HttpServlet类中的service方法最后将request和response传到了doGet方法,就近原则,传到了DispatcherServlet的父类FrameworkServlet中的doGet方法

在这里插入图片描述

直接将request和response传入processRequest方法
在这里插入图片描述
请求又进入了doService方法,这里的doService方法被DispatcherServlet类重写实现了,所以我们进入DispatcherServlet类中的doService方法
在这里插入图片描述
在doService方法中,我们的request被传入了许多的属性值,例如IoC容器,各种解析器等(两个细红圈所示),然后将request传入doDispatch方法
在这里插入图片描述
我们来到了doDispatch方法,首先定义一个请求处理器执行链mapperHandler,然后定义一个ModelAndView对象mv,mapperHandler执行getHandler方法,为当前的请求分配handler请求处理器(即Controller层下全部的方法),然后后面返回视图mv

然后定义一个适配器ha,Handler格式是不固定的,所以在处理请求时需要HandlerAdapter做适配

ha调用handle方法,返回ModelAndView对象mv,这里真正的调用了Controller层中的handler方法

最后执行processDispatcherResult方法

在这里插入图片描述
processDispatcherResult方法中,将mv对象、请求与响应传入render方法

在这里插入图片描述
在DispatcherServlet的render方法中,获得了目标视图,并进入视图对象的render方法
在这里插入图片描述
这个renderMergedOutputModel方法指把页面和目标方法的返回结果结合起来,在本类中是个抽象方法,InternalResourceView实现了该方法,我们点进去
在这里插入图片描述
最后通过请求转发的方式访问目标页面
在这里插入图片描述

使用redirect重定向的方式,是无法访问我们WEB-INF中的jsp页面,只能通过forward(请求转发)的方式

发布了101 篇原创文章 · 获赞 3 · 访问量 2238

猜你喜欢

转载自blog.csdn.net/S_Tian/article/details/104365603