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

Struts 核心元件解析:DispatchAction 讓單一 Action 處理多重操作

     編輯:Java 相關知識

前言

在傳統 Struts 開發中,每個業務操作往往對應一個 Action 類別,導致類別數量膨脹。DispatchAction 透過方法分派機制,讓單一 Action 類別封裝一組相關操作,大幅減少類別數量並簡化維護。

一、核心原理

DispatchAction 繼承自 Action,屬抽象類別,內建關鍵方法:

  • dispatchMethod:根據請求參數動態呼叫對應方法。
  • getMethod:透過反射取得目標方法物件。
  • getMethodName:從請求中解析方法名稱。

二、設定檔配置差異

在 struts-config.xml 中,DispatchAction 需額外指定 parameter 屬性,告知使用哪個請求參數作為方法名稱:

<action path="/user" 
        type="com.example.UserAction" 
        name="userForm" 
        scope="request" 
        parameter="method" 
        input="/user.jsp">
    <forward name="success" path="/list.jsp"/>
    <forward name="failure" path="/error.jsp"/>
</action>

三、Action 類別實作

public class UserAction extends DispatchAction {

    public ActionForward add(ActionMapping mapping, ActionForm form,
                             HttpServletRequest request, HttpServletResponse response) {
        // 新增邏輯
        return mapping.findForward("success");
    }

    public ActionForward update(ActionMapping mapping, ActionForm form,
                                HttpServletRequest request, HttpServletResponse response) {
        // 修改邏輯
        return mapping.findForward("success");
    }

    public ActionForward delete(ActionMapping mapping, ActionForm form,
                                HttpServletRequest request, HttpServletResponse response) {
        // 刪除邏輯
        return mapping.findForward("success");
    }
}

四、前端呼叫方式

透過 URL 參數 method 指定欲執行的操作:

  • 新增:https://localhost:8080/myapp/user.do?method=add
  • 修改:https://localhost:8080/myapp/user.do?method=update
  • 刪除:https://localhost:8080/myapp/user.do?method=delete

五、注意事項

  1. method 參數不可為空:若缺少 method 參數,DispatchAction 會呼叫 unspecified() 並拋出例外,建議覆寫該方法提供預設行為。
  2. 方法簽名固定:所有分派方法必須符合 ActionForward xxx(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) 簽名。
  3. 適用場景:適合「同一實體、多種操作」的 CRUD 場景;若業務邏輯差異極大,仍建議拆分為獨立 Action。

六、實務效益

採用 DispatchAction 後,原本需要三個類別 (AddAction, UpdateAction, DeleteAction) 現只需一個 UserAction,程式碼集中、導覽邏輯統一,後期維護成本顯著降低。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved