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

Struts 2 Result 類型詳解:dispatcher、redirect、chain、redirectAction 四大核心類型

     編輯:Java 相關知識

前言

Struts 2 中的 Result 負責 Action 執行後的視圖導向。掌握四大常用 Result 類型——dispatcher、redirect、chain、redirectAction 的差異,是掌握 Struts 2 流程控制的關鍵。

一、四大 Result 類型對比

類型跳轉方式瀏覽器 URL請求次數適用場景
dispatcher伺服器端轉發Action URL1 次預設類型,JSP 頁面渲染
redirect客戶端重導向JSP 實際路徑2 次需改變 URL、防止表單重複提交
chainAction 鏈轉發Action URL1 次Action 間傳遞數據、流程串聯
redirectAction重導向到 Action目標 JSP 路徑2 次跨模組導向、REST 風格 URL

二、配置範例

<struts>
    <constant name="struts.devMode" value="true" />
    <package name="resultTypes" namespace="/r" extends="struts-default">
        <!-- dispatcher:伺服器端轉發,URL 保持 Action 路徑 -->
        <action name="r1">
            <result type="dispatcher">/r1.jsp</result>
        </action>

        <!-- redirect:客戶端重導向,URL 變為 JSP 路徑 -->
        <action name="r2">
            <result type="redirect">/r2.jsp</result>
        </action>

        <!-- chain:Action 鏈轉發,共享請求上下文 -->
        <action name="r3">
            <result type="chain">r1</result>
        </action>

        <!-- redirectAction:重導向到另一 Action -->
        <action name="r4">
            <result type="redirectAction">r2</result>
        </action>
    </package>
</struts>

三、深度解析

1. dispatcher(預設,最常用)

伺服器內部轉發,RequestDispatcher.forward()。請求物件、參數、屬性完整保留,瀏覽器地址列不變。適合同一請求內的頁面跳轉。

2. redirect

客戶端重導向,HttpServletResponse.sendRedirect()。伺服器回傳 302 狀態碼與新 Location,瀏覽器發起第二次請求。原請求物件銷毀,需透過 Session 或閃存傳值。適用於:

  • 表單提交後防止重複提交(PRG 模式)
  • 需讓用戶看到真實資源 URL
  • 跨域、跨應用導向

3. chain

Action 鏈,ActionChainResult。以 forward 方式調用另一 Action,共享同一請求上下文(request、parameters)。目標 Action 可在同包或不同包(需完整命名空間)。適用於多步驟業務流程串聯。

4. redirectAction

重導向到另一 Action,ServletActionRedirectResult。本質是 redirect,但目標是 Action 名稱而非 JSP 路徑。框架會根據目標 Action 的結果自動解析最終 JSP。支援攜帶參數:<param name="id">123</param>。

四、選型建議

  • 預設用 dispatcher:簡單頁面渲染
  • 表單提交用 redirect/redirectAction:遵循 PRG 模式
  • Action 間共享數據用 chain:但要注意耦合度
  • 跨模組、REST 風格用 redirectAction

五、總結

理解四大 Result 類型的底層機制(forward vs redirect)、請求生命週期影響、URL 變化,能幫助你在 Struts 2 專案中做出正確的流程控制決策。

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