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

Struts2 Result 類型全解析:Dispatcher、Redirect、RedirectAction 與 Action 實例模式

     編輯:Java 程式設計入門

Result 基礎屬性

每個 <result> 元素擁有兩個核心屬性:

  • name:對應 Action 方法返回的邏輯視圖名,預設 success。
  • type:結果處理類型,預設 dispatcher(請求轉發)。

Struts2 內建 10 種結果類型,定義於 struts-default.xml。

核心類型詳解

1. Dispatcher(預設·轉發)

最常用類型,Server 端內部轉發,保留 request 作用域數據。

<!-- 寫法一:簡寫 -->
<result name="success">/manager/index.jsp</result>

<!-- 寫法二:完整參數 -->
<result name="success" type="dispatcher">
    <param name="location">/manager/index.jsp</param>
</result>

location 參數對應 ServletDispatcherResult 原始碼中的位置屬性。

2. Redirect(重定向)

HTTP 302 重定向,瀏覽器重新發請求,**request 作用域數據丟失**,適合「Post-Redirect-Get」模式防止重複提交。

<result name="success" type="redirect">/login.jsp</result>

3. RedirectAction(Action 間重定向)

重定向到另一個 Action,支援兩種參數:

  • actionName:目標 Action 名稱(含 .action 後綴)
  • namespace:目標命名空間,省略則沿用當前
<!-- 方式一:簡寫 -->
<result name="success" type="redirectAction">resulttype/redirectactionAction.action</result>

<!-- 方式二:參數化 -->
<result name="success" type="redirectAction">
    <param name="actionName">resulttype/redirectactionAction.action</param>
    <!-- namespace 可選 -->
</result>

Action 名稱搜尋順序(命名空間解析)

請求 URL:https://server/struts2/path1/path2/path3/test.action

  1. 優先匹配 namespace="/path1/path2/path3" 的 package
  2. 遞減匹配 /path1/path2、/path1
  3. 最後回退到預設空命名空間 ""
  4. 找不到則拋 404

Action 實例模式:Prototype vs Singleton

組件模式生命週期
Struts2 ActionPrototype(原型)**每次請求創建新實例**,線程安全
ServletSingleton(單例)首次請求創建,後續共用,需自行處理線程安全

Servlet 生命週期:創建 → init() → service() → destroy()

配置圖示參考

struts-default.xml 結果類型定義 Dispatcher 配置範例 ServletDispatcherResult 原始碼 Action vs Servlet 實例模式對比

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