SpringMVC启动流程—— DispatcherServlet

SpringMVC启动流程—— DispatcherServlet

由于DispatcherServlet本身就是一个Servlet,它的本质上是一个Servlet,只是子类不断的对HttpServlet父类进行方法扩展,这里我们就以他为例来跟踪一下Servlet的注册流程吧!

1. DispatcherServlet类

SpringMVC启动流程—— DispatcherServlet
可以看到,它底层也是继承HttpServlet来实现的,所以他也是一个Servlet,只不过它比较特殊,SpringMVC的所有请求都是通过它来进行请求处理的。

SpringMVC启动流程—— DispatcherServlet
我们通过在web.xml中配置DispatcherServlet来进行注册,接下来我们可以看看他的启动流程。

2. DispatcherServlet注册流程

2.1 HttpServletBean的init

SpringMVC启动流程—— DispatcherServlet
这是一个抽象类,公共的部分他都实现了,变化的部分统一来抽象,交给其子类来实现,在它的init方法里然后又通过调用initServletBean(这个方法是子类实现的)

2.2 FrameworkServlet的initServletBean方法

SpringMVC启动流程—— DispatcherServlet
在该方法中DispatchServlet的父类FrameworkServlet会重写其父类的initServletBean方法,并调用initWebApplicationContext()以及onRefresh()方法。

2.3 FrameworkServlet的initWebApplicationContext()方法

SpringMVC启动流程—— DispatcherServlet
initWebApplicationContext()方法会创建一个当前servlet的一个IoC子容器,并读取标签的配置的xml文件并加载相关配置。

2.4 DispatcherServlet的onRefresh方法

SpringMVC启动流程—— DispatcherServlet
最后调用onRefresh方法加载相关web组件。

3. 流程汇总

1、初始化创建,一般使用DispatchServlet类。
2、DispatchServlet的父类FrameworkServlet会重写其父类的initServletBean方法,并调用initWebApplicationContext()以及onRefresh()方法。
3、initWebApplicationContext()方法会创建一个当前servlet的一个IoC子容器。
4、读取标签的配置的xml文件并加载相关Bean。
5、onRefresh()方法创建Web应用相关组件。