从web.xml说起,父子容器的启动,必须配置contextLoadListener和一个servlet,然后加入init-param指定配置文件,而ServletContextListener是javax提供的接口,在web容器启动时,就会自动调用它的初始化方法,导入父容器的配置文件

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_web容器

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_02

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_配置文件_03

创建父容器,将父容器的父容器设置为web容器,刷新容器,将完成初始化的父容器设置到web容器中

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_04

先看第一个方法,创建容器:

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_05

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_配置文件_06

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_配置文件_07

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_08

容器的刷新

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_web容器_09

web容器启动-》调用监听器-》加载父容器-》初始化servlet,一般没设置就是等到有请求的时候,web容器才会创建servlet,不过我们会咋web.xml中配置load-on-startup为1, 提前创建servlet

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_10

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_11

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_12

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_配置文件_13

这个是在GenericServlet中

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_web容器_14

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_配置文件_15

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_web容器_16

进入 initWebApplicationContext 方法

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_17

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_web容器_18

在 onRefresh 中,初始化了九个web组件,也就是处理请求的各种功能组件

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_19

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_web容器_20

和获取创建什么类型的容器一样,是在 dispatchServlet 这个类的同一个包下有一个配置文件

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_21

现在父子容器都创建好了,开始走一下请求处理过程,普通的servlet中,都是在请求到达之后,web容器会匹配url找到对应的serlvet,然后调用它的service方法处理请求

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_22

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_web容器_23

跳转到了 DispatchServlet 中

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_配置文件_24

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_web容器_25

所有处理主要逻辑都在这个方法里面

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_web容器_26

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_web容器_27

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_28

然后每个主要逻辑都进去看看,但是由于没有写具体环境,所以有些组件的实现很多,对应不同的请求以及处理方法,所以看的是较为上层的方法

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_29

 

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_配置文件_30

======================================================================================================================

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_web容器_31

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_配置文件_32

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_33

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_配置文件_34

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_配置文件_35

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_36

======================================================================================================================

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_web容器_37

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_38

=============================================================================================================================

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_39

=========================================================================================================================

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_web容器_40

=====================================================================================================================

它的前面还有一个通过handlerAdapter调用handler的方法,不过有不同类型适配器,所以就简单先知道有这个过程,后面再补

调用handler之后,会有结果返回,其实质都是ModelAndView,然后会紧接着执行拦截器的后处理,最后就是回到DispatchServlet,执行视图解析和渲染页面,如下:

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_41

首先解析,拿到视图

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_web容器_42

将返回结果的数据,渲染页面

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_43

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_初始化_44

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_配置文件_45

Spring Boot源码解读与原理分析 LinkedBear pdf 下载_配置文件_46

 

SpringMVC的请求处理过程大致就是这样,对应不同的handler,有不同的handlerMapping和handlerAdapter去处理,更加具体估计会在看springBoot的时候,会更加细致的看处理流程。