簡單之中也蘊涵著復雜性我們在本系列第一部分和第二部分創建研究一個簡單的Struts login應用程序時回避了許多這種復雜性因為那兩篇文章是給初學者的Struts入門讀物所以我們在應用程序中沒有充分運用Struts類庫但現在你已經做好准備學習更多的東西了讓我們先來看看真正的Struts程序員是如何運用ActionForward類的吧它代表的是控制指令所導向的一個目的資源
從一個servlet內部通過運用javaxservletRequestDispatcher類的forward方法你就可以將控制流程引導到一個目的資源在login應用程序的action類中該代碼形式如下
RequestDispatcher rd =
request
getRequestDispatcher(destination);
rd
forward(request
response);
其中destination就是到一個目的資源的路徑
但是在一個典型的Struts應用程序中你可以用ActionForward類作為替代運用這個類的好處就是你不再需要創建一個RequestDispatcher對象並調用它的forward方法了
你可以將ActionForward類用於一個Action類的execute方法中注意其中一個重載的execute方法有如下的定義它返回一個ActionForward對象
public ActionForward execute( ActionMapping mapping
ActionForm form
HttpServletRequest request
HttpServletResponse response)
throws Exception
因為當時我們還沒有講到ActionForward類所以在本系列的第一部分和第二部分中所有Action類的execute方法都只返回了空值現在在一個Action類的execute方法中你就可以用ActionForward類來代替下面這個RequestDispatcher對象實例了
RequestDispatcher rd =
request
getRequestDispatcher(destination);
rd
forward(request
response);
新的代碼變成return (new ActionForward(destination));
構建ActionForward對象
ActionForward類提供了下面五種構造器
public ActionForward()
public ActionForward(String path)
public ActionForward(String path
boolean
redirect)
public ActionForward(String name
String path
boolean redirect)
public ActionForward(String name
String path
boolean redirect
boolean contextRelative)
雖然這些構造器是不需要說明的但我們應該注意下面幾點在這些構造器中第二種可能是最常用的後四種構造器中的path參數表示的是到目的資源的路徑後三種構造器中的redirect布爾值表示的是是否執行了一個重定向(redirect)(缺省情況下這個值設置為false因為redirect比forward慢)最後第五個構造器中的contextRelative布爾值表示該路徑是否應該是contextrelative的而不是modulerelative的
同樣一個ActionForward實例也可以有一個邏輯名稱你可以用這個名稱來查找與一個特殊的ActionMapping對象相關的實例(參見本系列第四部分關於ActionMapping的講述
[] []
From:http://tw.wingwit.com/Article/program/Java/ky/201311/29018.html