SpringBoot源码分析之内嵌servlet容器[4]
本章主要分析SpringBoot的另一大特性:内嵌servlet容器。
SpringBoot提供了对内嵌Tomcat、Jetty、Undertow的支持。
内嵌servlet容器创建与启动
内嵌servlet容器是在容器的刷新过程中创建并启动的。
详情请参照本系列第二章中AbstractApplicationContext类的refresh方法中调用的onRefresh方法。
onRefresh方法由具体的子类覆盖。
对于servlet类型的容器来说,onRefresh方法在ServletWebServerApplicationContext类中被覆盖。
protected void onRefresh() {
super.onRefresh();
try {
createWebServer();
}
catch (Throwable ex) {
throw new ApplicationContextException("Unable to start web server", ex);
}
}
private void createWebServer() {
// 获取当前的webServer
WebServer webServer = this.webServer;
// 获取当前的servlet容器
ServletContext servletContext = getServletContext();
// 刚开始时都为null
if (webServer == null && servletContext == null) {
// 这里默认拿到的是TomcatServletWebServerFactory的实例
// JettyServletWebServerFactory
// 和UndertowServletWebServerFactory通常也是一种选择
ServletWebServerFactory factory = getWebServerFactory();
// 默认拿到的是TomcatWebServer的实例
this.webServer = factory.getWebServer(getSelfInitializer());
}
else if (servletContext != null) {
try {
getSelfInitializer().onStartup(servletContext);
}
catch (ServletException ex) {
throw new ApplicationContextException("Cannot initialize servlet context", ex);
}
}
initPropertySources();
}
在本项目的pom文件中,作者引入了spring-boot-starter-web
依赖,spring-boot-starter-web
使用的是Tomcat作为默认的内嵌servlet容器。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 504537531@qq.com
文章标题:SpringBoot源码分析之内嵌servlet容器[4]
文章字数:272
本文作者:YF
发布时间:2019-10-14, 15:24:29
最后更新:2019-10-15, 17:08:01
原始链接:https://zhouyufan0568.github.io/2019/10/14/springboot-embedded-servlet-container/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。