struts升級2.3.12到2.5.13
參考文章:
http://www.ituring.com.cn/article/495914
http://blog.csdn.net/zhangchen1987/article/details/78054960
http://blog.csdn.net/zhangchen1987/article/details/78054512
http://blog.csdn.net/educast/article/details/52212904
1.首先jdk1.6要升級到jdk1.7以上
2.struts2包替換
然後替換所有struts開頭的jar包,
,刪除了xwork-core-2.3.12.jar這個jar包
,commons-lang3-3.4.jar 升級至 commons-lang3-3.6.jar,
,freemarker-2.3.19.jar升級到freemarker-2.3.23.jar
,ognl-3.0.6.jar升級到ognl-3.1.5.jar
,log4j-1.2.13.jar升級到log4j-1.2.17.jar
javassist-3.20.0-GA.ja
刪除了xwork-core-2.3.12.jar這個jar包 ,ac.getParameters()需要加個強轉map
3.修改web.xml:
1)
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
修改成
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
2)
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>
改成
<filter-class>org.apache.struts2.dispatcher.filter.StrutsExecuteFilter</filter-class>
4.struts2配置修改
1)struts.xml部分的頭部修改
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
問題報錯:
org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException:
org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException:
.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
網上解決辦法:http://ask.csdn.net/questions/260958
這是因為 struts2.5 為了提升安全性,添加了 allomethod 這麽個玩意。
2)解決方法是在配置文件中添加:
package中添加順序(result-types?,interceptors?,default-interceptor-ref?,default-action-ref?,default-class-ref?,global-results?,global-allowed-methods?,global-exception-mappings?,action*
<package name="exam" extends="json-default">
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="user" class="userAction">
...
</action>
</package>
或者,針對action,在 action 塊中添加
<allowed-methods>regex:.*</allowed-methods>
同樣也支持在你的 action 上使用 @AllowedMethods
註解
默認的設置為
<global-allowed-methods>execute,input,back,cancel,browse,save,delete,list,index</global-allowed-methods>
全局設置是增量而不是覆蓋的,支持正則和直接匹配方法,源碼在這兩段
// com.opensymphony.xwork2.DefaultActionProxy#prepare
// com.opensymphony.xwork2.config.entities.ActionConfig#isAllowedMethod
老項目因為爆出漏洞然後我找了一下午這個問題,最終打開研發模式,並搜索官網文檔解決。 struts 真是個坑啊。
5.struts2頁面修改
頁面報錯,否則報錯如下:
Struts has detected an unhandled exception:
Messages:
/tagDef/export_record_now.jsp (line: 41, column: 4) Attribute id invalid for tag iterator according to
TLD
File: org/apache/jasper/compiler/DefaultErrorHandler.java
1)頁面中一些標簽需要修改: jstl標簽中的變量id要變為var如圖: id="yy"替換成var="yy"
2)頁面中一些標簽需要修改:jstl標簽中的變量escape要變為escapeHtml如圖: escape="false"要替換成escapeHtml="false"
struts升級2.3.12到2.5.13