You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未使用IDE部署WildFly时javax.servlet.api依赖缺失问题咨询

问题:部署WAR到WildFly时出现HttpServletResponse NoClassDefFoundError(Undertow已启用)

环境信息

  • WildFly版本:11.0.0.Final
  • Java版本:OpenJDK 1.8.0_201
  • 操作系统:Windows 10

问题详情

该WAR包(test_html.war)在Eclipse配置服务器运行时可正常部署,但手动部署到WildFly时失败,报错HttpServletResponse类未找到。服务器日志显示Undertow已正常启动:

2024-05-17 08:34:34,409 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-7) WFLYUT0003: Undertow 1.4.18.Final starting
2024-05-17 08:34:34,669 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-2) WFLYUT0012: Started server default-server.
2024-05-17 08:34:34,672 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-7) WFLYUT0018: Host default-host starting
2024-05-17 08:34:34,699 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-2) WFLYUT0006: Undertow HTTP listener default listening on 127.0.0.1:8080

但部署时抛出以下错误:

Caused by: java.lang.NoClassDefFoundError: HttpServletResponse
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.getDeclaredMethods(Class.java:1975)
    at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:613)
    at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:524)
    at org.springframework.core.MethodIntrospector.selectMethods(MethodIntrospector.java:68)
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.detectHandlerMethods(AbstractHandlerMethodMapping.java:230)
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initHandlerMethods(AbstractHandlerMethodMapping.java:214)
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.afterPropertiesSet(AbstractHandlerMethodMapping.java:184)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.afterPropertiesSet(RequestMappingHandlerMapping.java:127)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
    ... 39 more
Caused by: java.lang.ClassNotFoundException: HttpServletResponse from [Module "deployment.test_html.war" from Service Module Loader]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:412)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:400)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
    ... 51 more

已尝试在jboss-deployment-structure.xml中添加javax.servlet.api依赖,配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
  <deployment>
    <dependencies>
        <module name="javax.api"/>
        <module name="org.jboss.logging"/>
        <module name="javax.enterprise.api" optional="true"/>
        <module name="javax.ejb.api" optional="true"/>
        <module name="javax.persistence.api" optional="true"/>
        <module name="javax.security.auth.message.api" optional="true"/>
        <module name="javax.xml.bind.api"/>
        <module name="org.picketbox" optional="true"/>
        <module name="javax.servlet.api" />
        <module name="javax.faces.api" optional="true"/>
        <module name="org.apache.commons" optional="true"/>
        <module name="org.jboss.resteasy.resteasy-jaxrs" optional="true"/>
    </dependencies>
  </deployment>
</jboss-deployment-structure>
解决方案

核心原因

  1. WAR包自行打包了Servlet API依赖,与WildFly内置模块产生类加载冲突——WildFly默认通过Undertow提供Servlet API,应用若包含该依赖会打乱类加载优先级。
  2. jboss-deployment-structure.xml位置错误,未被WildFly识别(需放在WAR的WEB-INF目录下)。
  3. 服务器缓存残留导致类加载异常。

解决步骤

  • 移除WAR包中的Servlet API依赖:检查WAR包的WEB-INF/lib目录,删除servlet-api.jar、javax.servlet-api.jar等相关文件,依赖由服务器提供。
  • 确认配置文件位置:确保jboss-deployment-structure.xml放置在WAR包的WEB-INF目录下,否则WildFly不会读取该配置。
  • 简化依赖配置:无需引入多余依赖,保留必要的Servlet API依赖即可:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
  <deployment>
    <dependencies>
        <module name="javax.servlet.api" />
    </dependencies>
  </deployment>
</jboss-deployment-structure>
  • 清理服务器缓存:删除WildFly安装目录下standalone/tmp和standalone/data的所有内容,重启服务器避免缓存干扰。
  • 验证Undertow配置:检查standalone/configuration/standalone.xml,确认<subsystem xmlns="urn:jboss:domain:undertow:3.1">节点存在且配置正常,确保Undertow子系统未被禁用。

内容的提问来源于stack exchange,提问作者NightEast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 02:45:02