轉載:Struts2.3.15.1升級總結

轉載網址:http://blog.csdn.net/amosryan/article/details/10350481java

 

因爲你們都懂的緣由,涉struts2的項目須要將struts2相關包升級至2.3.15.1。今將升級方法和常見問題解決簡單總結以下。web


1、基本升級操做ajax

1. 獲取Struts2.3.15.1jarspring

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.1jar包;

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.xmlActionContextCleanUp過濾器:

<!--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.15org.apache.struts2.dispatcher.Dispatcherprepare方法中新增了對於異步調用狀況字符集強制轉換爲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. struts2TextFieldTagSelectTag等標籤required屬性報錯問題解決

現象:JSP報「contains no methods named setRequired」錯誤

緣由:2.3.X版本中required屬性已替換爲requiredLabel 解決辦法:批量替換標籤中的requiredrequiredLabel

7. OGNL表達式問題解決

現象:部分系統中對com.opensymphony.xwork2.util.OgnlUtils.javaognl.OgnlRuntime.java有單獨覆蓋,升級後存在不兼容現象

解決辦法:新的Ognl中已經修復了歷史OgnlUtils中存在的問題,因此刪除系統中OgnlUtils.java便可,ognl.OgnlRuntime.java這個文件按照新版本Ognl進行覆蓋修改

3、其它注意事項

爲保證更新成功,請注意刪除工程在中間件中產生的臨時文件,以weblogic爲例,WebLogicDomain下工程的緩存文件所在目錄可能包括但不限於如下位置:

    • [domain所在目錄]\servers\[server]\tmp
    • weblogic.xml中配置的working-dir目錄
相關文章
相關標籤/搜索