struts2 之命名空間

2021-09-02 08:49:10 字數 3461 閱讀 2435

namespace

單獨拉出來講一方面是因為它實際上不是乙個

element

,而只是乙個

attribute

,前面已經說了,它是

package

的乙個attribute

;另外一方面是因為這個屬性是我接觸

struts2

的時候第乙個研究的,印象很深,鑑於這兩個原因我決定單獨說一下它。

在struts1

中是沒有命名空間這個概念的,通過命名空間我們可以將所有的

action

配置劃分為乙個個邏輯單元,每個單元都有它自己的標識字首。命名控制項可以避免

action

命名的衝突。每個命名空間下有可以有乙個叫做

」help」

的action

,並且有著各自不同的實現,當然在同乙個命名空間下最好是不要出現兩個名字一樣的

action

。當命名空間的字首出現在瀏覽器的

uri中時,標籤會意識到命名空間,因此我們不必將命名空間巢狀在表單和鏈結中。

預設的命名空間是空字串

」」,也就是不設定

namespace

屬性時候的命名空間。我們在匹配乙個

action

的時候,先到它指定的命名空間中去找,如果沒有再到這個預設的命名空間中去找。

struts2

還支援根命名空間

(「/」)

,當乙個

request

直接請求

context path

下面的資源時,

struts2

會首先到跟命名空間下去尋找匹配的

action

,例如請求是

,那麼我們首先會去

」/」命名空間下去尋找這個

action

,下面給給出了乙個

namespace

的樣本:

"default"

>

"foo"

class="mypackage.******action>

"success"

type=

"dispatcher"

>

greeting.jsp

"bar"

class=

"mypackage.******action"

>

"success"

type=

"dispatcher"

>

bar1.jsp

"mypackage1"

namespace=

"/">

"moo"

class=

"mypackage.******action"

>

"success"

type=

"dispatcher"

>

moo.jsp

"mypackage2"

namespace=

"/barspace"

>

"bar"

class=

"mypackage.******action"

>

"success"

type=

"dispatcher"

>

bar2.jsp

關於如何從

uri對映到乙個

action

中我做了一些測試,發現可以遵循如下的一條規則:

1.獲得請求路徑的

uri,例如

url是:

2.首先尋找

namespace

為/path1/path2/path3

的package

,如果存在這個

package

,則在 這個

package

中尋找名字為

test

的action

,若找到則執行,否則報錯;如果不存在這

個package

則轉步驟3;

3.尋找

namespace

為/path1/path2

的package

,如果存在這個

package

,則在這個

package  

中尋找名字為

test

的action

,若找到則執行,否則報錯;如果不存在這個

package

則轉步驟4;

4.尋找

namespace

為/path1

的package

,如果存在這個

package

,則在這個

package

中尋找名字為

test

的action

,若找到則執行,否則報錯;如果仍然不存在這個

package,就去

namaspace

為空字串的

package

下面去找名字為

test

的action

,如果還是找不

到,頁面提示找不到

action

。這裡有幾點特殊的情況要說明一下,如下所示:

1.如果匹配到了多個

package

,比如上述流程中有多個

namespace

為/path1/path2/path3

的package

,此時按照

package

出現的順序從後向前的順序查詢

action

,直至找完為止。

2.如果在乙個

package

中有多個

name

屬性相同的

action

,那麼執行追有乙個

action

。比如上述流程中,有乙個

namespace

為/path1/path2/path3

的package

,它裡面含有多個名字為

test

的action

,那麼選擇最後乙個執行。

上面這幾點是我通過多次測試總結出來的,不知道是否概括到了所有可能的情況,紕漏之處,還請指正。

struts2 命名空間

struts 2的命名空間是乙個新的概念,用來處理多個模組。由下式給出乙個命名空間的每個模組。此外,它還可以用來避免位於不同的模組相同的操作名稱之間的衝突。看下面的一張圖來了解乙個url匹配struts 2的動作命名空間。讓我們通過乙個struts2的命名空間配置的例子來了解它是如何與url和資料夾...

道聽途說Struts2之2 命名空間補充

上課的時候突然想起來了,早晨寫的丟了點東西,現在補充上。如果我們在寫程式的時候,省略了 namespace 預設的匹配所有的 action 如果有類似下面的寫法 default extends struts default hello hello.jsp 將匹配所有 action 為hello 的 ...

struts2中命名空間問題

最近因為乙個專案演練的需要,需要學習j2ee這一體系。採用的是struts2,發現好不順利,第一天弄struts2就半天調不過去,最後發現是自己引入包之後沒有重新部署,直接重啟伺服器造成包根本沒有被引入到webroot目錄下web inf的lib目錄中,以後要注意引入包之後不但需要重啟伺服器tomc...