Undertow 它是一个基于组合的体系结构,可以通过组合一系列小型处理器来构建一个 Web 服务器。这就让我们可以灵活的在 Java EE servlet 4.0 容器和底层非阻塞处理器或者其他更多之间进行选择。
Undertow 被设计成完全可嵌入式的,所以也叫嵌入式容器,具有易于使用的流畅构建 API,另外,Undertow 的生命周期也完全由所嵌入的应用程序所控制。
1.Undertow特性
undertow具有以下特性:
1.1.HTTP/2 Support
Undertow 支持 HTTP/2 开箱即用,不需要重写引导类路径。
1.2.支持 HTTP 升级
支持 HTTP 升级,允许多个协议通过 HTTP 端口上进行复用。
1.3.支持 Web Socket
Undertow 提供对 Web 套接字的全面支持,包括对 JSR-356 的支持。
1.4.支持 Servlet 4.0
Undertow 提供了对 Servlet 4.0 的支持,包括对嵌入式 Servlet 的支持,还可以混合部署 Servlet 和原生 Undertow 非阻塞处理程序。
1.5.可嵌入式
Undertow 可以嵌入到应用程序中,也可以通过几行代码独立运行。
1.6.高灵活性
一个 Undertow 服务器是通过链式处理器来配置的,可以根据需要添加功能,因此可以避免添加没有必要的功能。
2.Spring-Boot集成Undertow
Undertow 是为嵌入式而生的 Web 容器,又是 Spring Boot 默认集成的容器之一,下面来看下如何在 Spring Boot 中使用 Undertow。
首先排除 Tomcat 依赖,然后加入 Undertow 依赖,依赖配置如下所示:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- Exclude the Tomcat dependency -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Use Undertow instead -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
</dependencies>
一步完成集成,当然实际情况还需要在 application 配置文件中加入 Undertow 的更多自定义或者优化配置参数。
Undertow容器的具体配置可以看这两个类:
(1)org.springframework.boot.autoconfigure.web.ServerProperties
(2)org.springframework.boot.autoconfigure.web.ServerProperties.Undertow