把
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...