首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Struts2 Action 是否必須實現 execute 方法?兩種場景全解析

     編輯:Java 相關知識

核心結論:視繼承關係而定

Struts2 中 Action 是否必須實現 execute() 方法,取決於 Action 類的繼承體系 與 struts.xml 配置 兩個因素。

場景一:繼承 ActionSupport 或 BaseAction(最常見)

不需要 顯式實現 execute() 方法。

  • ActionSupport 已提供默認實現:public String execute() { return SUCCESS; };
  • 只需在 struts.xml 中配置 <result name="success"> 對應的視圖頁面即可。

配置示例

<action name="doRevenuesMaintenance">
    <interceptor-ref name="novatar-webStack-baseparam">
        <param name="security.actionType">PRIVATE</param>
    </interceptor-ref>
    <result name="success">incomeMaintenance.jsp</result>
</action>

對應的 Action 類可無任何方法:

public class RevenuesAction extends ActionSupport {
    // 無需 execute(),直接跳轉 incomeMaintenance.jsp
}

場景二:不繼承 ActionSupport/BaseAction(POJO Action)

必須 實現 execute() 方法,除非 在 struts.xml 中通過 method 屬性指定其他方法。

  • Struts2 默認尋找 execute() 作為入口;
  • 找不到則拋出「找不到對應方法」異常。

兩種解決方案

  1. 實現 execute():public String execute() { return "success"; }
  2. 指定 method 屬性:
    <action name="myAction" class="com.example.MyAction" method="customMethod">
        <result name="success">success.jsp</result>
    </action>
    

進階:無論是否繼承,均可用 method 指定入口

<action> 標籤的 method 屬性優先級最高,可覆蓋默認約定:

<action name="userAction" class="com.example.UserAction" method="list">
    <result name="success">/user/list.jsp</result>
</action>

此時 UserAction 只需提供 public String list(),無需 execute()。

最佳實踐建議

  1. 推薦繼承 ActionSupport:獲得驗證、文件上傳、國際化等內置功能,且默認 execute() 返回 SUCCESS,減少樣板代碼;
  2. 採用 method 屬性實現多入口:一個 Action 類處理多個業務操作(list、add、edit、delete),REST 風格更清晰;
  3. 避免 POJO Action:除非極簡場景,否則喪失框架賦能,維護成本高。

總結表

場景是否需 execute()備註
繼承 ActionSupport/BaseAction + 無 method 配置否默認 execute() 返回 SUCCESS
繼承 ActionSupport/BaseAction + 有 method 配置否按 method 指定方法執行
不繼承 + 無 method 配置是否則報錯
不繼承 + 有 method 配置否按 method 指定方法執行
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved