1. 程式人生 > >struts升級2.3.12到2.5.13

struts升級2.3.12到2.5.13

type 需要 false sage cati exceptio marker escape .com

參考文章:
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