在学习SpringMVC的过程中发现,教学提供的项目怎么跑都是报错,检查后发现是因为版本不同导致的,一种解决方法是将Tomcat降低到10以下的版本,另一种不用修改Tomcat版本参考以下内容
报错内容
在web.xml文件中提示'org.springframework.web.servlet.DispatcherServlet' 未分配到 'javax.servlet.Servlet,jakarta.servlet.Servlet'
解决方法
在pom.xml中将以下依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
改成后重新加载maven项目
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
</dependency>
需要注意的是,重新加载maven项目后记得将代码中原来javax.*
包名改为jakarta.*
原因
2017年8月,Oracle决定将Java EE移交给开源组织,最后由Eclipse基金会接受,但是要求开源组织不能再使用Java的名号,于是Eclipse通过投票选出了 "Jakarta EE"这个名称
也就是说,Java EE已经正式更名为Jakarta EE(雅加达),当然在这之前,Java EE还有另一个名字 "J2EE"
当然,不管名字怎么改,它们指的都是同一个东西"Java Platform, Enterprise Edition"
问题
所以这会带来的问题就是,在2017年之后的版本,所有原来为javax.*
的命名空间都会改为jakarta.*
,不只是Tomcat,其他的开源项目也都受到了影响,就拿Spring来说,Spring Framework 6 和 Spring Boot 3也都规定了最低的基线版本
- Java 17+(Spring Framework 5.3.x 的基线是 Java 8-17)
- Jakarta EE 9+(Spring Framework 5.3.x 的基线是 Java EE 7-8)
也就是说,大部分新版本都不会再支持javax.*
而只能支持jakarta.*
了,在实际的开发中,总不能一遇到问题就去降级版本,新技术能够带来更多的特征和更高安全性