Loading... 在学习SpringMVC的过程中发现,教学提供的项目怎么跑都是报错,检查后发现是因为版本不同导致的,一种解决方法是将Tomcat降低到10以下的版本,另一种不用修改Tomcat版本参考以下内容 ## 报错内容 在web.xml文件中提示`'org.springframework.web.servlet.DispatcherServlet' 未分配到 'javax.servlet.Servlet,jakarta.servlet.Servlet'`  ## 解决方法 在pom.xml中将以下依赖 ```xml <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency> ``` 改成后重新加载maven项目 ```xml <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.*`了,在实际的开发中,总不能一遇到问题就去降级版本,新技术能够带来更多的特征和更高安全性 © 允许规范转载 打赏 赞赏作者 微信 赞