SpringBoot教程-Spring Boot Web启动器
Spring Boot Starter Web(Spring Boot Web启动器)具有两个重要的特性:
- 对Web开发兼容:它为Web开发提供了兼容性。
- 自动配置:它支持自动配置。
如果我们想要开发一个Web应用程序,需要在pom.xml文件中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
Spring Web启动器使用Spring MVC、REST和Tomcat作为默认的内嵌服务器。单个spring-boot-starter-web
依赖会自动引入与Web开发相关的所有依赖项,并且还能减少构建时的依赖项数量。spring-boot-starter-web
的传递依赖如下:
- org.springframework.boot:spring-boot-starter
- org.springframework.boot:spring-boot-starter-tomcat
- org.springframework.boot:spring-boot-starter-validation
- com.fasterxml.jackson.core:jackson-databind
- org.springframework:spring-web
- org.springframework:spring-webmvc
默认情况下,spring-boot-starter-web
包含以下Tomcat服务器的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.0.0.RELEASE</version>
<scope>compile</scope>
</dependency>
spring-boot-starter-web
会自动配置以下与Web开发相关的内容:
- Dispatcher Servlet
- 错误页面
- Web JARs(用于管理静态依赖)
- 内嵌Servlet容器(Spring Boot内置的Web服务器)
Spring Boot内置了一个内嵌服务器,其中默认的内嵌服务器是Tomcat。Spring Boot还支持另外两个内嵌服务器:
- Jetty服务器
- Undertow服务器
使用其他内嵌Web服务器:
- 对于传统Servlet栈应用,
spring-boot-starter-web
通过包含spring-boot-starter-tomcat
来引入Tomcat,但我们也可以使用spring-boot-starter-jetty
或spring-boot-starter-undertow
。 - 对于响应式栈应用,
spring-boot-starter-webflux
通过包含spring-boot-starter-reactor-netty
来引入Reactor Netty,但我们也可以使用spring-boot-starter-tomcat
、spring-boot-starter-jetty
或spring-boot-starter-undertow
。
Jetty服务器:
Spring Boot还支持一个名为Jetty的内嵌服务器。Jetty是一个HTTP服务器和Servlet容器,具有提供静态和动态内容的能力,常用于机器与机器之间的通信。
如果要在应用程序中使用Jetty服务器,需要在pom.xml文件中添加spring-boot-starter-jetty
依赖。需要注意的是,在使用Jetty服务器时,要确保将默认的Tomcat服务器排除在spring-boot-starter-web
之外,以避免冲突。
Undertow服务器:
Spring Boot提供另一个名为Undertow的服务器,它也是一个像Jetty一样的内嵌Web服务器。Undertow是用Java编写的,由JBoss管理和赞助。Undertow服务器的主要优势包括:
- 支持HTTP/2
- 支持HTTP升级
- 支持Websocket
- 支持Servlet 4.0
- 灵活可嵌入
使用Undertow服务器时,与使用Jetty服务器类似,需要确保将默认的Tomcat服务器排除在spring-boot-starter-web
之外。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
需要注意的是,可以通过使用application.properties
文件来自定义Jetty服务器或Undertow服务器的行为。
spring-boot-starter-web
与spring-boot-starter-tomcat
的区别:
spring-boot-starter-web
包含了Spring Web相关的依赖,包括spring-boot-starter-tomcat
。spring-boot-starter-web
包含以下内容:
- spring-boot-starter
- jackson
- spring-core
- spring-mvc
- spring-boot-starter-tomcat
而spring-boot-starter-tomcat
则包含与Tomcat服务器相关的所有内容,包括:
- org.apache.tomcat.embed:tomcat-embed-core
- org.apache.tomcat.embed:tomcat-embed-el
- org.apache.tomcat.embed:tomcat-embed-websocket
如果希望在不使用内嵌Tomcat服务器的情况下使用Spring MVC,可以通过使用<exclusion>标签排除Tomcat服务器。
<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>
我们还可以通过使用application.properties
文件来自定义Undertow服务器的行为。
spring-boot-starter-web
与spring-boot-starter-tomcat
之间的区别是:
spring-boot-starter-web
包含了Spring Web相关的依赖,其中包括spring-boot-starter-tomcat
。spring-boot-starter-web
包含以下依赖:- spring-boot-starter
- jackson
- spring-core
- spring-mvc
- spring-boot-starter-tomcat
而
spring-boot-starter-tomcat
则包含与Tomcat服务器相关的所有依赖,包括:- org.apache.tomcat.embed:tomcat-embed-core
- org.apache.tomcat.embed:tomcat-embed-el
- org.apache.tomcat.embed:tomcat-embed-websocket
spring-boot-starter-tomcat
的依赖如下:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>8.5.23</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
<version>8.5.23</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
<version>8.5.23</version>
<scope>compile</scope>
</dependency>
如果我们希望在不使用内嵌Tomcat服务器的情况下使用Spring MVC,可以通过使用<exclusion>
标签排除Tomcat服务器,如下所示:
<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>