Struts2.3升級2.5版本注意點整理

目錄

前言

  最近在爲公司系統進行Struts2升級,從2.3.24.3升級到2.5.14.1,在此整理一下在升級過程中遇到的問題和解決辦法,防止自己忘記。順帶提醒一點,升級struts2.5版本時,工程的jdk版本需要1.7以上,否則編譯不支持。


開始升級

一、更換jar包

  第一步就是下載struts2的2.5.14.1版本的包,移除工程中不再需要的jar包,替換爲新的jar包。網上其他文章對於jar包的替換大同小異,所以在此列出的jar包更新列表並不是完整的,可能需要根據各自系統進行補充。

移除jar包

  • commons-fileupload
  • commons-lang-2.3
  • commons-lang3-3.1
  • freemarker-2.3.22
  • javassist-3.11.0.GA
  • log4j-1.2.14
  • ognl-3.0.6.1
  • struts2-core-2.3.24.3
  • struts2-json-plugin-2.3.24.3
  • struts2-spring-plugin-2.3.24.3
  • xwork-core-2.3.24.3

添加jar包

  • commons-fileupload-1.3.3
  • commons-lang-2.4
  • commons-lang3-3.6
  • freemarker-2.3.26-incubating
  • javassist-3.20.0-GA
  • log4j-1.2-api-2.9.1
  • log4j-api-2.9.1
  • log4j-core-2.9.1
  • ognl-3.1.15
  • struts2-core-2.5.14.1
  • struts2-json-plugin-2.5.14.1
  • struts2-spring-plugin-2.5.14.1

說明

  1. 在struts2.5版本中xwork-core這個類庫已經包含在struts2-core中,所以在此次升級中移除。
  2. 如果引用了其他struts2-x-plugin類庫,也需要進行相應更新。
  3. struts2.5版本開始使用log4j2日誌系統,引入log4j-1.2-api-2.9.1可以避免log4j代碼的修改,但需要在工程src目錄下新增log4j2.xml配置文件,舊的log4j日誌規則需要遷移到新的日誌配置文件中,然後移除舊的日誌配置文件。log4j2.xml的配置可以參考網上的教程。

二、配置文件修改

web.xml文件

  在2.5版本的struts2-core中沒有了ng包,所以StrutsPrepareAndExecuteFilter類的路徑需要修改。

修改前:

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
</filter>

修改後:

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
</filter>

struts配置文件

  1、所有struts配置文件的文件頭部需要更新爲2.5。

修改前:

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

修改後:

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">

  2、如果需要使用通配符的方式配置action時,需要在action所在的package中設置strict-method-invocation屬性爲false或者在package包中添加<global-allowed-methods>regex:.*</global-allowed-methods>
  網上其他的文章的解釋:因爲2.5版本升級了很多特性,在Struts 2.5中,嚴格DMI被擴展,它被稱爲嚴格方法調用 又名SMI。你可以想象DMI是一個“邊境警察”,SMI是一個“稅務警察”,並注意內部。使用此版本,SMI默認情況下啓用(strict-method-invocation屬性默認設置爲 true在 struts-default包中),您可以選擇禁用它每個包 - 沒有全局開關禁用整個應用程序的SMI。
  下面是修改的例子(二選一):

<package name="videoDetail" namespace="/videoDetail"
     extends="json-default" strict-method-invocation="false">
        <action name="*" class="com.coder.video.action.VideoDetailAction" 
        method="{1}">
</package>

或者

<package name="videoDetail" namespace="/videoDetail"
     extends="json-default">
        <global-allowed-methods>regex:.*</global-allowed-methods>
        <action name="*" class="com.coder.video.action.VideoDetailAction" 
        method="{1}">
</package>

  如果有公用的package,可以把<global-allowed-methods>regex:.*</global-allowed-methods>添加到公用package,然後繼承公用package,這樣的好處就是不用一個個package去添加。也可以根據實際需要修改個別package。

  另外package中元素需要按照一定的順序排列:

result-types
interceptors
default-interceptor-ref
default-action-ref
default-class-ref
global-results
global-exception-mappings
action*(就是所有的action放到最後)

  否則會報錯:

The content of element type "package" must match default-interceptor-
ref?,default-action-ref?,default-class-ref?,global-results?,global-
exception-mappings?,action*)".

三、代碼修改

JSP文件

  JSP文件主要是要替換struts標籤的一些過時的屬性,和規範JSP語法。在此列出在升級中遇到的修改。

  • s標籤庫
    • <s:iterator><s:bean>等標籤的id屬性已過時,需要修改爲var 屬性。
    • <s:set>的name屬性需要修改爲var屬性。
    • <s:property>標籤的escape屬性需要修改爲escapeHtml屬性。
  • JSP語法
    • 使用<@page import="">導入包時,不要加分號結束。例如:
      <@page import="java.lang.*">(正確寫法)
      <@page import="java.lang.*;">(錯誤寫法)

  此類修改如果在IDE(我使用的是MyEclipse)工具上進行,使用正則表達式搜索能夠比較快速定位修改點。

Java文件

  javabean的getter/setter方法需要注意按照規則書寫。具體規則可參考:JavaBean的命名規則。其中需要特別注意:

如果屬性名的第二個字母是大寫,則它的存取方法是 set/get 加上屬性原名

/**例子**/
private String sNum;

//正確寫法,getter/setter爲set/get 加上屬性原名
public String getsNum(){ return this.sNum;}
public void setsNum(String sNum){this.sNum=sNum;}

//錯誤寫法
public String getSNum(){ return this.sNum;}
public void setSNum(String sNum){this.sNum=sNum;}

總結

  這次struts2升級遇到不少的問題,不過都一一解決了,學到不少東西,在此記錄一番,也不枉這些天的勞苦。以後寫代碼儘量按照規範,避免軟件升級時出現不兼容的情況。log4j2日誌系統的配置有時間也需要記錄一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章