Spring Boot 3 指南 三、Spring MVC(6)选择并配置嵌入式服务器问题

你想要使用Jetty作为嵌入式容器而不是默认的Tomcat容器。

解决方案

排除Tomcat运行时并包含Jetty运行时。Spring Boot将自动检测类路径上是否有Tomcat、Jetty或Undertow,并相应地配置容器。

它是如何工作的

Spring Boot 默认支持 Tomcat、Jetty 和 Undertow 作为嵌入式 Servlet 容器。默认情况下,Spring Boot 使用 Tomcat 作为容器(通过 spring-boot-starter-web 工件中的
spring-boot-starter-tomcat 依赖项表示)。可以通过属性配置容器,其中一些适用于所有容器,而其他一些则特定于某个容器。全局属性以 server. 或 server.servlet 开头,而特定于容器的属性则以 server.<容器> 开头(其中容器可以是 tomcat、jetty 或 undertow)。

设置通用配置属性

如表3-8所示,有几个通用服务器属性可供设置。

由于嵌入式容器都遵循Servlet规范,因此也支持JSP页面,并且这种支持默认是启用的。Spring Boot使得更改JSP提供者或甚至完全禁用支持变得容易。有关暴露的属性,请参见表3-9。

在Spring Boot应用程序中使用JSP是不被鼓励且受限的。

当你使用Spring MVC时,你可能想要使用HTTP会话来存储属性(通常与Spring Security一起使用来存储CSFR令牌等)。通用的servlet配置也允许你配置HTTP会话以及它将如何被存储(cookie,URL等)。参见表3-10了解相关属性。

当使用Spring会话时,只有
server.servlet.session.timeout属性适用!

最后,Spring Boot通过暴露一些属性,使得配置SSL变得简单。请参见表3-11和食谱3-8,了解如何配置SSL。

所有在前面表格中提到的属性仅适用于使用嵌入式容器运行应用程序的情况。当部署到外部容器时(例如,部署WAR文件),这些设置不适用!

更改运行时容器

当包含spring-boot-starter-web依赖时,它将自动包含对Tomcat容器的依赖,因为它依赖于
spring-boot-starter-tomcat构件。要启用不同的servlet容器,需要排除
spring-boot-starter-tomcat,并包含spring-boot-starter-jetty或
spring-boot-starter-undertow中的一个。参见列表3-34。


在Maven中,你可以在内使用元素来排除一个依赖。

现在当应用程序启动时,它将使用Jetty而不是Tomcat启动(见图3-14)。