乐趣区

关于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
  • 由集体整顿公布,编写过程不免有所脱漏或谬误,恳请指出,免得误导大家!
退出移动版