购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.1 嵌入式ServletWeb容器

在Spring及SpringBoot的使用过程中,应用最广泛的当属Web应用,而Web应用又往往部署在像Tomcat这样的Servlet容器中。本章将带领大家学习SpringBoot中Web应用的整合。

在SpringBoot项目中引入spring-boot-starter-web的依赖,SpringBoot的自动配置机制便会加载并初始化其相关组件。根据自动配置的原理,在spring-boot-autoconfigure包中的META-INF/spring.factories配置文件中找到了针对Servlet自动配置的Enable Auto Configuration,源码如下所示。

SpringBoot对ServletWeb的支持,都包含SpringBoot内置支持的Web容器类型,目前包括Tomcat,Jetty,Undertow,Servlet容器相关支持类均位于spring-boot项目的org.springframework.boot.web包下。

1.以Tomcat为例解释剖析配置

以Tomcat为例,通过自动配置先初始化TomcatServletWebServerFactory工厂类,在SpringBoot启动过程中,该工厂类会通过其getWebServer方法创建TomcatWebServer实例,启动Tomcat等一系列操作,源码如下所示。

TomcatServletWebServerFactory的getWebServer方法中实现了Tomcat的创建,BaseDir的设置,Connector的初始化和定制化等一系列初始化操作。至此,上面代码中依旧没有体现TomcatServer的创建和初始化,不要着急,它们就在getWebServer方法的最后一行代码调用的getTomcatWebServer方法中。getTomcatWebServer方法源码如下所示。

TomcatWebServer构造方法接收Tomcattomcat和booleanautoStart两个参数,并将其赋值给对应的成员变量。其中Tomcat参数不能为null,autoStart参数则根据端口是否大于等于0来决定是否启动服务。在构造方法的最后,调用了initialize方法来初始化操作。

可以看出在TomcatWebServer的initialize方法中做了以下操作:重命名tomcat引擎名称,对Context添加生命周期监听事件,启动服务触发初始化监听,检查TomcatStarter对象是否存在及Container状态是否正确,绑定命名到类加载器,启动守护等待线程等。源码如下所示。 uRBEmnbKaP0+J2IfD/9/2CjpOIhkABOJMzm4UlbQOIrxcHxRXj4EMN8VJcpUHZj3

点击中间区域
呼出菜单
上一章
目录
下一章
×