struts2 升级问题
最近为了安全问题,将一系统的struts2.2.1升级到最新版本struts2.3.24。
主要方法是 先下载 struts-2.3.24.1-lib 包,再和项目的lib进行比较,找两者共同拥有的同名jar包,每个同名jar包只保留拥有最新版本号的那个。
接下就是修改相关xml文件的文件头,如将struts.xml的文件头修改为
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
之后启动应用,出现不少错误,但有些出错在网上可以很找到相关的解决方法,但有一个出错费了我很多的时间,在网上也没有搜索到解决方法,还好最后解决了,所以就记录下来。
报错信息:
Unexpected Exception caught setting 'xxx' on 'class com.opensymphony.xwork2.ActionSupport: Error setting expression 'xxx' with value ['xxx', ]
根据这个错误信息 Unexpected Exception caught setting 'xxx' ,我查看了相关的java文件里的 'xxx' 参数是否有对应的set方法,但是java文件里有对应的set方法。这下我只能求助google了,网上也有出现这种错误,但解决方法不能处理我的问题。
最诡异的是最个:
Unexpected Exception caught setting '_' on 'class com.opensymphony.xwork2.ActionSupport: Error setting expression '_' with value ['1457409527229', ]
这个诡异就在于出现了 ‘_’ 这个参数名,查看了源文件,请求链接中是没有包含这样的参数名的,请求链接类似
https://localhost/person!getInfo?personId=xx&_=1457409527229
就是后面这一 &_=1457409527229 串无中生有才让我感到奇怪。(后来才知道是使用了 jquery ajax 无缓存会自动添加后面这一窜。但这不是造成错误的原因,我把时间浪费在设置拦截器上,对参数进行过滤,结果也没用。)
在网上找不到答案后,重新看了一下所有发生错误的请求链接,结果发现几个发生错误的链接都类似
https://localhost/person!getInfo? 这样(用!调用方法)
果然是这个问题所造成的,终于找到原因所在。
我在 struts.xml 文件上加上
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
Unexpected Exception caught setting 'xxx' on 'class com.opensymphony.xwork2.ActionSupport: Error setting expression 'xxx' with value ['xxx', ]
这样的错误。(但升级之前是没有这一句的,而且项目是能正常运行的。)
但依然出现
Unexpected Exception caught setting '_' on 'class com.opensymphony.xwork2.ActionSupport: Error setting expression '_' with value ['1457409527229', ]
这样的错误,但这个无关紧要,不影响系统正常运行,如果你不想看到它,可以把struts2的开发模式关闭。
http://sukaye.iteye.com/blog/2283272