“Spring Boot 4.0 需要一个 Servlet 6.1 的基线,而 Undertow 目前尚不兼容。因此,我们放弃了对 Undertow 的支持。”这一声明清晰地指出了问题核心:版本依赖的不匹配。这是一个技术兼容性问题,而非技术路线选择或性能优劣的判断。 在相关讨论中,Undertow 团队成员表示 Servlet 6.1 的支持工作已经启动,但截至2025年10月,该工作仍处于早期阶段。 作为 Undertow 的主要维护者,Red Hat 的开发进度相对缓慢,这对于需要升级到 Spring Boot 4.0 的企业而言,提供了有限的选择空间。
Servlet 6.1 技术特性解析
发布背景
Servlet 6.1 于2024年4月作为 Jakarta EE 11 的核心子规范发布。相比 Servlet 6.0,这一版本带来了多项重要改进和现代化更新,代表了 Java Web 开发标准的重要演进。核心新特性
1. ByteBuffer 支持
在ServletInputStream 和 ServletOutputStream 中新增了 ByteBuffer 支持,显著改进了非阻塞 I/O (NIO) 能力。这一改进使开发者能够更高效地处理二进制数据流,特别是在高并发场景下能够获得显著的性能提升。
2. HTTP/2 推送功能废弃
Servlet 6.1 正式废弃了 HTTP/2 Server Push 支持。这一决定反映了该特性在现代 Web 应用中使用率持续下降的现状,开发者更倾向于使用其他优化策略。HTTP/2 Server Push 成为了 HTTP 历史上最短命的重要功能之一。3. 移除 SecurityManager 相关 API
完全删除了对已废弃的 Java SecurityManager 及相关 APIs 的引用,以适应 Java SE 安全模型的演进。这一变更简化了安全架构,移除了历史包袱。4. HTTP 会话增强机制
提供了新机制,让应用程序能在标准 HTTP 请求处理之外与 HTTP 会话交互,特别是为 WebSocket 场景提供了更好的支持,增强了会话管理的灵活性。5. HTTP 重定向控制增强
开发者现在对发出 HTTP 重定向时的状态码和响应体拥有更精细的控制权,可以实现更符合业务需求的重定向逻辑。6. 敏感请求头安全处理
新增HttpServlet.isSensitiveHeader 方法,用于识别需要保护的敏感请求头(如 Authorization、Cookie、Forwarded 等)。这些敏感信息会在 TRACE 方法响应中被排除,显著提高了应用程序的安全性。
7. 条件 GET 优化支持
改进了对条件 GET 操作的支持,通过getLastModified 方法优化网络资源利用,减少不必要的数据传输,提升了网络效率和响应速度。
Jakarta EE 11 技术规范
规范背景
Jakarta EE 11 是企业级 Java 平台的最新标准,其中 Servlet 6.1 是其核心子规范。Jakarta EE 11 代表了企业级 Java 应用的标准化演进,为现代企业应用开发提供了统一的技术框架。Jakarta Data 规范详解
Jakarta EE 11 通过引入 Jakarta Data 规范 来简化企业应用的持久化逻辑。Jakarta Data 为数据访问层提供了标准化的抽象,显著减少了样板代码的编写。核心特性
1. BasicRepository 基础仓库接口
2. CrudRepository 完整 CRUD 功能
3. Pagination 分页支持
4. Query Language 查询语言
主流 Web 容器支持现状对比
兼容性矩阵分析
以下表格展示了各主流 Web 容器和框架对 Servlet 6.1 和 Jakarta EE 11 的支持情况:| 框架/服务器 | 版本 | Servlet 6.1 支持 | Jakarta EE 11 支持 |
|---|---|---|---|
| Spring Framework | 7.x | 完全支持 | 完全支持 |
| Spring Boot | 4.x | 完全支持 | 完全支持 |
| Tomcat | 11.x+ | 完全支持 | 完全支持 |
| Jetty | 12.1+ | 完全支持 | 完全支持 |
| Undertow | 2.3.x | 不支持 | 不支持 |
有趣的是,就在前两年,技术社区还掀起过一股”用 Undertow 替代 Tomcat”的热潮。各路技术大 V 纷纷发文推荐 Undertow,理由包括:
- 更轻量级的内存占用:启动更快,资源消耗更少
- 更优秀的并发性能:基于 XNIO 的非阻塞 I/O 模型
- 更灵活的配置:可编程的服务器配置方式