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的主要内容,如果未能解决你的问题,请参考以下文章