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

升级OpenLiberty至22.0.0.1后dropins目录Servlet加载失败求助

OpenLiberty 22.0.0.1升级后Dropins目录Servlet 404问题排查方案

核心排查与修复步骤

1. 彻底校验Jakarta EE命名空间替换

虽然已完成javax到jakarta的转换,需确保无遗漏:

  • 确认Servlet类注解为@jakarta.servlet.annotation.WebServlet,而非遗留的@javax.servlet.annotation.WebServlet
  • 反编译编译后的class文件,验证内部引用的是Jakarta相关类而非javax类
  • 清理项目依赖,移除所有javax.servlet相关依赖,替换为jakarta.servlet:jakarta.servlet-api(版本匹配OpenLiberty 22.0.0.1支持的Jakarta EE 9/9.1规范)

2. 检查Dropins目录部署格式与规则

OpenLiberty 22.0.0.1对dropins部署逻辑有微调,需确认:

  • dropins/war/testapp需符合标准WAR结构:编译后的class文件放在WEB-INF/classes下,依赖包放在WEB-INF/lib
  • 查看server.xml,确认未配置冲突的部署规则,比如applicationManager的autoExpand属性是否异常,或是否有自定义扫描路径覆盖dropins
  • 确认日志中存在CWWKZ0001I: Application testapp started in X seconds的启动成功日志,而非仅检测到目录的提示

3. 验证Servlet映射路径与上下文根

  • 核对@WebServlet的urlPatterns配置,确保是@WebServlet("/success")(注意路径开头的斜杠)
  • 若未指定urlPatterns,Jakarta EE 9默认映射为/${servletName},需确认请求路径匹配该规则
  • 尝试带应用上下文根访问:http://<host>:<port>/testapp/success(dropins下WAR的默认上下文根为目录名testapp)

4. 开启Servlet容器详细日志排查

添加日志配置定位Servlet加载问题:

  • 在server.xml中添加:
    <logging traceSpecification="com.ibm.ws.webcontainer*=all:com.ibm.ws.servlet*=all"/>
    
  • 启动服务器后,搜索是否有SRVE0242I: Servlet [xxx] has been initialized日志,无此日志说明Servlet未被容器扫描到
  • 检查类加载相关错误,即使class文件存在,也可能因Jakarta类依赖缺失导致无法加载

5. 确认OpenLiberty特性配置正确

OpenLiberty 22.0.0.1默认支持Jakarta EE 9,需调整server.xml特性:

  • 替换旧的javaee-8.0特性为jakartaee-9.0或jakartaee-9.1
  • 若仅使用Servlet特性,配置servlet-5.0(对应Jakarta Servlet 5.0)而非旧的servlet-4.0
  • 示例配置:
    <featureManager>
        <feature>jakartaee-9.0</feature>
    </featureManager>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:22:12