跳到主要内容

Spring MVC系列(6)-DispatcherServlet初始化源码分析

前言

我们知道servlet程序需要使用servlet容器运行,那么DispatcherServlet是如何在spring boot内嵌tomcat容器进行初始化的呢?

1. 启动tomcat

首先点击启动类,启动spring boot 程序,然后进入了ServletWebServerApplicationContext类的createWebServer方法,开始创建一个web服务器。

    private void createWebServer() {


WebServer webServer = this.webServer;
ServletContext servletContext = this.getServletContext();
if (webServer == null && servletContext == null) {


StartupStep createWebServer = this.getApplicationStartup().start("spring.boot.webserver.create");
// 1. 获取容器工厂
ServletWebServerFactory factory = this.getWebServerFactory();
createWebServer.tag("factory", factory.getClass().toString());
// 2. 使用工厂获取容器
this.webServer = factory.getWebServer(new ServletContextInitializer[]{

this.getSelfInitializer()});
createWebServer.end();
this.getBeanFactory().registerSingleton("webServerGracefulShutdown", new WebServerGracefulShutdownLifecycle(this.webServer));
this.getBeanFactory().registerSingleton("webServerStartStop", new WebServerStartStopLifecycle(this, this.webServer));
} else if (servletContext != null) {


try {


this.getSelfInitializer().onStartup(servletContext);
} catch (ServletException var5) {


throw new ApplicationContextException("Cannot initialize servlet context", var5);
}
}
// 3. 初始化PropertySources配置
this.initPropertySources();
}