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

Struts 2 Action 配置詳解:方法映射、通配符與註解式開發

     編輯:Java 相關知識

Struts 2 Action 核心特性

Struts 2 的 Action 採用低侵入式設計:不需繼承基類、不需實現介面、不與 Servlet API 直接耦合。Action 本質上是一個 POJO,通常包含無參數的 execute() 方法,可定義多個業務方法並通過配置映射為獨立 Action,實現代碼複用。

基礎 Action 範例

public class UserAction {
    private String username, password;
    // getter/setter 省略
    public String execute() throws Exception { return "success"; }
    public String regist() throws Exception { return "success"; }
    public String login() throws Exception { return "success"; }
}

Action 訪問 Servlet API 的三種方式

  1. ActionContext(推薦):模擬 Servlet API,返回 Map 便於測試
    • getContext().getSession() → 模擬 HttpSession
    • getContext().getApplication() → 模擬 ServletContext
    • getContext().getParameters() → 模擬 Request 參數
  2. 實現 Aware 介面(強耦合):
    • ServletContextAware、ServletRequestAware、ServletResponseAware
  3. 繼承 ActionSupport:內部已實現上述介面,可直接獲取

struts.xml 中的方法映射配置

方式一:顯式指定 method 屬性

<action name="loginAction" class="example.UserAction" method="login">
    <result name="success">/success.jsp</result>
</action>
<action name="registAction" class="example.UserAction" method="regist">
    <result name="success">/success.jsp</result>
</action>

方式二:通配符映射(動態方法調用)

<!-- 單層通配符:*Action → method={1} -->
<action name="*Action" class="example.UserAction" method="{1}">
    <result name="success">/success.jsp</result>
</action>

<!-- 雙層通配符:*_* → class=example.{1}Action, method={2} -->
<action name="*_*" class="example.{1}Action" method="{2}"> ... </action>

{1} 匹配第一個 *,{2} 匹配第二個 *。

註解式配置(Convention Plugin)

需額外引入 struts2-convention-plugin。struts.xml 仍需存在(可僅保留常量配置)。

核心註解說明

註解作用
@ParentPackage指定繼承的父包(如 "struts-default")
@Namespace定義命名空間(對應 URL 路徑前綴)
@Action標註在方法上,value 為訪問路徑
@Result定義結果視圖映射
@Results多結果陣列
@ExceptionMapping異常映射處理

完整範例

@ParentPackage("struts-default")
@Namespace("/user")
@Results({
    @Result(name="success", location="/msg.jsp"),
    @Result(name="error", location="/error.jsp")
})
@ExceptionMappings({
    @ExceptionMapping(exception="java.lang.RuntimeException", result="error")
})
public class LoginAction extends ActionSupport {
    private String loginname, pwd;

    @Action(value="login")
    public String login() {
        if ("qq".equals(loginname) && "123".equals(pwd)) return SUCCESS;
        return ERROR;
    }

    @Action(value="add", results={@Result(name="success", location="/index.jsp")})
    public String add() { return SUCCESS; }
    // getter/setter 省略
}

註解式配置適合中小型專案,大型專案建議集中管理 XML 配置以便維護。

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