MappingDispatchAction 是 DispatchAction 子類,特色在於不依賴請求參數指定方法,而是將每個 Action 路徑直接對應到一個具體方法。適用於「不同 URL 執行不同邏輯,但共用同一 Action 類別」的情境。
package action;
import org.apache.struts.actions.MappingDispatchAction;
import javax.servlet.http.*;
import org.apache.struts.action.*;
public class MyMappingDispatchAction extends MappingDispatchAction {
// 對應 /pdf.do
public ActionForward pdf(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// 生成 PDF 邏輯
return mapping.findForward("success");
}
// 對應 /html.do
public ActionForward html(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// 生成 HTML 邏輯
return mapping.findForward("success");
}
// 預設處理(無對應路徑時)
protected ActionForward unspecified(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// 預設邏輯
return mapping.findForward("default");
}
}
<action-mappings>
<action path="/pdf"
type="action.MyMappingDispatchAction"
parameter="pdf" />
<action path="/html"
type="action.MyMappingDispatchAction"
parameter="html" />
</action-mappings>
path:請求路徑(對應 /pdf.do、/html.do)。parameter:指定要呼叫的方法名稱(pdf、html)。<action> 共用同一 type 類別。| 請求 URL | 呼叫方法 | |
|---|---|---|
https://host/app/pdf.do | pdf() | |
https://host/app/html.do | html() | |
| 其他路徑對應此 Action 類別 | unspecified() |
| 類別 | 方法選擇依據 | 適用情境 |
|---|---|---|
DispatchAction | 請求參數(如 ?method=pdf) | 單一表單多動作、REST 風格 |
LookupDispatchAction | 請求參數 + 屬性檔映射 | 多語言按鈕值映射 |
MappingDispatchAction | Action 路徑(path) | 不同 URL 對應不同業務邏輯 |
EventDispatchAction | 提交按鈕 property 屬性 | 單一表單多提交按鈕 |
MappingDispatchAction 讓開發者以「一個路徑對應一個方法」的直覺方式組織程式碼,配置簡潔,適合將相關但獨立的業務操作(如匯出 PDF/HTML/Excel)集中在同一 Action 類別中管理。