Spring Boot Starter Web(Spring Boot Web启动器)具有两个重要的特性:

  1. 对Web开发兼容:它为Web开发提供了兼容性。
  2. 自动配置:它支持自动配置。

如果我们想要开发一个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-jettyspring-boot-starter-undertow
  • 对于响应式栈应用,spring-boot-starter-webflux通过包含spring-boot-starter-reactor-netty来引入Reactor Netty,但我们也可以使用spring-boot-starter-tomcatspring-boot-starter-jettyspring-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-webspring-boot-starter-tomcat的区别:

spring-boot-starter-web包含了Spring Web相关的依赖,包括spring-boot-starter-tomcatspring-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-webspring-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>

标签: spring, Spring教程, Spring语言学习, Spring框架, Spring框架教程, Spring框架高级教程, spring boot, spring boot入门教程, spring boot学习教程, spring boot下载, spring boot框架入门, spring boot面试题, spring boot笔试题, spring boot学习指南, spring boot技术