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

无法使用HttpServletResponse:Struts2升级至Tomcat10遇报错

问题分析

你遇到的错误本质是包名迁移导致的类依赖不兼容:

  • Tomcat10及以上版本基于Jakarta EE 9+规范,Servlet API的包名从javax.servlet彻底改为jakarta.servlet
  • 你当前使用的Struts2 2.3.30是基于旧的javax.servlet API开发的,它的ServletActionContext.getResponse()方法返回的是javax.servlet.http.HttpServletResponse,但Tomcat10环境中根本不存在这个类,所以编译/运行时会提示找不到该类型。

你尝试的struts2-secure-jakarta-multipart-parser-plugin只是处理文件上传的插件,不解决核心的Servlet API包名迁移问题,所以无效。

解决方案

1. 优先升级Struts2到支持Jakarta EE的版本(推荐)

Struts2从2.5.27版本开始提供对Jakarta EE的支持,6.x版本原生基于Jakarta EE构建,完全适配Tomcat10:

  • 若选择Struts2.5.x:
    • 替换原有Struts2核心依赖,引入对应版本的struts2-core
    • 额外添加struts2-jakartaee-plugin依赖,该插件会将Struts2内部的javax.servlet引用替换为jakarta.servlet
  • 若选择Struts6.x:
    • 直接引入struts6-core即可,无需额外插件,原生支持Jakarta EE规范

2. 临时兼容方案(不推荐,存在安全风险)

如果你暂时无法升级Struts2版本,可以尝试使用Tomcat提供的迁移工具,但该方法仅作临时过渡:

  • 使用tomcat-jakartaee-migration工具将Struts2的jar包中所有javax.servlet相关的类替换为jakarta.servlet
  • 注意:Struts2.3.x是已停止维护的旧版本,存在大量未修复的安全漏洞,不建议长期使用此方案
验证步骤
  1. 替换依赖后,清理项目编译缓存(如Maven/Gradle的clean命令)
  2. 重新编译项目,检查ServletActionContext.getResponse()是否能正常解析为jakarta.servlet.http.HttpServletResponse
  3. 部署到Tomcat10测试,确认错误消失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:12:43