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

Struts 2 通配符映射機制:靈活處理多業務 Action 的最佳實踐

     編輯:Java 相關知識

Struts 2 動態方法調用:通配符映射完整指南

Struts 2 提供多種動態方法調用方式,其中通配符映射能以單一 Action 配置處理多業務邏輯,大幅減少 struts.xml 冗餘配置。本文詳細解析通配符語法、映射規則與實戰應用。

三種動態方法調用方式對比

方式配置位置優點缺點
表單 action 屬性JSP 頁面直觀簡單前端耦合後端方法名
struts.xml method 屬性配置文件集中管理需配置多個 action,冗餘嚴重
通配符映射struts.xml單 action 處理多方法,零冗餘需理解映射規則

通配符映射核心語法

<action name="*" class="action.Action" method="{1}">
    <result name="userLogin">WEB-INF/jsp/userLogin.jsp</result>
    <result name="userCreate">WEB-INF/jsp/userCreate.jsp</result>
</action>

關鍵點解析

  • name="*":匹配任意 action 名稱 (如 Login、Create)
  • method="{1}":{1} 代表第一個 * 匹配的值,即動態決定調用方法
  • 請求 Login.action → 匹配 * = "Login" → 調用 Login() 方法
  • 請求 Create.action → 匹配 * = "Create" → 調用 Create() 方法

完整實戰範例

1. JSP 頁面 (index.jsp)

<form action="Login" method="post" id="form">
    姓名:<input type="text" name="name" /><br>
    密碼:<input type="password" name="password" /><br>
    <input type="submit" value="登入">
    <input type="submit" value="註冊" onclick="$('#form').attr('action','Create')">
</form>

2. Action 類

public class Action extends ActionSupport {
    private String name;
    // getter/setter 省略
    
    public String Login() {
        System.out.println("用戶登入");
        return "userLogin";
    }
    
    public String Create() {
        System.out.println("用戶註冊");
        return "userCreate";
    }
}

3. struts.xml 配置

<struts>
    <package name="myP" extends="struts-default">
        <action name="*" class="action.Action" method="{1}">
            <result name="userLogin">/WEB-INF/jsp/userLogin.jsp</result>
            <result name="userCreate">/WEB-INF/jsp/userCreate.jsp</result>
        </action>
    </package>
</struts>

進階通配符模式

模式匹配範例應用場景
*-*User-Login、Order-Delete模組-操作風格,{1}=模組,{2}=操作
Book_*Book_List、Book_Add前綴分組,{1}=後綴
* (配合 result)任意 action<result>/WEB-INF/jsp/{1}.jsp</result> 直接跳轉同名頁面

通配符在各屬性中的應用

<action name="*" class="action.{1}Action" method="execute">
    <!-- 動態決定 Action 類 -->
</action>

<action name="*-*" class="action.{1}Action" method="{2}">
    <!-- 模組-方法雙重動態 -->
</action>

<result name="success">/WEB-INF/jsp/{1}.jsp</result>
<!-- 動態結果頁面 -->

最佳實踐建議

  1. 命名規範:Action 方法名與業務動作對應 (login、create、update、delete)
  2. 安全控制:配合 method="!*" 排除危險方法,或使用 AllowedMethods 介面白名單
  3. REST 風格:結合 Struts2-REST-Plugin 實現真正 RESTful 映射
  4. 避免過度使用:核心業務流程建議顯式配置,通配符適用於 CRUD 類標準操作

常見問題排查

  • No result defined for action...:Result 名稱與 Action 返回值不匹配
  • Method not found:Action 類缺少對應方法,或方法非 public
  • 通配符不生效:檢查 struts.enable.DynamicMethodInvocation 是否為 true (預設開啟)

掌握通配符映射,能讓 Struts 2 配置更精簡、維護性更強,是中大型專案配置優化的關鍵技巧。

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