升级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
相关产品推荐
相关产品推荐

