就在2025年11月2日,Spring Boot正式公布了4.0.x版本的维护周期将持续到2026年12月。值得一提的是,Spring Boot 4.0 RC1早在年初十月就已经正式亮相。这一里程碑式的版本带来了诸多重大升级与变革,其中最引人热议的当属彻底移除了对Undertow Web容器的支持。
一、前言
2025年11月2日,Spring Boot官方宣布4.0.x版本的支持期限将持续至2026年12月。实际上,Spring Boot 4.0 RC1早在十月上旬就已发布。这个具有里程碑意义的版本带来了显著的架构演进,尤其是完全不再支持Undertow Web服务器这一点,成为技术社区关注的焦点。
其实早在2024年发布的Spring Boot 3.3版本路线图中,开发团队就已明确指出:将正式移除对Undertow Web服务器的自动配置支持,相关功能模块会从核心依赖中剔除。
那么为何先前备受青睐的Undertow会在如今被弃用呢?
二、为何弃用Undertow
Spring官方在最新技术文档中给出了明确解释,移除Undertow支持主要基于技术兼容性考量:
Spring Boot 4.0需要基于Servlet 6.1规范,而Undertow目前尚未兼容。因此我们决定不再继续支持Undertow。
这份声明直指问题的核心——版本依赖的兼容性问题。
Spring Boot 4.0基于Spring Framework 7构建,强制要求符合Servlet 6.1规范。而Undertow的维护方Red Hat未能及时适配。说白了,Undertow团队连跟上Jakarta EE基本节奏的能力都欠缺,Spring Boot团队自然不愿再为其"擦屁股"。
出现这种情况其实也是技术演进过程中的必然结果。Spring Boot在GitHub相关Issue中详细说明了Undertow面临的核心问题:维护团队资源不足与迭代效率低下。
团队规模问题:Undertow核心维护者仅3-5人,且近年来存在人员流失情况,导致核心功能迭代周期从平均2个月延长至6个月以上;适配成本过高:为使Undertow兼容Spring Boot 3.x的Jakarta EE 9+、AOT编译等新特性,Spring Boot团队额外投入了30%的兼容性测试资源,远超Tomcat(5%)与Jetty(8%)的适配成本;社区反馈差异:2024年Spring Boot用户调查显示,Undertow的"问题反馈响应速度"评分仅2.8/5,远低于Tomcat的4.2/5与Jetty的3.7/5;性能优势缩水:通过JMeter对Tomcat 10.1.18与Undertow 2.3.10.Final进行性能对比测试,结果相差无几。可见在现代JVM与服务器优化背景下,Undertow的性能优势已不足以弥补其生态与维护短板。
综合上述种种迹象,Spring Boot 4.0弃用Undertow也是意料之中的事。
三、Servlet 6.1技术特性
Servlet 6.1作为Jakarta EE生态系统中的一次重要更新,该版本针对现代应用需求引入了多项重要且实用的改进。
1. 新增ByteBuffer支持与NIO增强
Servlet 6.1在数据流处理中引入了ByteBuffer支持。这一改进显著优化了非阻塞I/O的处理能力,允许开发者更高效地处理二进制数据流。在高并发场景下,这能带来显著的性能提升,因为ByteBuffer可以更直接地与操作系统的I/O机制交互,减少不必要的数据拷贝。
2. HTTP重定向控制的精细化
开发者现在对HTTP重定向拥有了更精细的控制权。不再局限于使用默认的302状态码,可以根据业务需求设置特定的状态码,并且能够控制重定向响应中是否包含响应体,为实现更符合规范的重定向逻辑提供了便利。
3. 敏感请求头的安全处理
新增的HttpServlet.isSensitiveHeader方法用于识别如Authorization、Cookie、Forwarded等敏感请求头。这些被标记为敏感的信息会在处理TRACE请求的响应中被自动排除,有效防止了敏感信息在错误跟踪中意外泄漏,提升了应用程序的安全性。
4. HTTP会话管理的扩展
Servlet 6.1提供了一种新机制,允许应用程序在标准HTTP请求处理之外与HTTP会话进行交互。这对于需要维护会话状态但又不完全依赖于HTTP请求-响应周期的应用来说尤为重要,增强了会话管理的灵活性。
5. SecurityManager相关API的移除
为了顺应Java SE安全模型的演进,Servlet 6.1完全移除了对已弃用的Java SecurityManager及相关API的引用。这一变更移除了长期存在的历史包袱,简化了安全架构。
6. HTTP/2服务器推送的弃用
Servlet 6.1正式弃用了HTTP/2 Server Push功能。这一决定主要源于该特性在现代Web应用中的实际使用率持续低迷,而且其带来的复杂性超过了收益。开发者社区已经转向其他性能优化策略。
总的来说,Servlet 6.1是一次务实且面向未来的迭代。它没有引入颠覆性的概念,而是专注于提升性能以及清理过时功能。
四、架构选型启示
近3年来,各种技术大V纷纷鼓吹Undertow,导致Undertow风靡一时,多数企业跟风决策,在生产环境上换下了使用多年的Tomcat。
然而短短3年间,Undertow就因为各种原因跟不上时代的步伐,反而又成了升级路上需要替换和解决的问题。
通过这一事件告诉我们,架构的选型更多地在于长期稳定,而不是一时的好坏。
