轉載網址:http://blog.csdn.net/amosryan/article/details/10350481
由于大家都懂的原因,涉struts2的項目需要將struts2相關包升級至2.3.15.1。今將升級方法和常見問題解決簡單總結如下。
一、基本升級操作
1. 獲取Struts2.3.15.1jar包
從Struts官網下載struts2.3.15.1發布包:
http://apache.fayea.com/apache-mirror//struts/library/struts-2.3.15.1-lib.zip
2.工程中的jar包替換
以下清單為示例,請根據工程實際情況參照替換成struts-2.3.15.1-lib.zip包中的版本:
原始版本(版本號為示例) | 升級后版本 |
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標簽頭的調整
原始內容:
<!DOCTYPEvalidatorsPUBLIC
"-//OpenSymphonyGroup//XWorkValidatorConfig1.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。
二、常見問題及解決方案
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 Exceptionjava.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.AnnotationValidationInterceptoratcom.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進行覆蓋修改
三、其它注意事項
為保證更新成功,請注意刪除工程在中間件中產生的臨時文件,以weblogic為例,WebLogicDomain下工程的緩存文件所在目錄可能包括但不限于以下位置:
新聞熱點
疑難解答