从web.xml说起,父子容器的启动,必须配置contextLoadListener和一个servlet,然后加入init-param指定配置文件,而ServletContextListener是javax提供的接口,在web容器启动时,就会自动调用它的初始化方法,导入父容器的配置文件
创建父容器,将父容器的父容器设置为web容器,刷新容器,将完成初始化的父容器设置到web容器中
先看第一个方法,创建容器:
容器的刷新
web容器启动-》调用监听器-》加载父容器-》初始化servlet,一般没设置就是等到有请求的时候,web容器才会创建servlet,不过我们会咋web.xml中配置load-on-startup为1, 提前创建servlet
这个是在GenericServlet中
进入 initWebApplicationContext 方法
在 onRefresh 中,初始化了九个web组件,也就是处理请求的各种功能组件
和获取创建什么类型的容器一样,是在 dispatchServlet 这个类的同一个包下有一个配置文件
现在父子容器都创建好了,开始走一下请求处理过程,普通的servlet中,都是在请求到达之后,web容器会匹配url找到对应的serlvet,然后调用它的service方法处理请求
跳转到了 DispatchServlet 中
所有处理主要逻辑都在这个方法里面
然后每个主要逻辑都进去看看,但是由于没有写具体环境,所以有些组件的实现很多,对应不同的请求以及处理方法,所以看的是较为上层的方法
======================================================================================================================
======================================================================================================================
=============================================================================================================================
=========================================================================================================================
=====================================================================================================================
它的前面还有一个通过handlerAdapter调用handler的方法,不过有不同类型适配器,所以就简单先知道有这个过程,后面再补
调用handler之后,会有结果返回,其实质都是ModelAndView,然后会紧接着执行拦截器的后处理,最后就是回到DispatchServlet,执行视图解析和渲染页面,如下:
首先解析,拿到视图
将返回结果的数据,渲染页面
SpringMVC的请求处理过程大致就是这样,对应不同的handler,有不同的handlerMapping和handlerAdapter去处理,更加具体估计会在看springBoot的时候,会更加细致的看处理流程。