Wildfly Undertow:jakarta.servlets.Servlet 没有实现 javax.servlet.Servlet

Posted

技术标签:

【中文标题】Wildfly Undertow:jakarta.servlets.Servlet 没有实现 javax.servlet.Servlet【英文标题】:Wildfly Undertow: jakarta.servlets.Servlet does not implement javax.servlet.Servlet 【发布时间】:2021-11-06 18:40:47 【问题描述】:

我正在尝试将一些 Servlet 从 javax 库迁移到 jakarta。更改非常简单,但是当我尝试在 Wildfly 23 上运行它们时,我收到以下错误消息:

Servlet JAX-WS-Service of type class com.sun.xml.ws.transport.http.servlet.WSServlet does not implement javax.servlet.Servlet

这个 servlet(用于 JAXWS,但这不是重点)会发生这种情况,但我自己的 servlet 也会发生这种情况,如下所示:

import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

@WebServlet(name = "entrada", loadOnStartup = 1)
public class ServletEntrada extends HttpServlet

我正在使用 Jakarta servlet-api 5.0.0 版。 servlet 在web.xml 文件中声明,如下所示:

<servlet>
    <servlet-name>ServletEntrada</servlet-name>
    <servlet-class>com.telventi.framework.web.ServletEntrada</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

如果我将此声明保留在 web.xml,我会收到我提到的错误 ServletEntrada does not implement javax.servlet.Servlet

如果我从 web.xml 文件中删除此声明,则不会部署 servlet。尽管如此,它有@WebServlet 注释,这应该会使Wildfly 自动发现Servlet。

我猜undertow 检查 web.xml 文件中声明的每个 servlet 是否扩展 javax.servlet.Servlet,但当然 jakarta HttpServlet 扩展 jakarta.servlets.Servlet,而不是 javax.servlets.Servlet

我做错了什么吗?

最好的问候。

【问题讨论】:

【参考方案1】:

您需要使用 WildFly Preview 来支持 JakartaEE 9,默认的 WildFly 发行版仍然是 Java EE / Jakarta EE 8

【讨论】:

是的,这似乎与我在使用 Web 服务时遇到的问题相同,但没有意识到存在连接。我会尝试让你知道它是否有效!谢谢!

以上是关于Wildfly Undertow:jakarta.servlets.Servlet 没有实现 javax.servlet.Servlet的主要内容,如果未能解决你的问题,请参考以下文章

Wildfly / Undertow:一台主机的多个别名

jakarta / javax 命名空间下的 Weld 和 Undertow

使用 WildFly (Undertow) 托管多个域

Wildfly Undertow 文件 Mimetypes

Wildfly 8.2/undertow 读取超时

Wildfly Undertow 中的 HTTPS 重定向