struts2 package 屬性說明

http://blog.sina.com.cn/s/blog_76b2c48101019rf7.html

package節點是整個配置的核心部分。每個package,從語義上講,其實代表了每一個獨立的模塊。在這個模塊中,你可以定義隸屬於這個模塊的行爲方式,而與其他的模塊沒有關係。所以,每個package都有獨立的interceptor、result-type和action的定義,絕大多數的Runtime配置定義都是通過package節點實現的。接下來我們就來詳細討論一下package中的屬性和子節點。

1. name

name屬性爲每個package設置一個唯一的標識,這個標識在所有的package定義中不能重複。

2. abstract

標識這個package的定義是一個抽象定義,也就是允許他僅包含聲明式的定義,而不需要在package定義中包含action的定義。

3. extends

通過使用extends,你可以指定本package繼承另外一個package的所有的配置。當某個package繼承了另外一個package的所有配置,那麼你就無需對父package中已經聲明過的配置定義做再次的定義。

同時,如果重複定義父package中已聲明過的配置定義,那麼這些重複定義聲明將覆蓋父package中的相關定義。

4. namespace

namespace的作用:對於action配置進行邏輯劃分。

如果我們不爲package節點指定namespace,Struts2默認使用一個空字符串作爲默認的namespace。當然,也可以使用"/"等字符串來表示namespace。

定義package命名空間 該命名空間影響到url的地址,例如此命名空間爲/test那麼訪問是的地址爲http://localhost:8080/struts2/test/XX.action。

Struts2在根據URL進行尋址的時候,使用以下的步驟:

1) 根據URL進行Namespace和ActionName的計算

2) 根據計算的得到的Namespace和ActionName查找package節點中相應配置

3) 如果查找失敗,則查找Namespace爲空,ActionName爲整個URL的配置


例子:

假如我有以下的配置段落

<struts>
<package name="p1" extends="struts-default">
   <action name="login" class="com.example.action.Login">
    <result>/success.jsp</result>
   </action>

<action name="login1" class="com.example.action.Login">
    <result>/success.jsp</result>
   </action>

</package>

<package name="p2" extends="struts-default" namespace="/testNameSpace">
   <action name="login" class="com.example.action.Login">
    <result>/success.jsp</result>
   </action>
</package>
</struts>

 

說明:

a、 包p1沒有定義namespace,說明p1用的是默認空間""

現在有下面的請求:

1、/工程名/login.action

------這個請求對應p1包下的action name=login

2、/工程名/testNameSpace/login.action

-----這個請求對應p2包下的action name=login

3、/工程名/testNameSpace/login1.action

----這個請求是請求p2包下的信息的,如果struts在檢索了p2包下的所有action後沒有檢索到當前請求的login1,這時struts會檢索前一個命名空間,這裏是默認空間下是否有當前請求,檢查發現存在login1就得到當前檢索

這裏我有個個人的建議:

無論你的namespace配置或者沒配置,也無論配置啥樣,你在寫跳轉的url的時候請你也把

‘/工程名/’帶上,寫成這樣:/工程名/命名空間1/命名空間2/actionName.action這樣寫能保證路徑的正確性,當然如果你在寫跳轉的時候不發暈,可以視你的配置情況加或者不加這個!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章