Servlet类org.restlet.ext.servlet.ServerServlet不是jakarta.servlet.Servlet 另请参见:

问题描述

什么可能导致此错误

    Caused by: jakarta.servlet.UnavailableException: Servlet class org.restlet.ext.servlet.ServerServlet is not a jakarta.servlet.Servlet
        at org.eclipse.jetty.servlet.ServletHolder.checkServletType (ServletHolder.java:499)
        at org.eclipse.jetty.servlet.ServletHolder.doStart (ServletHolder.java:377)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:96)
        at org.eclipse.jetty.servlet.ServletHandler.lambda$initialize$2 (ServletHandler.java:699)
        at java.util.stream.sortedOps$SizedRefSortingSink.end (SortedOps.java:357)
        at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:485)
        at java.util.stream.AbstractPipeline.wrapAndcopyInto (AbstractPipeline.java:474)
        at java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining (StreamSpliterators.java:312)
        at java.util.stream.Streams$ConcatSpliterator.forEachRemaining (Streams.java:735)
        at java.util.stream.ReferencePipeline$Head.forEach (ReferencePipeline.java:658)
        at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724)

我正在通过mvn jetty:run插件运行网络应用

解决方法

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

jakarta.servlet.Servlet是Servlet API版本5.0的一部分,而Servlet API版本5.0又是Jakarta EE版本9的一部分。这仅意味着[...]中指定的Servlet类未针对Servlet API版本进行编译。 5.0,但使用的是旧版本。

您有2个选择:

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

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

技术原因是在从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兼容的版本。

另请参见: