struts2 包和命名空間理解

2021-08-31 10:06:25 字數 1319 閱讀 2703

今天在使用dmi做乙個測試的時候,用到了預設命名空間,出現一點問題,在此記錄並複習一下相關知識:

struts 2 使用包來組織action,因此,在action定義放在包下完成,定義action 通過使用package下的action節點完成。 

配置package元素時必須指定name屬性,這個屬性是引用該包的唯一標識。除此之外,還可以指定乙個可選的extends屬性,extends屬性值必須是另乙個包的name屬性。指定extends屬性表示讓該包繼承另乙個包。子包可以從乙個或多個父包中整合到***、***棧、action等配置。

helloworld

/example

這個名為default的包繼承了struts-default的包,這個包在struts2-core-2.1.8.jar/struts-default.xml中定義。

struts-default.xml是struts2框架預設載入的配置檔案。它定義struts2一些核心的bean和***。

定義package元素時還可以指定namespace屬性,該屬性是乙個可選屬性,定義了包的命名空間,不指定預設為namespace=""。

使用 namespace 可以方便於按不同目的規劃對應用的訪問規則。比如不同 namespace 下配置了不同的***就可以實現許可權的控制,如 "/secure" 下已登陸使用者才能訪問,"/public" 下可公開訪問的。

配置了 namespace 直接就是反應在訪問 url 上,例如 namespace="/secure"  name="test" 的 action

訪問它的 url 就是 http://ip:port/context/secure/test.action ,那如果在 namespace "/secure" 下沒有 test action 會出現什麼情況呢?struts 還會嘗試在預設 namespace,即 "" 下找 名為test的action。

本來想針對namespace做乙個測試,如下:

/index.jsp

/login.jsp

這裡名為default的包中的action name屬性 ,和example包中的相同,報出了:找不到action或result的錯誤,

所以namespace=""的包中的action,不要和其他包的action 元素下的name 屬性重名。

從namespace=""設計的本意來看,指定action的名字與其他包中的名字相同也沒有任何意義。

注意: struts2的form標籤中namespace和action屬性要分開寫,不要省略namespace,直接寫成action="/namespace/action"的形式。

struts2的包和命名空間

struts2提供了命名空間的功能,主要是為了處理同乙個web應用中包含同名action的情形。struts2以命名空間的方式來管理action,同乙個命名空間裡不能有同名的action,不同的命名空間裡可以有同名的action.struts2不支援為單獨的action設定命名空間,而是通過name...

struts2 命名空間

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

struts2 之命名空間

把 namespace 單獨拉出來講一方面是因為它實際上不是乙個 element 而只是乙個 attribute 前面已經說了,它是 package 的乙個attribute 另外一方面是因為這個屬性是我接觸 struts2 的時候第乙個研究的,印象很深,鑑於這兩個原因我決定單獨說一下它。在stru...