SpringMVC中请求request执行过程

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

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

SpringMVC中请求request执行过程_第1张图片
HttpServlet类中的service方法最后将request和response传到了doGet方法,就近原则,传到了DispatcherServlet的父类FrameworkServlet中的doGet方法

SpringMVC中请求request执行过程_第2张图片

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

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

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

最后执行processDispatcherResult方法

SpringMVC中请求request执行过程_第6张图片
processDispatcherResult方法中,将mv对象、请求与响应传入render方法

SpringMVC中请求request执行过程_第7张图片
在DispatcherServlet的render方法中,获得了目标视图,并进入视图对象的render方法
SpringMVC中请求request执行过程_第8张图片
这个renderMergedOutputModel方法指把页面和目标方法的返回结果结合起来,在本类中是个抽象方法,InternalResourceView实现了该方法,我们点进去
SpringMVC中请求request执行过程_第9张图片
最后通过请求转发的方式访问目标页面
SpringMVC中请求request执行过程_第10张图片

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

你可能感兴趣的:(springmvc)