在TP中,我們在控制器中,通常是這樣使用的。

往往,我們將用戶認證、權限判斷等功能寫入HomeController中。
<hr />
Struts中,也是大同小異。在這里我們繼承的類為:com.opensymphony.xwork2.ActionSupport。
在TP中,框架默認為每個ACTION對應著類中的某個方法。通過前面的學習,我們在使用Struts時,默認將每個Action對應著類中的固定方法`execute()`。其實,這只是框架的使用習慣不同而已(更多的是由于對請求數據的處理方法不同)。TP也是可以將action與某個類中的固有方法對應起來的,而Struts同樣,也可以像TP那樣使用。
由于每個Action都對應一個類,所以使用Struts時,我們變成了這樣。

沒錯,這與我們前面學過的TP是完全相同的。
此時,我們將用戶認證、權限判斷等一系列功能寫入到Action中。
考慮到CURD各個ACTION都是對教師進行的操作,所以存在一些共性,為了減少代碼的冗余,我們再加入一個TeacherAction類。

<hr />
按上圖,進行代碼整理后,我們的目錄結構如下:

> 由于我們對類名進行了修改,所以如果你發現struts提示找不到相關的類文件的話。應該能想到去修改struts.xml吧。
Action.java
```
package com.mengyunzhi.javaee.action;
import com.opensymphony.xwork2.ActionSupport;
public abstract class Action extends ActionSupport {
/**
* 用于類的序列化與反序列化,我們直接生成即可
*/
private static final long serialVersionUID = 1L;
}
```
由于Action, 只用來被繼承,所以在此聲明為:abstract ,在UML類圖的中,該類的名字以斜體表示 .
TeacherAction.java
```
package com.mengyunzhi.javaee.action.teacher;
import com.mengyunzhi.javaee.action.Action;
public class Teacher extends Action {
/**
* 用于類的序列化與反序列化,我們直接生成即可
*/
private static final long serialVersionUID = 1L;
}
```
<hr />
閱讀官方文檔:
和查看其它的文檔一下,我們首先找到文件的位置:

> 2.3的說明文檔有些問題,在這里,我們使用2.5的。
然后進入這個文件夾,運行`http-server`,

按提示打開我們的瀏覽器, 選擇`struts2-core-apidocs`,然后搜索ActionSupport

我們復制一些信息下來,簡單的看一下它的說明。
```
// 包名
com.opensymphony.xwork2
// 類名
Class ActionSupport
// 類型
java.lang.Object
com.opensymphony.xwork2.ActionSupport
// 實現的所有的接口
All Implemented Interfaces:
// 下面這些名稱,都是接口名, 我們隨便在這個文字上點一下,還能看到接口的詳細描述信息
Action, ValidationAware, LocaleProvider, TextProvider, Validateable, Serializable
// 已知的 子類(即:繼承了本類的類)
Direct Known Subclasses:
DefaultActionSupport
// 對上面幾項信息的詳細說明
public class ActionSupport
extends Object
implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable
// 對本類的簡單說明:
Provides a default implementation for the most common actions. See the documentation for all the interfaces this class implements for more detailed information.
```
繼承ActionSupport后,我們在需要返回字符串"success"的地方,可以寫為,也必須寫為SUCCESS了。
```
return "success";
```
改寫為:
```
return SUCCESS;
```
這是由于在
com.opensymphony.xwork2.Interface Action中,已經顯示的為我們聲明了幾個字段.

> 官方文檔: [http://127.0.0.1:8081/struts2-core-apidocs/com/opensymphony/xwork2/ActionSupport.html](http://127.0.0.1:8081/struts2-core-apidocs/com/opensymphony/xwork2/ActionSupport.html)
- README
- 第一章:準備
- 第二章:Hello World!
- 第一節:查看工程文件
- 第二節:JDK、JRE與環境變量
- 第三節:index.jsp
- 第三章:Hello Struts
- 第一節:Web.xml
- 第二節:單入口
- 第三節:Hello Struts
- 第四節:觸發C層
- 第四章:建立數據表
- 第一節:建立實體類
- 第二節:測試一
- 第三節:測試二
- 第四節:引入Hibernate
- 第五節:配置Hibernate
- 第六節:建立連接
- 第七節:實體類映射數據表
- 第八節:完善數據表
- 第五章:教師管理
- 第一節:增加數據--add
- 第二節:增加數據--save
- 1 獲取傳入數據數據
- 2 數據寫入測試
- 3 對接C層
- 第三節:數據列表
- 1 獲取數據
- 2 重構代碼
- 3 C層對接--初始化
- 4 C層添加數據
- 5 V層顯示數據
- 6 獲取數據庫中數據
- 7 顯示性別
- 8 分頁
- 9 條件查詢
- 第四節:修改數據
- 1 edit
- 2 update
- 第五節:刪除數據
- 第六節:總結
- 第六章:重構C層
- 第一節:繼承ActionSupport類
- 第二節:數據驗證
- 第七章:前臺分離(前臺)
- 第一節:環境搭建
- 第二節:運行環境
- 第三節:共享開發環境
- 第四節:生產環境
- 第八章:前臺開發(前臺)
- 第一節:本地化
- 第二節:教師列表
- 1 引入M層
- 2 模擬后臺返回數據
- 3 C與M對接
- 4 C與V對接
- 第九章:前后臺對接(前后臺)
- 第一節:后臺輸出json(后臺)
- 第二節:對接前臺(全棧)
- 第二節:對接API(前臺)
- 第二節:跨域請求(后臺)
- 第三節:重構代碼(前臺)
- 第十章:重構后臺M層
- 第一節:數據訪問DAO層
- 第二節:項目整體重構
- 第十一章:用戶登陸(前后臺)
- 第一節:制定規范
- 第二節:定制測試用例
- 第三節:后臺輸入測試代碼(后臺)
- 第四節:postman(后臺)
- 第五節:新建用戶登陸模塊(前臺)
- 第六節:代碼重構(前臺)
- 第十二章:班級管理(前后臺)
- 第一節:班級列表
- 1 原型開發
- 2 制定規范
- 3 后臺對接開發
- 4 前臺對接開發
- 第二節:Add
- 1 原型開發
- 2 制定規范
- 3 后臺對接開發
- 4 前臺對接開發
- 第三節:Save
- 1 制定規范
- 2 后臺對接開發
- 3 前臺對接開發
- 第四節:Edit
- 1 原型開發
- 2 制定規范
- 3 后臺對接開發
- 4 前臺對接開發
- 第五節:Update
- 1 制定規范
- 2 后臺對接開發
- 3 前臺對接開發
- 第六節:Delete
- 1 制定規范
- 2 后臺對接開發
- 3 前臺對接開發
- 第七節:小結
- 第十三章:班級管理(API)
- 第一節:ER圖
- 第二節:create
- 1 實體層
- 2 dao層
- 3 service(server)層
- 4 action層
- 第三節:ManyToOne
- 第四節:Read
- 1 service(server)層
- 2 action層
- 第五節:update
- 1 service(server)層
- 2 action層
- 第六節:update
- 第十四章:重構服務層