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

Struts2 動態調用 Action 方法(一):通配符映射實現 REST 風格 URL

     編輯:Java 相關知識

從 Struts1 DispatchAction 到 Struts2 通配符

Struts1 時代靠 DispatchAction/MappingDispatchAction 實現一個 Action 類包含多業務方法。Struts2 通過通配符機制提供更強大、更靈活的動態映射能力。

核心配置:struts.xml 通配符映射

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "https://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="struts2" extends="struts-default">
        <!-- 關鍵配置:三個屬性均支援通配符 -->
        <action name="*Action_*" class="ssh.org.web.{1}Action" method="{2}">
            <result name="success">/user/success.jsp</result>
            <result name="input">/user/user.jsp</result>
        </action>
    </package>
</struts>

通配符解析規則

URL 示例匹配模式{1} 值{2} 值實際調用
/UserAction_addUser.action*Action_*UseraddUserssh.org.web.UserAction.addUser()
/OrderAction_create.action*Action_*Ordercreatessh.org.web.OrderAction.create()
/ProductAction_list.action*Action_*Productlistssh.org.web.ProductAction.list()

關鍵點:

  • name 屬性的通配符 * 按順序捕獲分組
  • class、method 中用 {1}、{2}... 反向引用分組
  • 區分大小寫:User ≠ user

Action 類實現示例

package ssh.org.web;
public class UserAction extends ActionSupport {
    private String username;
    private int age;
    private Date birthday;
    private List<String> aihao;

    public String addUser() { /* 添加邏輯 */ return SUCCESS; }
    public void validateAddUser() {  // 方法級驗證:validate + 方法名首字母大寫
        if (username == null || username.isEmpty()) {
            addFieldError("username", "用戶名不能為空");
        }
    }

    public String getUserList() { /* 查詢邏輯 */ return SUCCESS; }
    public void validateGetUserList() { /* 驗證邏輯 */ }
    // getter/setter 省略
}

結果頁面也支援通配符

<action name="page_*" class="ssh.org.web.HrefAction">
    <result name="success">{1}.jsp</result>  <!-- page_home.action → home.jsp -->
</action>

優先級規則:先匹配先執行

當多個 <action> 的通配符模式均能匹配同一 URL 時,按 struts.xml 文件中聲明順序從上到下,第一個匹配成功的生效。

最佳實踐:將具體路徑(無通配符)配置在通配符配置之前,確保精確匹配優先。

通配符映射 vs 其他方案對比

特性通配符映射多 Action 映射驚嘆號語法
配置行數1 行覆蓋 N 個方法N 行(每方法一行)0 額外行(零配置)
URL 風格/UserAction_addUser/addUser/user!addUser
REST 語義好(資源_動作)好一般
安全控制模式限制顯式聲明需額外白名單

總結

Struts2 通配符映射是實現「一個 Action 類承載多業務方法」的首選方案:

  1. 配置極簡(一行覆蓋所有 CRUD)
  2. URL 語義清晰(資源_動作 模式)
  3. 原生支援方法級驗證(validateXxx())
  4. 結果視圖可通配符復用

掌握 {1}、{2} 分組引用與優先級規則,即可構建清晰、可維護的 Struts2 動態調用體系。

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