首頁 > Java > java教程 > 主體

SpringBoot怎麼切換成它的嵌入式Servlet容器

王林
發布: 2023-05-13 22:58:12
轉載
1499 人瀏覽過

如何切換成其它的嵌入式Servlet容器(Jetty和Undertow)

SpringBoot預設使用的內建Servlet容器是Tomcat

然而SpringBoot也支援其它的Servlet容器預設的Tomcat只是其中一個

SpringBoot也支援Jetty和Undertow

  • #Jetty適合用於長連結應用程式例如聊天

  • Undertow是一個高效能非阻塞的Servlet容器並發效能非常好但不支援jsp

SpringBoot怎麼切換成它的嵌入式Servlet容器

若要切換只需要在pom檔案中排除自帶的Tomcat啟動器再引入其它Servlet容器的啟動器即可

spring-boot-starter-web裡面引入了spring-boot -starter-tomcat 因此預設使用Tomcat

因此只需排除原先的Tomcat 再引入要新增的Servlet容器的依賴:

##切換成Jetty:

<!-- 引入Web模块 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <!-- 排除tomcat容器 -->
        <exclusion>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <groupId>org.springframework.boot</groupId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 引入其它的Servlet容器 -->
<dependency>
    <artifactId>spring-boot-starter-jetty</artifactId>
    <groupId>org.springframework.boot</groupId>
</dependency>
登入後複製

SpringBoot怎麼切換成它的嵌入式Servlet容器

Jetty啟動成功

#同理切換成undertow:

<!-- 引入Web模块 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <!-- 排除tomcat容器 -->
        <exclusion>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <groupId>org.springframework.boot</groupId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 引入其它的Servlet容器 -->
<dependency>
    <artifactId>spring-boot-starter-undertow</artifactId>
    <groupId>org.springframework.boot</groupId>
</dependency>
登入後複製

SpringBoot怎麼切換成它的嵌入式Servlet容器

Undertow啟動成功

SpringBoot web開發_嵌入式Servlet容器

1、切換嵌入式Servlet容器

1.1、SpringBoot支援的Servlet種類及其切換

1)預設支援的webServer:Tomcat、Jrtty、Undertow

2)切換伺服器

SpringBoot怎麼切換成它的嵌入式Servlet容器

<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>
登入後複製

1.2、原理

1)SpringBoot應用程式啟動發現目前是Web應用。 web場景包-導入tomcat

2)web應用程式會建立一個web版的ioc容器ServletWebServerApplicationContext

3)ServletWebServerApplicationContext  啟動的時候尋找ServletWebServerFactory(ServletWebServerApplicationContext  啟動的時候尋找ServletWebServerFactory(Servlet 的伺服器工廠---> Servlet 的web伺服器)

4)SpringBoot底層預設有很多的WebServer工廠;

  • ##TomcatServletWebServerFactory

  • #JettyServletWebServerFactory

  • #UndertowServletWebServerFactory

  • 5)底層直接會有一個自動設定類。

ServletWebServerFactoryAutoConfiguration匯入了ServletWebServerFactoryConfiguration(設定類別)

6)ServletWebServerFactoryConfiguration 設定類別 根據動態判斷系統中到底導入了那個Web伺服器的套件。 (預設是web-starter導入tomcat套件),容器中就有TomcatServletWebServerFactory

7)TomcatServletWebServerFactory 建立出Tomcat伺服器並啟動;TomcatWebServer 的建構器擁有初始化方法initialize---this.tomcat.start() ;

8)內嵌伺服器,就是手動把啟動伺服器的程式碼呼叫(tomcat核心jar包存在)

2、客製化Servlet容器

2.1、修改設定檔

透過對application.properties設定檔的設置,自訂Servlet容器

#修改servlet容器
server.port=8000
#server.undertow.accesslog.dir=/tmp
登入後複製

2.2、實作WebServerFactoryCustomizer

xxxxx

Customizer:客製化器,可以改變xxxx的預設規則透過

WebServerFactoryCustomizer

修改Servlet 容器的回應埠號:

import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.stereotype.Component;
 
@Component
public class CustomizationBean implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
 
    @Override
    public void customize(ConfigurableServletWebServerFactory server) {
        server.setPort(9000);
    }
}
登入後複製

2.3、ConfigurableServletWebServerFactory

##直接自訂ConfigurableServletWebServerFactory

的介面實作類別

public interface ConfigurableWebServerFactory extends WebServerFactory, ErrorPageRegistry {
    void setPort(int port); 
    void setAddress(InetAddress address); 
    void setErrorPages(Set<? extends ErrorPage> errorPages); 
    void setSsl(Ssl ssl); 
    void setSslStoreProvider(SslStoreProvider sslStoreProvider); 
    void setHttp2(Http2 http2); 
    void setCompression(Compression compression); 
    void setServerHeader(String serverHeader); 
    default void setShutdown(Shutdown shutdown) {
    }
}
登入後複製
#ConfigurableServletWebServer #介面實作類別(框架中預設實作類別):

透過自訂 

ConfigurableServletWebServerFactory SpringBoot怎麼切換成它的嵌入式Servlet容器介面的實作類,即可自訂Servlet容器

以上是SpringBoot怎麼切換成它的嵌入式Servlet容器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板