且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Servlet类org.restlet.ext.servlet.ServerServlet不是jakarta.servlet.Servlet

更新时间:2023-12-04 12:17:40

jakarta.servlet.UnavailableException:Servlet类[...]不是jakarta.servlet.Servlet

jakarta.servlet.UnavailableException: Servlet class [...] 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版本编译的,而是针对较旧的版本.

The jakarta.servlet.Servlet is part of Servlet API version 5.0 which in turn is part of Jakarta EE version 9. This can thus only mean that the servlet class specified in [...] is NOT compiled against Servlet API version 5.0, but against an older version.

您有2个选择:

  1. [...]中指定的servlet类升级到与Servlet API版本5.0兼容的一个.

  1. Upgrade the servlet class specified in [...] to a Servlet API version 5.0 compatible one.

或者,将Servlet容器从Servlet API 5.0版降级到以前的版本,至少与[...]中指定的Servlet类的目标Servlet API版本相匹配.

Or, downgrade the servlet container from Servlet API version 5.0 to a previous version, at least the one matching the target Servlet API version of the servlet class specified in [...].

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

The technical reason is that during the step from Java/Jakarta EE 8 to Jakarta EE 9 all javax.* packages have been renamed to jakarta.* packages. So there is no backwards compatibility anymore since Jakarta EE 9.

当我们将上述事实转化为您的具体情况时,您唯一的选择是将Jetty Servlet容器降级到Servlet 4.0兼容版本.这是因为第三方库"Restlet"被分配给第三方.目前还没有Servlet 5.0兼容版本.根据Jetty的版本表,Jetty 11.x是Jakarta EE 9的目标,因此您需要Jetty 10.x或更早的版本.

When we translate the above facts to your specific situation, your only option is to downgrade the Jetty servlet container to a Servlet 4.0 compatible version. This is because the 3rd party library "Restlet" has currently no Servlet 5.0 compatible version available at all. According to Jetty's version table, Jetty 11.x is Jakarta EE 9 targeted, so you need Jetty version 10.x or older.

或者,您可以完全放下Restlet,而改用Jersey.目前,它具有与Jakarta EE 9兼容的版本.

Alternatively, you can drop Restlet altogether and use Jersey instead. It has currently a Jakarta EE 9 compatible version available.

  • Jetty versions
  • Getting java.lang.ClassNotFoundException: jakarta.servlet.Filter on Maven/Jersey web service while running on Tomcat 9