一、Action對象
Action對象是Struts2框架中的重要對象,主要用於對HTTP請求進行處理,在Struts2 API中,Action對象是一個接口,位於com.opensymphony.xwork2包中。在Struts2項目開發中,創建Action對象都要直接或間接實現此對象。
在Action接口中,包含了5個靜態成員變量:
- 靜態變量SUCCESS,代表Action執行成功的返回值。如果在Action執行成功的情況下,需要返回到成功的頁面,此時就可以將返回值設置為SUCCESS。
- 靜態變量NONE,代表Action執行成功的返回值,但不需要返回到成功的頁面。主要用於處理不需要返回結果頁面的業務邏輯。
- 靜態變量ERROR,代表Action執行失敗的返回值。如在一些信息驗證失敗的情況下,可以使Action返回此值。
- 靜態變量INPUT,代表需要返回到某個輸入信息的頁面的返回值。如在修改某些信息時,加載數據后需要返回到修改頁面,此時就可以將Action對象的返回值設置為INPUT。
- 靜態變量LOGIN,代表需要用戶登錄的返回值。如在驗證用戶是否登錄時,Action驗證失敗,需要用戶重新登錄,此時就可以將Action對象的返回值設置為LOGIN。
二、請求參數的注入
在Struts2框架中,表單提交的數據會自動注入到與Action對象相對應的屬性。通過Action對象為屬性提供setter方法進行注入。
基本流程:
Struts2框架的工作,主要是通過Struts2的過濾器對象攔截HTTP請求,然后將請求分配到指定的Action進行處理。由於在Web項目中配置的是Struts2過濾器,所以當瀏覽器向Web容器發送一個HTTP請求時, Web容器就要調用Struts2過濾器的doFilter()方法。此時Struts2就接收到了HTTP請求,通過Struts2的內部處理機制,它會判斷這個HTTP請求是否與某個Action對象相匹配。如果找到了與之匹配的Action,就會 調用Action對象的execute()方法,並根據處理結果返回相應的值,然后Struts2就會通過Action的返回值查找返回值所映射的頁面,最后通過一定的視圖回應給瀏覽器。
三、動態Action
動態Action的處理方式,是通過請求Action對象中一個具體的方法來實現的操作,具體方式,是在Action的URL地址后方加上請求的字符串(方法名稱),與Action對象的方法進行匹配,Action對象地址ui請求字符串之間以“!”進行分隔。例如:

1 <body> 2 <a href="userAction!add">添加用戶</a> 3 <a href="userAction!updatee">更新用戶</a> 4 5 </body>
可知,Action請求的處理方式並非一定要通過execute()方法進行處理,使用動態Action的處理方式更加方便。所以,在實際開發中個,可以將同模塊的一些請求封裝到一個Action對象中,使用Struts2提供的動態Action對不同請求進行處理。
四、Struts2的相關配置
<1> Struts2的配置文件主要有4個,如下。
名稱 | 說明 |
struts-default.xml | 位於struts2-core-2.1.14.1.jar文件的org.apache.struts2包中 |
struts-plugin.xml | 位於Struts2提供的各個插件的包中 |
struts.xml | Web應用默認的Struts2配置文件 |
struts.properties | Struts2框架中屬性配置文件 |
web.xml | 在該文件中也可以設置Struts2框架的一些信息 |
<2> Struts2的包配置

1 <struts> 2 <!-- 聲明包--> 3 <package name="user" extends="struts-default" namespace="/user"> 4 ...... 5 </package> 6 </struts>
名稱 | 說明 |
name | 聲明包的名稱,以方便在其他地方引用此包,此屬性是必須的 |
extends | 用於聲明繼承的包,也就是它的父包 |
namespace | 指定名稱空間,也就是訪問此包下的Action需要訪問的路徑 |
abstract | 將包聲明為抽象類型(包中不定義action) |
<3> Struts2中Action的對象相關配置
Action對象起到一個控制器的作用,Struts2框架通過Action對象處理HTTP請求。

1 <action name="userAction" class="com.wyao.action.UserAction" method="save"> 2 <result>success.jsp</result> 3 </action>
屬性 | 說明 |
name | 用於配置Action對象被請求的URL映射 |
class | 指定Action對象的類名 |
method | 設置請求Action對象時,調用Action對象的哪一個方法 |
converter | 指定Action對象類型轉換器的類 |
調用一個Action對象,默認情況下,它執行的是execute()方法。如果需要請求指定的方法,就可以通過<action>元素的method屬性進行配置,將一個請求交給指定的業務邏輯方法進行處理。使用Action元素的method屬性,其屬性值需要與Action對象中的方法名一致,Struts2框架是通過method屬性值查找與之配置的方法。
<4> Struts2通配符匹配值
通配符的配置方式主要針對在非常多的Action的情況下,通過一定的命名約定,使用通配符來配置Action對象,達到簡化。
常用的通配符有兩個,
-
- 通配符“*” : 匹配0或多個字符。
- 通配符“\” :是一個轉義字符,如需匹配“/”,則使用通配符“ V”。
在struts.xml中,結果映射使用<result>元素進行映射,如:

1 <action name="register" class="com.shengsiyuan.struts2.RegisterAction"> 2 <!-- 結果映射 --> 3 <result>/user/Result.jsp</result> 4 <!-- 結果映射 --> 5 <result name="success">/registerResult.jsp</result> 6 <!-- 結果映射 --> 7 <result name="input" type="dispatcher">/register.jsp</result> 8 </action>
<result>元素有兩個屬性,name和type。其中name屬性與Action對象中方法的返回值相對應,如果execute()方法返回值為input,那么,將<result>元素的name屬性配置為input,對應Action對象返回值。type屬性用於設置結果的返回值類型,如請求轉發、重定向等。如果不設置<result>元素的name屬性,那么默認為success。