Struts2學習筆記二

接着上次的繼續......

 

4.詳解struts.xml文件

 (1). Bean配置

       在配置Struts2的大部分核心組件時,會用到bean元素,其實Strus2中的bean元素與Spring中的bean元素無論從屬性還是功能上都差別不大,即是方便地擴展框架的核心組件,以下是bean元素的屬性:

l         class<必須> 指定Bean實例的實現類;

l         type<可選> 指定Bean實例實現的Struts2規範,在Struts2中該屬性的值通常是一個Struts2接口;如需要將Bean實例用爲Struts2組件來使用,則應該指定該屬性值;

l         name<可選> 指定Bean實例的名字,對於有相同type類型的多個Bean,它們的名字不能重複;

l         scope<可選> 指定Bean實例的作用域,屬性值只能是defaultsingletonrequestsessionthread之一;

l         static<可選> 指定Bean是否使用靜態方式注入,通常,當指定了type屬性時,該屬性不應該指定爲true

l         optional<可選> 指定該Bean是否是一個可選Bean

 

 (2). 常量配置

       關於常量的配置我已經在上面已經講述過了,下面是幾點補充:

       通常在struts.xml文件中定義Struts2屬性,而不是在struts.properties文件中。

       Struts2框架按如下順序加載Struts2常量:

              struts-default.xml:保存於struts2-core-2.0.6.jar中;

              struts-plugin.xml:保存於struts2-xxx-2.0.6.jar中;

              struts.xml

              struts.properties

              web.xml

      

       下面給出在web.xml中配置常量的代碼:

       <filter>

        <filter-name>struts2</filter-name>

        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

              <!—配置常量 -- >

              <init-param>

                     <param-name>struts.custom.i18n.resource</param-name>

                     <param-value>ApplicationResource</param-value>

              </init-param>

    </filter>

 

    <filter-mapping>

        <filter-name>struts2</filter-name>

        <url-pattern>/*</url-pattern>

</filter-mapping>

       居然在web.xml中也能配置常量,但並不推薦這樣做,這樣降低了web.xml文件的可讀性,通常推薦將Struts2常量配置在struts.xml文件中。

 

(3). 包配置

       Struts2使用包來管理Action和攔截器等,每個包中包含多個Action、多個攔截器等。

       struts.xml中使用package元素來定義包,它具有以下幾個屬性:

l         name  <必須> 配置包時必須指定其name屬性,用於標識該包;

l         extends<可選> 用於指定該包繼承其他包,繼承其他包意味着可以繼承其他包中的Action定義、攔截器定義等;

l         namespace<可選> 用於指定該包的命名空間;

l         abstract<可選> 用於指定該包是否是一個抽象包,在抽象包中不能包含Action定義;

 注意:Struts2的配置文件是從上到下處理的,所以父包應該在子包之前進行定義!

 

 (4). 命名空間配置

       Struts2用命名空間來區分重名的Action,在同一個命名空間裏不允許有同名的Action,不同的命名空間裏可以有同名的Action

    <package name=“yuzp” extends=“struts-default”>

              <action name=”Login” class=”com.demo.LoginAction”>

                     <result>/welcome.jsp</result>

              </action>

……

       </package>

      

    <package name=“yuzp2” extends=“struts-default” namespace=“/cfan”>

              <action name=”Login” class=”com.demo.LoginAction”>

                     <result>/welcome.jsp</result>

              </action>

……

       </package>

上面的配置片斷中,分別配置了兩個包,yuzpyuzp2,其中未指定namespace指定命名空間爲/cfan。如果沒有配置命名空間,則使用默認的命名空間:“”,如果要顯示的指定根命名空間,則使用namespace=”/”來配置。

如果配置了命名空間,那麼訪問它其中的ActionURL應該爲:命名空間 + ActionName,其實此處的命名空間有點類似於Struts1中的模塊,例示上述兩個Login Action的訪問URL爲:(Contextpath假設爲demo)

     URL

Http://localhost:8080/demo/Login.do

     URL

Http://localhost:8080/demo/cfan/Login.do

 

注意:配置有namespaceAction的搜索路徑

       配置namespace屬性後,當請求到來時,Struts2會首先在該命名空間內尋找所對應的Action,如果找到,則由該Action處理用戶請求;如果在該命名空間內沒有找到相對應的ActionStruts2不管命名空間有多少級,將直接進入默認的命名空間中尋找相應的Action(默認命名空間裏的Action可以處理任何模塊下的Action請求),如果在兩級命名空間中均不能尋找到相應的Action,則系統報錯。

發佈了35 篇原創文章 · 獲贊 0 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章