在 javax.servlet
包名下,最新的 Servlet 标准版本是 4.0,属于 Java EE 8(2017年发布)。但需要注意以下几点:
关键背景
-
Java EE 到 Jakarta EE 的迁移
- 由于 Oracle 将 Java EE 移交给 Eclipse 基金会,Java EE 改名为 Jakarta EE,包名从
javax.*
变更为jakarta.*
。 - Java EE 8 是最后一个使用
javax.servlet
的版本,对应 Servlet 4.0。后续版本(如 Servlet 5.0、6.0)仅在jakarta.servlet
包下更新。
- 由于 Oracle 将 Java EE 移交给 Eclipse 基金会,Java EE 改名为 Jakarta EE,包名从
-
版本对照表
规范名称 包名 版本 发布时间 备注 Java EE 8 javax.servlet
4.0 2017 支持 HTTP/2、Server Push Jakarta EE 9 jakarta.servlet
5.0 2020 仅包名变更,无功能更新 Jakarta EE 10 jakarta.servlet
6.0 2022 新功能,需 Java 11+
为什么 javax.servlet
不再更新?
- 法律限制:Oracle 保留了
javax
包名的所有权,Eclipse 基金会无法继续在javax
下发布新版本。 - 技术迁移:所有新功能和安全更新仅在
jakarta.servlet
包下提供(如 Jakarta Servlet 5.0/6.0)。
如果你必须使用 javax.servlet
- 最高版本:Servlet 4.0(Java EE 8)。
- 兼容服务器:
- Apache Tomcat 9.x(支持 Servlet 4.0)
- Eclipse Jetty 9.x
- IBM WebSphere Liberty(基于 Java EE 8)
- 局限性:
- 无法使用 HTTP/2 以外的现代特性(如云原生适配、非阻塞 I/O 增强)。
- 安全更新可能停止。
迁移到 jakarta.servlet
的建议
-
包名替换
将代码中的javax.servlet
手动或通过工具(如 Eclipse Transformer)替换为jakarta.servlet
。 -
升级服务器
使用支持 Jakarta EE 10 的服务器:- Apache Tomcat 11.x(Servlet 6.0)
- Eclipse Jetty 12.x
- WildFly 27+(Jakarta EE 10 认证)
-
代码示例(Jakarta Servlet 6.0)
import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @WebServlet("/hello") public class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) { resp.getWriter().write("Hello Jakarta Servlet 6.0!"); } }
截至2024年7月,Jakarta EE 10(2022年9月发布)的后续版本是 Jakarta EE 11(计划于2024年5月发布,但可能因开发进度调整)。目前 Jakarta EE 11 尚未正式发布,但其规划中的主要功能和改进方向已明确。以下是 Jakarta EE 11 预计新增的核心功能:
1. 支持 Java SE 17
- 最低要求升级:Jakarta EE 11 将要求至少 Java 17 作为运行环境,利用其新特性(如密封类、模式匹配等)。
- 兼容性增强:适配 Java 17 的模块化系统和性能优化。
2. Jakarta Core Profile
- 轻量化运行时:引入更小的 Core Profile,仅包含 Servlet、CDI Lite、JSON Processing/Binding 和 Configuration 等核心功能,适用于微服务和云原生场景。
- 减少资源占用:适合容器化部署,启动更快,内存消耗更低。
3. CDI 4.1(Contexts and Dependency Injection)
- CDI-Lite 集成:在 Core Profile 中默认支持 CDI-Lite,提供轻量级依赖注入,去除部分高级特性以简化实现。
- 改进的构建兼容性:优化与构建工具(如 Maven/Gradle)的整合,支持编译时依赖注入处理。
4. Jakarta Servlet 6.1
- HTTP/2 增强:优化对 HTTP/2 的支持,提升性能。
- 安全性改进:强化请求头处理和跨域资源共享(CORS)配置。
5. Jakarta RESTful Web Services(JAX-RS)3.1
- 响应式编程支持:更好地集成 Reactive Streams 和异步处理。
- OpenAPI 整合:简化生成 OpenAPI 3.0 文档的配置。
6. Jakarta Persistence(JPA)3.2
- Hibernate 6 适配:支持 Hibernate 6.x 的新特性。
- Schema 生成增强:改进数据库 Schema 自动生成的灵活性。
7. Jakarta Security 3.1
- OAuth 2.1 支持:更新至最新 OAuth 2.1 规范,增强身份验证流程。
- OpenID Connect(OIDC)集成:简化与 OIDC 提供商的整合。
8. Jakarta JSON Processing/Binding 2.1 & 3.0
- JSON-P 2.1:性能优化,支持 JSON Patch 和 JSON Merge Patch。
- JSON-B 3.0:改进序列化/反序列化配置,支持自定义适配器。
9. 云原生增强
- MicroProfile 兼容性:与 MicroProfile 6.0+ 更深度整合(如 Health、Metrics、Config)。
- Kubernetes 原生支持:优化在 Kubernetes 环境中的配置管理和服务发现。
10. 其他改进
- Jakarta Concurrency 2.1:增强对虚拟线程(Project Loom)的支持。
- Jakarta Messaging 3.1:简化消息队列集成。
- 工具链更新:Eclipse GlassFish 7 和 Apache Tomcat 11 将作为兼容实现。
迁移与兼容性
- 平滑升级:Jakarta EE 11 保持对 EE 10 的向后兼容,但需注意 Java 17 的升级要求。
- 命名空间变更:继续使用
jakarta.*
包名,避免与旧版javax.*
冲突。
总结
Jakarta EE 11 进一步推动云原生和模块化,强化轻量级运行时支持,同时跟进 Java 生态最新进展。开发者可借助这些更新构建更高效、安全的现代化企业应用。建议关注官方发布日志以获取最终功能清单。