自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SpringBoot嵌入式容器詳細(xì)介紹

開發(fā) 架構(gòu)
任何Spring bean的Servlet、Filter或 *Listener實例都注冊到嵌入式容器中。如果你想從應(yīng)用程序中引用一個值,這可能特別方便。配置過程中的屬性。

概述

Spring Boot支持嵌入式Tomcat、Jetty和Undertow服務(wù)器。大多數(shù)開發(fā)人員使用適當(dāng)?shù)?“starter”來獲得完全配置的實例。默認(rèn)情況下,嵌入式服務(wù)器在端口8080上監(jiān)聽HTTP請求。

默認(rèn)引入下面依賴使用Tomcat服務(wù)器。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

如需要使用其它如Undertow作為服務(wù)器只需要如下依賴即可。

<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>

Servlets, Filters, and listeners

當(dāng)使用嵌入式servlet容器時,可以通過使用Spring bean或掃描servlet組件來注冊servlet、filter和servlet規(guī)范中的所有監(jiān)聽器(如HttpSessionListener)。

Registering Servlets, Filters, and Listeners as Spring Beans

任何Spring bean的Servlet、Filter或 *Listener實例都注冊到嵌入式容器中。如果你想從應(yīng)用程序中引用一個值,這可能特別方便。配置過程中的屬性。

默認(rèn)情況下,如果上下文只包含單個Servlet,則將其映射到/。在有多個servlet bean的情況下,bean名用作路徑前綴。Filter映射到/*。

如果基于約定的映射不夠靈活,可以使用ServletRegistrationBean、FilterRegistrationBean和ServletListenerRegistrationBean類進(jìn)行完全控制。

通常情況下,將Filter Bean放置無序是安全的。如果需要特定的順序,則應(yīng)該使用@Order注釋過濾器,或者讓它實現(xiàn)Ordered。你不能通過給過濾器的bean方法加上@Order注解來配置它的順序。如果不能更改過濾器類以添加@Order或?qū)崿F(xiàn)Ordered,則必須為過濾器定義一個FilterRegistrationBean,并使用setOrder(int)方法設(shè)置注冊bean的訂單。避免配置按順序讀取請求體的過濾器。

注:要查看應(yīng)用程序中每個過濾器的順序,請為web日志組啟用調(diào)試級別日志(logging.level.web=debug)。注冊過濾器的詳細(xì)信息,包括它們的順序和URL模式,將在啟動時記錄下來。

Servlet Context Initialization

嵌入式servlet容器不會直接執(zhí)行servlet 3.0+javax.servlet.ServletContainerInitializer接口或Spring的org.springframework.web.WebApplicationInitializer接口。這樣做是有意為之,目的是降低在war中運行的第三方庫破壞Spring Boot應(yīng)用程序的風(fēng)險。

如果需要在Spring Boot應(yīng)用程序中執(zhí)行servlet上下文初始化,應(yīng)該注冊一個實現(xiàn)org.springframework.boot.web.servlet.ServletContextInitializer接口的bean。單一的onStartup方法提供了對ServletContext的訪問,如果有必要,可以很容易地將其用作現(xiàn)有WebApplicationInitializer的適配器。

掃描 Servlets, Filters, and listeners。

在使用嵌入式容器時,可以通過使用@ServletComponentScan?來啟用自動注冊帶有@WebServlet、@WebFilter@WebListener注解的類。

容器之ServletWebServerApplicationContext

在底層,Spring Boot使用了另一種類型的ApplicationContext來支持嵌入式servlet容器。ServletWebServerApplicationContext是一種特殊類型的WebApplicationContext,它通過搜索單個ServletWebServerFactory bean來引導(dǎo)自己。通常TomcatServletWebServerFactory、JetttyServletWebServerFactory或UndertowServletWebServerFactory都是自動配置的。

你通常不需要知道這些實現(xiàn)類。大多數(shù)應(yīng)用程序都是自動配置的,并且創(chuàng)建適當(dāng)?shù)?nbsp;ApplicationContext和ServletWebServerFactory。

在嵌入式容器設(shè)置中,ServletContext被設(shè)置為服務(wù)器啟動的一部分,該啟動發(fā)生在應(yīng)用程序上下文初始化期間。因此,ApplicationContext中的bean不能可靠地用ServletContext進(jìn)行初始化。解決這個問題的一種方法是注入ApplicationContext作為bean的依賴項,并僅在需要時訪問ServletContext。另一種方法是在服務(wù)器啟動后使用回調(diào)函數(shù)。這可以使用ApplicationListener來監(jiān)聽ApplicationStartedEvent,如下所示:

public class CustomServletContextListener implements ApplicationListener<ApplicationStartedEvent> {

private ServletContext servletContext;

@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
ApplicationContext applicationContext = event.getApplicationContext();
this.servletContext = ((WebApplicationContext) applicationContext).getServletContext();
}

}

自定義Servlet容器

可以使用Spring環(huán)境屬性來配置公共servlet容器設(shè)置。application.properties或application.yaml文件。

常見的服務(wù)器設(shè)置包括:

  • 網(wǎng)絡(luò)設(shè)置:監(jiān)聽傳入的HTTP請求的端口(server.port),綁定到server.address。地址,等等。
  • Session設(shè)置:會話是否持久(server.servlet.session.persistent),會話超時(server.servlet.session.timeout),會話數(shù)據(jù)的位置(server.servlet.session.store-dir),以及會話cookie配置(server.servlet.session.cookie.*)。
  • 錯誤管理:錯誤頁面的位置(server.error.path)等。
  • SSL
  • HTTP compression

編程方式自定義配置

如果需要以編程方式配置嵌入式servlet容器,可以注冊一個實現(xiàn)WebServerFactoryCustomizer接口的Spring bean。WebServerFactoryCustomizer提供了對ConfigurableServletWebServerFactory的訪問,其中包括許多自定義設(shè)置方法。示例:

@Component
public class MyWebServerFactoryCustomizer implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {

@Override
public void customize(ConfigurableServletWebServerFactory server) {
server.setPort(9000);
}

}

TomcatServletWebServerFactory,JetttyServletWebServerFactory和UndertowServletWebServerFactory是ConfigurableServletWebServerFactory的子類,它們分別為Tomcat, Jetty和Undertow提供了額外的自定義設(shè)置方法。示例:

@Component
public class MyTomcatWebServerFactoryCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

@Override
public void customize(TomcatServletWebServerFactory server) {
server.addConnectorCustomizers((connector) -> connector.setAsyncTimeout(Duration.ofSeconds(20).toMillis()));
}

}

JSP限制

當(dāng)運行一個使用嵌入式servlet容器的Spring Boot應(yīng)用程序(打包為可執(zhí)行的歸檔文件)時,對JSP的支持有一些限制。

  • 使用Jetty和Tomcat,如果你使用war打包,它應(yīng)該可以正常工作。當(dāng)使用java -jar啟動時,不支持jsp。
  • Undertow不支持jsp。
  • 創(chuàng)建自定義error.jsp頁面不會覆蓋錯誤處理的默認(rèn)視圖。應(yīng)該使用自定義錯誤頁面。
責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2009-12-17 10:33:05

嵌入式Linux

2009-12-28 17:54:49

WPF嵌入式資源

2011-03-07 09:57:24

Perst嵌入式數(shù)據(jù)庫

2011-06-21 11:30:31

嵌入式 Qt

2009-12-23 13:05:22

Linux嵌入式

2013-09-22 10:39:00

MeayunDB

2022-12-09 08:34:38

嵌入式Web容器

2009-06-11 11:09:02

Linux嵌入式開發(fā)環(huán)境

2011-01-14 13:13:23

嵌入式Linux開發(fā)

2011-01-14 13:05:25

Linux內(nèi)核嵌入式

2009-07-17 16:06:59

ARM嵌入式開發(fā)

2009-12-09 10:12:28

嵌入式Linux

2011-04-18 11:34:34

嵌入式軟件測試

2009-12-16 15:41:40

嵌入式Linux入門

2013-07-25 09:32:26

OpenGL ESAndroid4.3

2009-11-30 16:54:28

微軟

2020-04-22 11:51:41

物聯(lián)網(wǎng)嵌入式編程IOT

2009-04-23 10:38:27

InnoDB存儲引擎嵌入式

2023-04-27 07:06:18

2010-03-26 11:23:59

無線嵌入式控制技術(shù)
點贊
收藏

51CTO技術(shù)棧公眾號