Spring Boot Starter Web是Spring Boot的一个重要特性,它具有以下两个重要特点:

  1. 兼容Web开发:Spring Boot Starter 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 Boot Starter 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
  • 错误页面(Error Page)
  • 管理静态依赖的Web JARs
  • 内嵌Servlet容器(Embedded servlet container)

Spring Boot内置了一个内嵌服务器,每个Spring Boot应用程序都包含一个内嵌服务器。内嵌服务器作为可部署应用程序的一部分嵌入其中。内嵌服务器的优势在于不需要在环境中预先安装服务器。在Spring Boot中,默认的内嵌服务器是Tomcat,同时Spring Boot也支持另外两个内嵌服务器:

  • Jetty Server
  • Undertow Server

如果想要使用其他内嵌服务器,对于使用Servlet堆栈(Servlet stack)的应用程序,我们可以使用spring-boot-starter-jetty或者spring-boot-starter-undertow来替代spring-boot-starter-web中的Tomcat。对于使用反应式堆栈(Reactive stack)的应用程序,我们可以使用spring-boot-starter-tomcatspring-boot-starter-jetty或者spring-boot-starter-undertow来替代spring-boot-starter-webflux中的Reactor Netty。

Jetty Server是另一种被Spring Boot支持的内嵌服务器。它是一个HTTP服务器和Servlet容器,具有提供静态和动态内容的能力。在需要机器与机器之间通信的情况下可以使用Jetty Server。

如果要在应用程序中添加Jetty服务器,需要在pom.xml文件中添加spring-boot-starter-jetty依赖项,并且在使用Jetty服务器时,需要确保将默认的Tomcat服务器从spring-boot-starter-web中排除掉,以避免服务器之间的冲突。

<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-jetty</artifactId>
</dependency>

我们还可以通过使用application.properties文件来自定义Jetty服务器的行为。

Undertow Server是Spring Boot提供的另一个服务器。它与Jetty一样也是一个内嵌式Web服务器。它由Java编写,由JBoss管理和赞助。Undertow服务器的主要优势包括:

  • 支持HTTP/2
  • 支持HTTP升级
  • 支持WebSocket
  • 提供Servlet 4.0支持
  • 灵活
  • 可嵌入

如果想要在应用程序中添加Undertow服务器,需要在pom.xml文件中添加spring-boot-starter-undertow依赖项,并且在使用Undertow服务器时,需要确保将默认的Tomcat服务器从spring-boot-starter-web中排除掉,以避免服务器之间的冲突。

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

我们也可以通过使用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服务器相关的一切内容,包括:

  • core
  • el
  • logging
  • websocket

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>  

请注意,通过这种排除方式,将会移除内嵌的Tomcat服务器依赖,从而允许您在不使用内嵌服务器的情况下使用spring-mvc。

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