ActionForward

ActionForward

ActionForward是 Struts的核心類之一。在基於Struts的Web應用程式開發過程中,Action操作完畢後程式會通過Struts的配置檔案struts- config.xml連結到指定的ActionForward,傳到Struts的核心類ActionServlet,ActionServlet使用 ActionForward提供的路徑,將控制傳遞給下一個步驟。ActionForward控制接下來程式的走向。

基本介紹

  • 中文名:ActionForward
  • 基於Struts
  • 通過:Struts的配置檔案
  • 屬性:redirect
簡介,屬性,舉例,

簡介

ActionForward是 Struts1的核心類之一,其基類僅有4個屬性:name / path / redirect / classname。在基於Struts1的Web應用程式開發過程中,Action操作完畢後程式會通過Struts1的配置檔案struts- config.xml連結到指定的ActionForward,傳到Struts1的核心類ActionServlet,ActionServlet使用 ActionForward提供的路徑,將控制傳遞給下一個步驟。ActionForward控制接下來程式的走向。ActionForward代表一個套用的URI,它包括路徑和參數,例如:path=“/modify.do?method=edit&id=10”
ActionForward的參數除了在struts-config.xml和頁面中設定外,還可以通過在Action類中添加參數,或重新在Action中創建一個ActionForward。

屬性

在 ActionForward中有一個重要的屬性redirect,當redirect=false時,將保存存儲在http請求和請求上下文中的所有內容,僅在同一個套用中可用。當redirect=true時,Web客戶端進行一次新的http請求,請求的資源可以在同一個套用中,也可以不在,原來的請求參數不再保存,原來的請求上下文也被清除,新的http請求僅包含ActionForward的path屬性里所包含的參數。如果在同一個套用中,用戶會話的上下文會被維護。
ActionForward分為全局轉發和局部轉發,Action的Mapping對象的findForward方法首先會檢查局部轉發列表,查找失敗就會到全局轉發列表中查找。書寫格式中,我們一般將全局變數定義為String常數,避免誤解,使得轉發列表結構清晰易讀。
在項目開發過程中經常碰到一種情況,當頁面已經改變了,瀏覽器中的地址如/modify.do或/modify.jsp卻沒有變化,當時沒有考慮這么細,雖然存在疑問,但沒有影響到程式功能的實現,因此忽略過去了,今天查找了一些資料才弄清楚。客戶端瀏覽器顯示的是瀏覽器最後被給定的URL,當URL被提交後,在某個組件返回一個回響給瀏覽器之前,Web套用可能已經轉發請求多次,而這些過程都發生在伺服器端,客戶端瀏覽器並不知道有什麼變化。當一個 http回響被返回時,它並沒有包含地址欄的值,所以瀏覽器僅僅顯示其用來作為初始請求的地址。通過使用redirect可以改變瀏覽器地址的顯示,因為這樣可以向瀏覽器提交一個新的請求,但付出的代價是數據不能通過請求上下文傳遞到頁面,這也是使用forward和redirect的差異之一。
使用forward可以定義URL的邏輯名稱,然後使用邏輯名稱來套用URL。這樣,在更新URL時,不必更新URL的每個引用,只須在struts-config.xml中更改一次這個引用。

舉例

可以定義兩類forward:全局forward和針對具體請求的forward。全局forward在整個應用程式中都可以使用,針對具體請求的forward只可以在他各自的請求action中使用。
全局forward的定義示例:
<forward
name="for"
path="/forward/for.jsp"
redirect="true"
contextRelative="true" />
針對具體請求的局部forward的定義通過在action標記中嵌套forward標記來定義:
<action-mappings >
<action path="/forac" type="com.yourcompany.struts.action.ForacAction">
<forward name="success" path="/for.jsp" />
</action>
</action-mappings>

相關詞條

熱門詞條

聯絡我們