关于java:IllegalStateException-is-not-a-jakartaservletFilter

环境

  • Linux/Ubuntu20.04LTS
  • IntelliJ IDEA Community Editon 2021.1
  • maven 4.0.0
  • jetty-11.0.5

异样

java.lang.IllegalStateException: class org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter is not a jakarta.servlet.Filter

应用mvn jetty:run插件来运行web利用,出现异常!

Servlet类org.restlet.ext.servlet.ServerServlet不是jakarta.servlet.Servlet(Servlet class org.restlet.ext.servlet.ServerServlet is not a jakarta.servlet.Servlet)

起因

jakarta.servlet.Servlet是Servlet API版本5.0的一部分,而Servlet API版本5.0则又是Jakarta EE版本9的一部分.这仅意味着[…]中指定的Servlet类不是针对Servlet API 5.0版本编译的,而是针对较旧的版本.

技术起因是在从Java/Jakarta EE 8到Jakarta EE 9的步骤中,所有javax.软件包都被重命名为jakarta.软件包.因而,自Jakarta EE 9起,就不再存在向后兼容性.

当咱们将上述事实转化为您的具体情况时,您惟一的抉择是将Jetty Servlet容器降级到Servlet 4.0兼容版本.这是因为第三方库”Restlet”被调配给第三方.目前还没有Servlet 5.0兼容版本.依据Jetty的版本表,Jetty 11.x是Jakarta EE 9的指标,因而您须要Jetty 10.x或更早的版本.

或者,您能够齐全放下Restlet,而改用Jersey.目前,它具备与Jakarta EE 9兼容的版本.

  • 将[…]中指定的servlet类降级到与Servlet API版本5.0兼容的一个.
  • 或者,将Servlet容器从Servlet API 5.0版降级到以前的版本,至多与[…]中指定的Servlet类的指标Servlet API版本相匹配.

计划

  1. 更换低版本的jetty,间接批改配置pom.xml文件里的jetty的版本,这里应用9.X的版本
<!-- https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-server -->
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-server</artifactId>
    <version>9.4.35.v20201120</version>
</dependency>

或是

 <jetty-plugin.version>9.4.35.v20201120</jetty-plugin.version>

从新运行我的项目即可

参考

  • https://www.it1352.com/215012…
  • https://mvnrepository.com/art…

阐明

  • 【遇上旱季,吃定彩虹】 –Layuji
  • 由集体整顿公布,编写过程不免有所脱漏或谬误,恳请指出,免得误导大家!

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据