SpringBoot嵌入式Web容器原理與使用介紹
嵌入式 Web 容器:應(yīng)用中內(nèi)置服務(wù)器(Tomcat),不用在外部配置服務(wù)器了
原理
- SpringBoot 項(xiàng)目啟動(dòng),發(fā)現(xiàn)是 web 應(yīng)用,引入 web 場(chǎng)景包 ----- 如:Tomcat
- web 應(yīng)用創(chuàng)建一個(gè) web 版的 IOC 容器 ServletWebServerApplicationContext
- ServletWebServerApplicationContext 啟動(dòng)的時(shí)候?qū)ふ?ServletWebServerFactory (Servlet 的 web 服務(wù)器工廠,用于生產(chǎn) Servlet 服務(wù)器)
- ServletWebServerFactory 底層默認(rèn)有很多 Web 服務(wù)器工廠

- 底層會(huì)自動(dòng)配置好 ,自動(dòng)配置類 ServletWebServerFactoryAutoConfiguration
- ServletWebServerFactoryAutoConfiguration 導(dǎo)入 ServletWebServerFactoryConfiguration 工廠配置類
ServletWebServerFactoryConfiguration.class

- 動(dòng)態(tài)判斷系統(tǒng)中導(dǎo)入了那個(gè)web服務(wù)器配置包
- 如果導(dǎo)入 Tomcat 依賴,會(huì)自動(dòng)放一個(gè) Tomcat 服務(wù)器工廠, TomcatServletWebServerFactory 為我們創(chuàng)建出 Tomcat 服務(wù)器工廠
- Tomcat 底層支持如下服務(wù)器

@Override
public WebServer getWebServer(ServletContextInitializer... initializers) {
if (this.disableMBeanRegistry) {
Registry.disableRegistry();
}
Tomcat tomcat = new Tomcat();
File baseDir = (this.baseDirectory != null) ? this.baseDirectory : createTempDir("tomcat");
tomcat.setBaseDir(baseDir.getAbsolutePath());
Connector connector = new Connector(this.protocol);
connector.setThrowOnFailure(true);
tomcat.getService().addConnector(connector);
customizeConnector(connector);
tomcat.setConnector(connector);
tomcat.getHost().setAutoDeploy(false);
configureEngine(tomcat.getEngine());
for (Connector additionalConnector : this.additionalTomcatConnectors) {
tomcat.getService().addConnector(additionalConnector);
}
prepareContext(tomcat.getHost(), initializers);
return getTomcatWebServer(tomcat);
}
總結(jié): 所謂內(nèi)嵌服務(wù)器,就是把我們手動(dòng)啟動(dòng)服務(wù)器的方法放進(jìn)框架中了。
應(yīng)用
1. 切換Web服務(wù)器
排除 tomcat 服務(wù)器,導(dǎo)入 undertow 依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
2. 定制服務(wù)器規(guī)則
方法一: 修改 server 下的配置文件
ServerProperties.class

server.undertow.accesslog.dir=/tmp
方法二: 自定義 ConfigurableServletWebServerFactory
方法三: 自定義 ServletWebServerFactoryCustomizer 定制化器
作用: 將配置文件的值,與 ServletWebServerFactory 綁定
SpringBoot 設(shè)計(jì): Customizer 定制化器,可以定制 XXX 規(guī)則
到此這篇關(guān)于SpringBoot嵌入式Web容器原理與使用介紹的文章就介紹到這了,更多相關(guān)SpringBoot嵌入式Web容器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決@Transactional注解事務(wù)不回滾不起作用的問(wèn)題
這篇文章主要介紹了解決@Transactional注解事務(wù)不回滾不起作用的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
Java中一個(gè)線程執(zhí)行死循環(huán)有什么后果
這篇文章主要為大家詳細(xì)介紹了Java中一個(gè)線程執(zhí)行死循環(huán)有什么后果,當(dāng)一個(gè)線程在執(zhí)行死循環(huán)時(shí)會(huì)影響另外一個(gè)線程嗎,下面為大家揭曉2016-05-05
Spring+Mybatis動(dòng)態(tài)切換數(shù)據(jù)源的方法
這篇文章主要為大家詳細(xì)介紹了Spring+Mybatis動(dòng)態(tài)切換數(shù)據(jù)源的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
Spring實(shí)戰(zhàn)之搜索Bean類操作示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之搜索Bean類操作,結(jié)合實(shí)例形式分析了Spring搜索Bean類的相關(guān)配置、接口實(shí)現(xiàn)與操作技巧,需要的朋友可以參考下2019-12-12
java 中JDBC連接數(shù)據(jù)庫(kù)代碼和步驟詳解及實(shí)例代碼
這篇文章主要介紹了java 中JDBC連接數(shù)據(jù)庫(kù)代碼和步驟詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02
Java/Spring項(xiàng)目的包開(kāi)頭為什么是com詳解
這篇文章主要介紹了Java/Spring項(xiàng)目的包開(kāi)頭為什么是com的相關(guān)資料,在Java中包命名遵循域名反轉(zhuǎn)規(guī)則,即使用公司的域名反轉(zhuǎn)作為包的前綴,以確保其全球唯一性和避免命名沖突,這種規(guī)則有助于邏輯分層、代碼可讀性提升和標(biāo)識(shí)代碼來(lái)源,需要的朋友可以參考下2024-10-10

