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

Struts 2.3.37迁2.5.33遇404及OGNL等异常求解决

Struts 2.3→2.5迁移404及相关错误解决方案

先解决Action映射找不到(Dispatcher警告)——这是404的核心原因

  • 核对struts.xml配置:确认namespace="/reconciliation"的package下,确实存在name="reconciliation_loadReconciliationBalance"的Action配置,检查拼写是否一致;若Action用了非execute方法,要确保method属性正确指定。
  • 检查注解配置(如果用了注解):Struts2.5的@Action注解规则更严格,要保证namespace属性和目标路径匹配,Action类必须继承ActionSupport或实现Action接口,同时确认类被容器正确扫描到。
  • 统一Jar包版本:确保所有Struts相关Jar都是2.5.33版本,不要混合2.3的Jar;如果用注解开发,必须引入struts2-convention-plugin,缺了这个会导致注解Action无法被识别。

修复OgnlValueStack警告

  • 改掉JSP里直接访问struts.actionMapping、struts.valueStack的代码:2.5版本不再支持这种直接访问方式,换成Struts标签,比如用<s:property value="actionMapping"/>获取对应值;Java代码里通过ActionContext来获取相关对象。
  • 确保OGNL版本适配:不要单独引入旧版OGNL Jar,直接用Struts2.5.33自带的OGNL包,避免版本不兼容。

解决会话监听器空指针

  • 检查监听器代码:在调用session.getAttribute()之后,必须先判断返回值是否为null再操作,不要直接对可能为空的对象调用方法。
  • 适配Session获取方式:在监听器里用ServletActionContext.getRequest().getSession(false)获取Session,避免强制创建不存在的Session引发空指针,同时确保监听器的初始化、销毁逻辑符合Servlet规范。

额外排查点

  • 核对web.xml:把旧的FilterDispatcher换成Struts2.5的StrutsPrepareAndExecuteFilter,并确认filter-mapping的url-pattern设为/*。
  • 清理缓存:删掉Tomcat的work目录和项目的target目录,重新编译打包,避免旧的class或配置缓存干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:07:02