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

Struts2 動態調用 Action 方法(二):多 Action 映射與驚嘆號語法

     編輯:Java 相關知識

場景回顧

接上文《動態調用 Action 與 Action 中方法(一)》,本文介紹另外兩種實現「一個 Action 類對應多個業務邏輯入口」的方式。

方式二:配置多個 <action> 映射同一類不同方法

核心思想:在 struts.xml 中定義多個 <action> 元素,class 指向同一個 Action 類,method 屬性指定不同的業務方法。

配置示例

<action name="addUser" class="ssh.org.web.UserAction" method="addUser">
    <result name="success">/user/success.jsp</result>
    <result name="input">/user/user.jsp</result>
</action>

<action name="getUser" class="ssh.org.web.UserAction" method="getUserList">
    <result name="success">/user/success.jsp</result>
    <result name="input">/user/user.jsp</result>
</action>

對應 Action 類

package ssh.org.web;
public class UserAction extends ActionSupport {
    public String addUser() { /* 添加用戶邏輯 */ return SUCCESS; }
    public String getUserList() { /* 查詢用戶列表 */ return SUCCESS; }
    // 驗證方法:validateAddUser()、validateGetUserList() 自動關聯
}

請求映射

  • https://host/app/addUser.action → 執行 addUser()
  • https://host/app/getUser.action → 執行 getUserList()

優缺點分析

優點缺點
配置直觀、聲明式、無需通配符解析 Action 類方法增多時,XML 膨脹、重複配置 class/result
支援方法級驗證(validateXxx()) 邏輯 Action 數量 = 物理 Action 數量,不利於大規模維護

方式三:驚嘆號語法 ActionName!methodName.action

核心機制:Struts2 默認的 ActionMapping 解析器識別 ! 分隔符,將 URL 映射為 {actionName} + {methodName}。

配置極簡

<action name="user" class="ssh.org.web.UserAction">
    <result name="success">/user/success.jsp</result>
    <result name="input">/user/user.jsp</result>
</action>

請求示例

  • https://host/app/user!addUser.action → 執行 addUser()
  • https://host/app/user!getUserList.action → 執行 getUserList()

注意事項

  1. 方法名區分大小寫:URL 中方法名必須與 Action 類方法名完全一致
  2. 安全風險:暴露所有 public 方法為可調用入口,建議配合 allowedMethods 白名單:
<action name="user" class="ssh.org.web.UserAction" method="addUser,getUserList">
    <!-- 僅允許這兩個方法被動態調用 -->
</action>

或在 struts.xml 全局設置:<constant name="struts.enable.DynamicMethodInvocation" value="false"/> 禁用該特性(默認開啟)。

三種方式綜合對比

維度通配符映射(上文)多 Action 映射驚嘆號語法
配置複雜度低(一行配置)高(每方法一個 action)極低(零額外配置)
URL 語義化高(REST 風格)高一般(含特殊符號)
方法級驗證支援支援支援支援
安全性可通過通配符限制顯式聲明最安全需額外配置白名單
推薦場景CRUD 規律性強方法少、邏輯差異大快速原型、內部系統

總結

Struts2 提供了靈活的動態方法調用機制:

  • 通配符映射適合 REST 風格、規律性強的 CRUD 操作
  • 多 Action 映射適合邏輯差異大、需精細控制結果視圖的場景
  • 驚嘆號語法零配置便利,但生產環境必須啟用白名單或禁用防止惡意調用

根據項目規模、團隊習慣、安全要求選擇最適方案。

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