最近在做一个新的项目,使用的JDK 17 版本,所对应的Spring Boot 版本是3.x,具体是Spring Boot 3.3.4; 以往的一个项目使用的Spring Boot 版本是2.7.1 (Spring Boot 2.x 系列)。然而,在写一个Filter时,发现javax.servlet.ServletRequest 要替换成 jakarta.servlet.ServletRequest,等等,看起来是要javax包要替换成jakarta包,所以查下资料比较两者是否有啥区别。
1. Spring Boot 2.7.1(Spring Boot 2.x 系列)
- Spring Framework 5.x:Spring Boot 2.x 使用的是 Spring Framework 5.x 版本,支持 Java 8、Java 9、Java 10、Java 11 等版本。
- Java EE (javax.servlet):Spring Boot 2.x 系列依赖于 Java EE(也称为 Jakarta EE 8 之前的版本)。因此,所有相关的 Servlet API、JSP、JAX-RS 等类和接口都属于 javax.servlet 包。
- Servlet API:使用的默认 Servlet API 版本是 Servlet 4.0(属于 Java EE 8)。
- 依赖版本:
Spring Framework: 5.x(Spring 5.3.x)
Spring Security: 5.x
Spring Data: 2.x
Spring Boot Starter Web: spring-boot-starter-web 依赖于 Tomcat 9.x(默认),可以切换到 Jetty 或 Undertow。 - 包名:使用 javax.servlet 包和 Java EE 相关的 API。
2. Spring Boot 3.3.4(Spring Boot 3.x 系列)
- Spring Framework 6.x:Spring Boot 3.x 使用的是 Spring Framework 6.x 版本,要求 JDK 17 或更高版本。Spring Boot 3.3.4 支持 Java 17 及更高版本,因此不再支持 Java 8、9、10。
- Jakarta EE 9+(jakarta.servlet):Spring Boot 3.x 完全迁移到了 Jakarta EE 9+,因此所有的相关 API 都已经迁移到 jakarta.servlet 包中,替代了原来的 javax.servlet 包。例如,Servlet API 和 JAX-RS 等相关 API 的命名空间都变成了 jakarta.servlet。
- Servlet API:Spring Boot 3.x 默认使用 Servlet 5.0(属于 Jakarta EE 9)。
- 依赖版本:
Spring Framework: 6.x(Spring 6.0.x)
Spring Security: 6.x
Spring Data: 3.x
Spring Boot Starter Web: spring-boot-starter-web 依赖于 Tomcat 10.x(默认), 也支持 Jetty 或 Undertow。 - 包名:使用 jakarta.servlet 包和 Jakarta EE 相关的 API(例如,jakarta.servlet.ServletRequest)。
3. 小结
特性 | Spring Boot 2.7.1 | Spring Boot 3.3.4 |
---|---|---|
支持的 Java 版本 | Java 8、Java 9、Java 10、Java 11 | Java 17 及更高版本 |
Spring Framework 版本 | Spring 5.x | Spring 6.x |
Servlet API | javax.servlet(Servlet 4.0) | jakarta.servlet(Servlet 5.0) |
默认内嵌容器 | Tomcat 9.x | Tomcat 10.x |
包名 | javax.servlet | jakarta.servlet |
Jakarta EE 版本 | 使用 Java EE 8(javax.servlet) | 使用 Jakarta EE 9(jakarta.servlet) |
Spring Boot 2.7.1 适用于较旧的 Java EE(javax.servlet)环境,支持 JDK 8 及以上版本,并且默认使用 Servlet 4.0(Java EE 8)。
Spring Boot 3.3.4 适用于最新的 Jakarta EE(jakarta.servlet)环境,要求至少 JDK 17,并且使用 Servlet 5.0(Jakarta EE 9)。