轉載網址:http://blog.csdn.net/amosryan/article/details/10350481java
因爲你們都懂的緣由,涉struts2的項目須要將struts2相關包升級至2.3.15.1。今將升級方法和常見問題解決簡單總結以下。web
1、基本升級操做ajax
1. 獲取Struts2.3.15.1jar包spring
從Struts官網下載struts2.3.15.1發佈包:apache
http://apache.fayea.com/apache-mirror//struts/library/struts-2.3.15.1-lib.zipjson
2.工程中的jar包替換緩存
如下清單爲示例,請根據工程實際狀況參照替換成struts-2.3.15.1-lib.zip包中的版本:app
原始版本(版本號爲示例)dom |
升級後版本異步 |
commons-lang-2.*.jar |
commons-lang-2.4.jar commons-lang3-3.1.jar (新增) |
commons-logging-1.*.jar |
commons-logging-1.1.3.jar |
commons-fileupload-1.*.*.jar |
commons-fileupload-1.3.jar |
freemarker-2.3.*.jar |
freemarker-2.3.19.jar |
ognl-*.*.*.jar |
ognl-3.0.6.jar |
struts2-core-2.*.*.*.jar |
struts2-core-2.3.15.1.jar |
struts2-spring-plugin-2.*.*.*.jar |
struts2-spring-plugin-2.3.15.1.jar |
struts2-dojo-plugin-2. *.*.*.jar |
struts2-dojo-plugin-2.3.15.1.jar |
struts2-dwr-plugin-2. *.*.*.jar |
struts2-dwr-plugin-2.3.15.1.jar |
xwork-core-2.3.*.*.jar或者xwork-2.*.*.jar |
xwork-core-2.3.15.1.jar |
javassist-3.*.*.GA.jar |
javassist-3.11.0.GA.jar aspectjrt-1.5.2a.jar(見附件3.其它jar包) aspectjweaver-1.5.2a.jar(見附件3.其它jar包) (這三個文件若沒有則需添加) |
注1:工程中以struts2打頭的jar包均需替換爲2.3.15.1版本;
注2:除非表格中另有說明,則原始版本中若不存在相應jar包,則也不須要添加相應的2.3.15.1版jar包;
3.web.xml可能的修改
注意:如文件中本來已經是調整後的配置,則請忽略本部份內容。
3.1修改struts2dispatcher過濾器
原始內容:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
修改後內容:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
3.2去掉或注掉ActionContextCleanUp過濾器
請去掉或注掉web.xml中ActionContextCleanUp過濾器:
<!--filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter-->
<!--filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping-->
注意:不修改可能致使第二節中問題5。
4.全部*validators.xml可能的修改
注意:如文件中本來已經是調整後的配置,則請忽略本部份內容。
4.1標籤頭的調整
原始內容:
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
修改後內容:
<!DOCTYPEvalidatorsPUBLIC
"-//ApacheStruts//XWork Validator Config 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">
注意:不修改可能致使第二節中問題2。
2、常見問題及解決方案
1. NoClassDefFoundError:com/opensymphony/xwork2/util/TextUtils問題解決
現象:啓動報出如下錯誤
<2013-7-30 下午03時58分11秒 CST> <Error> <HTTP> <BEA-101020> <[ServletContext@13341578[app:piccallweb module:piccallweb path:/piccallweb spec-version:2.5]] Servlet failed with Exception java.lang.NoClassDefFoundError:com/opensymphony/xwork2/util/TextUtils at com.googlecode.jsonplugin.SerializationParams.<init>(SerializationParams.java:38) at com.googlecode.jsonplugin.JSONResult.writeToResponse(JSONResult.java:194) at com.googlecode.jsonplugin.JSONResult.execute(JSONResult.java:184) at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:371) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275) Truncated. see log file for complete stacktrace >
緣由:xwork-core-2.3.15.1.jar中因爲升級現已去除com.opensymphony.xwork2.util.TextUtils。
解決方案:
1.替換jar包
原始版本 |
修改後版本 |
jsonplugin-0.**.jar json-lib-1.1-jdk13.jar |
struts2-json-plugin-2.3.15.1.jar json-lib-2.3-jdk15.jar struts2-junit-plugin--2.3.15.1.jar |
2.全部*struts*.xml配置的extends="struts-default"改爲extends="json-default"
2.啓動報 com.opensymphony.xwork2.config.ConfigurationException問題解決
現象:啓動報出如下錯誤(僅截取了最上面和最下面的異常信息)
com.opensymphony.xwork2.config.ConfigurationException:Caught Exception while registering Interceptor classorg.apache.struts2.interceptor.validation.AnnotationValidationInterceptor atcom.opensymphony.xwork2.ObjectFactory.buildInterceptor(ObjectFactory.java:214) ~[xwork-core-2.3.15.1.jar:2.3.15.1] …… Caused by:java.net.UnknownHostException:www.opensymphony.com atjava.net.InetAddress.getAllByName0(InetAddress.java:1157) ~[na:1.6.0_29] atjava.net.InetAddress.getAllByName(InetAddress.java:1083) ~[na:1.6.0_29] atjava.net.InetAddress.getAllByName(InetAddress.java:1019) ~[na:1.6.0_29]
緣由:因爲xwork升級,validator.xml的文件頭dtd配置須要作相應更新。
解決辦法:參見第四節中第(1)部份內容。
3. struts2的標籤報錯問題解決
現象:顯示頁面報錯:struts2的標籤使用出現問題,標籤中不支持表達式,如:EL表達式
This attribute does not supportrequest time values. <s:select list="#{'':'','0':'否','1':'是'}"id="prpCmainProp.quakeFlag" name="prpCmainProp.quakeFlag"value="${prpCmainProp.quakeFlag}"
緣由:struts2.3.15中使用s標籤,默認不支持表達式。
解決辦法:修改struts-tags.tld中全部的rtexprvalue標籤屬性爲true。
<rtexprvalue>true</rtexprvalue>
4. ajax異步調用中文參數後臺變亂碼問題解決
現象:前臺經過POST日後臺傳值時中文字符爲亂碼
緣由:struts2.3.15中org.apache.struts2.dispatcher.Dispatcher類prepare方法中新增了對於異步調用狀況字符集強制轉換爲UTF-8(見下方代碼),所以若是工程中jsp指定的字符集不是UTF-8,則中文傳至後臺會變成亂碼。
if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) { encoding = "UTF-8"; }
解決辦法:改寫org.apache.struts2.dispatcher.Dispatcher類注掉上面三行內容
後直接放在工程源碼中
5. ActionContextCleanUp is deprecatedWARNING問題解決
現象:系統啓動報「>>>ActionContextCleanUp<<< is deprecated! Pleaseuse the new filters!」WARNING
緣由:從Struts2.1.3起廢棄了ActionContextCleanUp過濾器,其相關功能在StrutsPrepareAndExecuteFilter實現。
解決辦法:參見第三節中第(2)部份內容。
6. struts2的TextFieldTag和SelectTag等標籤required屬性報錯問題解決
現象:JSP報「contains no methods named setRequired」錯誤
緣由:2.3.X版本中required屬性已替換爲requiredLabel 解決辦法:批量替換標籤中的required爲requiredLabel。
7. OGNL表達式問題解決
現象:部分系統中對com.opensymphony.xwork2.util.OgnlUtils.java和ognl.OgnlRuntime.java有單獨覆蓋,升級後存在不兼容現象
解決辦法:新的Ognl中已經修復了歷史OgnlUtils中存在的問題,因此刪除系統中OgnlUtils.java便可,ognl.OgnlRuntime.java這個文件按照新版本Ognl進行覆蓋修改
3、其它注意事項
爲保證更新成功,請注意刪除工程在中間件中產生的臨時文件,以weblogic爲例,WebLogicDomain下工程的緩存文件所在目錄可能包括但不限於如下位置: