IllegalStateException: [..] is not a jakarta.servlet.Filter
Posted 梁雨季
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IllegalStateException: [..] is not a jakarta.servlet.Filter相关的知识,希望对你有一定的参考价值。
环境
- Linux/Ubuntu20.04LTS
- IntelliJ IDEA Community Editon 2021.1
- maven 3.6.3
- 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版本相匹配.
方案
- 更换低版本的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
- 由个人整理发布,编写过程难免有所遗漏或错误,恳请指出,以免误导大家!
以上是关于IllegalStateException: [..] is not a jakarta.servlet.Filter的主要内容,如果未能解决你的问题,请参考以下文章
IllegalStateException:无法订阅。处理器已终止
Java.lang.IllegalStateException:已附加
转:java.lang.IllegalStateException异常产生的原因及解决办法
java.lang.IllegalStateException:片段未附加到活动