Struts--ActionMapping简介

来源:互联网 发布:win8.1优化设置 编辑:程序博客网 时间:2024/04/29 03:09
在Struts 1.1之後,很多的請求分配職責都落入了RequestProcessor的手上,ActionServlet則專責於組態配置及應用程式模組的設定。

RequestProcessor採取 Command 模式,根據客戶端的請求呼叫Action物件,其分配的依據是客戶端請求的URI及Action物件的對應,這些都設定在struts- config.xml的<action-mappings>標籤中。

<action-mappings>用來描述一組ActionMapping物件,當中的每一個<action> 標籤都對應一個ActionMapping物件,當客戶端發出請求至RequestProcessor時,請求的URI對應於< action>標籤中設定的path屬性,而要呼叫的Action物件則是type屬性所設定的物件,RequestProcessor會將請求的執行工作交給該Action物件來執行。

舉個例子來說,如果<action-mappings>設定如下的話:

...
 <action-mappings>
    <action
        path="/hello"
        type="onlyfun.caterpillar.HelloAction">
        ....
    </action>

    <action
        path="/login"
        type="onlyfun.caterpillar.LoginAction">
        ....
    </action>
 </action-mappings>
 ...


則當請求的URL是http://localhost:8080/strutsapp/hello.do時, RequestProcessor會使用/hello.do來確認對應的ActionMapping物件(實際上即找出path設定為/hello的 <action>標籤),該ActionMapping物件告知RequestProcessor要使用 onlyfun.caterpillar.HelloAction,而後RequestProcessor會將呼叫HelloAction的 execute()方法,並將ActionMapping物件當作參數傳遞給它。

RequestProcessor實際上將工作交給Action物件,Action物件在第一次被呼叫時產生,之後一直使用它。 Action物件的運作必須提供一些參數來描述工作的細節,諸如使用哪一個ActionForm、forward對象的查找、錯誤發生時的頁面對象等等, Struts將這些資訊包裝在ActionMapping中,並作為參數傳送給Action物件,以使得Action在需要相關的資訊時可以從 ActionMapping中取得。

如果客戶端請求了struts-config.xml中沒有定義的資源,Struts會丟出 404 Invalid path 的訊息,您可以撰寫匿名的ActionMapping來提供自己的錯誤訊息:

...
 <action>
    name="error"
    unknown="true"
    forward="/WEB-INF/pages/error.jsp"/>
 ...


如果RequestProcessor遇到沒有定義的Action請求,則會交由匿名的ActionMapping來處理。

在<action>標籤中會使用<forward>標籤,用於查找與指定Action物件完成之後,要轉發請求回應的去向,您使用ActionMapping的findForward()方法來查找對應的forward對象,另外,您也可以提供一個< global-forward>設定,如果ActionMapping的findForward()方法找不到指定的forward對象,則會查找 <global-forward>所設定的對象,一個設定例子如下:

struts-config.xml

---------------------------------------------------------------------------------------------
... 
<struts-config>    

<global-forwards>        
<forward  
 name="welcome"            
 path="/welcome.do"/>    
</global-forwards>   

<action-mappings>       
<action            
 path="/welcome
 type="onlyfun.caterpillar.WelcomeAction">
 <forward
 name="welcomeUser"                 
 path="/WEB-INF/pages/welcome.jsp"/>         
</action>       
<action            
 path="/hello"             
 type="onlyfun.caterpillar.HelloAction">             
 <forward                
  name="helloUser"
  path="/WEB-INF/pages/hello.jsp"/>         
</action>    
<action-mappings>
</struts-config>
...
--------------------------------------------------------------------------------------------
<global-forward>提供一個全局可查找的forward對象,在Struts的組態中,可以為每一個< action>標籤指定forward對象,如果在<action>中查找不到,就會至<global- forward>中查找。對於一些共同使用的forward對象,您可以集中於<global-forward>中管理。

在Struts中,ActionMapping繼承自ActionConfig,大部份的屬性定義實際上都已經在ActionConfig 中完成,在將來ActionMapping有可能會被AutoConfig所取代,不過在目前ActionMapping仍舊存在,根據線上API的說明,存在的事實基於它仍是現存應用程式所使用到的類別。


 
原创粉丝点击