
2006年8月30日
path屬性
ActionMapping URI,或者path,對用戶來說就象web server上的一個文件。但實(shí)際上它并不
代表一個文件。它是一個對ActionMapping的虛擬引用。
因?yàn)樗┞督o其它系統(tǒng), path 并不真正是個邏輯名稱,就象那些我們用于ActionForward
中的一樣。 path 可以包括反斜杠和擴(kuò)展名--如果它引用一個文件系統(tǒng)——但它們都只是
一個單一名稱的一部分。
ActionMapping自身是一個“平面的” 名稱空間,完全沒有內(nèi)部層次關(guān)系。它僅僅是正好使用
了一個和層次性文件系統(tǒng)中一樣的名稱而已。
當(dāng)然, 這對處理ActionMapping仍然是有幫助的,就象它們是一個層次關(guān)系或者在同一個"文
件夾"下的相關(guān)命令組的一部分。唯一的限制是名稱必須匹配于在應(yīng)用部署描述文件中為
ActionServlet指定的樣式。這通常是/do/*或者 *.do,但是其它相似的樣式也可以使用。如果
你在一個團(tuán)隊(duì)環(huán)境中工作,不同的團(tuán)隊(duì)可能有不同的 ActionMapping 名稱空間使用。某些
人可能工作于/customer ActionMapping, 而另一些可能工作于/vendor ActionMapping。
這也可能和各個團(tuán)隊(duì)使用的Java 包的層次相關(guān)。因?yàn)?ActionMapping URI是邏輯的構(gòu)造,
所以你可以用它來以各種方式組織來適合你的項(xiàng)目。
forward 屬性
當(dāng)指定了forward 屬性時(shí),servlet將不會把請求傳遞給Action類,而是調(diào)用
RequestDispatcher.forward。因?yàn)椴僮鳑]有使用Action 類, 它也可以被用來進(jìn)行
Struts 和其它資源之間的集成,或者用來構(gòu)建系統(tǒng)原型。forward, include, 以及 type
屬性是互斥的
include 屬性
當(dāng)指定了include 屬性時(shí), servlet將不會把請求傳遞給Action 類而是調(diào)用
RequedtDispatcher.include方法。因?yàn)椴僮鳑]有使用Action 類, 它也可以被用來機(jī)械
進(jìn)行Struts 和其它組件之間的集成。forward, include, 以及 type 屬性是互斥的。
type 屬性
大部分 mapping都會指定一個 Action 類類型,而不是一個forward 或者 include。Action 類
可以被多個mapping使用。 Mapping可以指定form bean,參數(shù),forward,或者exceptions屬
性。forward, include, 以及 type 屬性是互斥的。
classname屬性
如果被指定,classname 是應(yīng)該用于此對象的ActionMapping子類的全限定Java類名稱。這
就允許你使用你自己的ActionMapping 子類來引入特定的方法和屬性。參見7.4節(jié)。
name屬性
如果在Struts 配置文件中配置了相應(yīng)的formbean段的話,這個屬性指定了form bean的
邏輯名稱。缺省情況下,這也是將form bean 放入請求或者會話上下文時(shí)使用的名稱。使
用該類的attribute 屬性來指定不同的屬性(Attribute)關(guān)鍵字。
roles屬性
這個屬性是一個逗號分隔的,允許訪問該ActionMapping 對象的安全角色稱的列表。缺省情
況下,與基于容器的安全機(jī)制所使用的同一個系統(tǒng)將用于這里給定的角色列表。這意味著你
可以通過在部署描述符中指定特定的URL模板而使用基于action的安全,或者兩者都使用。
安全檢查由請求處理器(org.apache.struts.action.RequestProcessor)的
processRoles方法處理。通過子類化請求處理器,你也可以在基于應(yīng)用的安全下使用
roles 屬性。
scope屬性
ActionForm bean 可以存儲在當(dāng)前的請求或會話范圍中(這樣它可以服務(wù)于另外的請求)。
雖然大部分開發(fā)人員使用請求范圍來存儲ActionForm, 框架的缺省設(shè)置卻是會話范圍
validate屬性
ActionForm 生命周期內(nèi)的一個重要步驟是在其數(shù)據(jù)提供給業(yè)務(wù)層之前需要進(jìn)行校驗(yàn)。當(dāng)
mapping 的validate 屬性設(shè)置為true時(shí),ActionServlet將調(diào)用ActionForm的 validate 方
法。如果 validate 返回false,請求將被轉(zhuǎn)發(fā)到input 屬性指定的資源。
經(jīng)常,開發(fā)人員將為每個數(shù)據(jù)輸入表單創(chuàng)建兩個mapping。一個mapping 將使 validate 設(shè)
置為 false, 所以你可以創(chuàng)建一個空的表單。另一個則設(shè)置validate 為true,用來提交完整
的表單。
input屬性
當(dāng)validate被設(shè)置為true時(shí),重要的是需要提供一個有效的輸入路徑。這也是當(dāng)ActionForm
validate 方法返回 false時(shí),控制應(yīng)該被傳遞到的地方。通常這是一個表現(xiàn)頁面。有時(shí)也
可以是另外一個用來產(chǎn)生頁面所需要的數(shù)據(jù)對象的Action path (其 validate 必須設(shè)置為
false)。
輸入轉(zhuǎn)發(fā)
在Struts 1.0中,ActionMapping的 input 屬性通常是一個字面的URI。在Struts 1.1中,它也
可以是一個ActionForward 的名稱。ActionForward 被獲取之后,其path 屬性被用作input
屬性。這也可以是一個全局或者局部轉(zhuǎn)發(fā)。
這兒為了使用 ActionForward而不是字面的path, 可以設(shè)置這個模塊的
元
素的inputForward 屬性為 true:
parameter屬性
這個普通的paramenter屬性允許Action能夠在運(yùn)行時(shí)被配置。許多標(biāo)準(zhǔn)的Struts Action都使用
這個屬性,標(biāo)準(zhǔn)的Scaffold Action也經(jīng)常使用它。Parameter屬性可以包含URI, 方法名稱,類
名稱,或者其它一些Action在運(yùn)行時(shí)可能需要的信息。這種靈活性允許一些Action履行雙倍
或者三倍的職責(zé),削減應(yīng)用所需的不同的類的數(shù)量。
在一個Action 類中,parameter屬性是從傳遞到perform的mapping中取得的:
parameter = mapping.getparameter();
attribute屬性
不時(shí)地,你可能需要同時(shí)在同一個上下文中保存同一個ActionForm 的在兩份拷貝。這在
ActionForm被存于會話上下文中作為工作流的一部分時(shí),經(jīng)常發(fā)生這種情況。為了避免它們
之間的名稱沖突,你可以使用 attribute 屬性來給一個 ActionForm bean 一個不同的名
稱。另一個方法是在配置中定義另一個ActionForm bean,使用相同的類型但使用不同的名稱。
prefix和suffix屬性
與 attribute屬性一樣, prefix 和suffix 屬性可用來避免應(yīng)用系統(tǒng)中的名稱沖突。如
果指定了這個屬性,這就表明允許在屬性名稱前面加上前綴或者后綴,形成它們從請求中被
組裝時(shí)的一個別名。
如果指定了前綴 this,那么在ActionForm組裝時(shí):
thisName=McClanahan
相當(dāng)于
name=McClanahan
而它們都可以通過調(diào)用
getName("McClanahan");
取得。這并不影響屬性如何被標(biāo)簽擴(kuò)展輸出。它只影響到自動組裝機(jī)制如何從請求中感知它們
unknown ActionMapping
在Web上沖浪時(shí),大都遇到過討厭的404— pages not found信息。大部分web server 都提供一些特殊的特征來處理對未知頁面的請求,所以 webmaster 可以將用戶引導(dǎo)到正確的方向上。
Struts 提供了一個類似的服務(wù)來處理404錯誤—即unknown ActionMapping。
在Struts 配置文件中,你可以指定一個ActionMapping 來接收所有與其它ActionMapping不相
匹配的請求:
如果沒有設(shè)置它,沒有匹配對的ActionMapping請求就會拋出:
400 Invalid path /notHere was Requested
請注意通過對ActionMapping請求, 我們的意思是URI首先必須匹配為servlet指定的前綴或者
后綴 (通常是 /do/* 或者 *.do)。對于其它樣式的請求, 無論好壞,都將被容器中的其它
servlet處理:
/do/notHere (goes to the unknown ActionMapping)
/notHere.txt(goes to the Container)
比較多,不過常用的也就是path,type,scope,name,parameter如果要在form里做驗(yàn)證要寫input,validate.
posted @
2006-08-30 17:38 今夕何夕 閱讀(962) |
評論 (1) |
編輯 收藏