Action 的 namespace

namespace 屬性是一個可選屬性,該屬性定義該包的命名空間。

namespace決定了action 的訪問路徑,默認爲 "" ,可以接收所有的action

Struts2 提供了命名空間的功能,主要是爲了處理同一個 Web 應用中包含同名的 Action 的情況,以命名空間的方式來管理Action,可以實現同一個命名空間裏不能有同名的 Action,不同的命名空間裏可以有同名的Action.

Struts2 不支持爲單獨的Action 設置命名空間,如果在配置 package 時沒有指定 namespace 屬性,則該包下的所有 Action 處於默認的包空間下。

例子:

 

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd"> 
  5.  
  6. <struts> 
  7.     <constant name="struts.i18n.encoding" value="GBK" /> 
  8.     <constant name="struts.devMode" value="true" /> 
  9.  
  10.     <!-- 使用默認命名空間 --> 
  11.     <package name="one" extends="struts-default"> 
  12.         <!-- 相同的 action --> 
  13.         <action name="index"> 
  14.             <result name="error">/error.jsp</result> 
  15.             <result name="success">/Hello.jsp</result> 
  16.         </action> 
  17.     </package> 
  18.     <!-- 使用指定命名空間 --> 
  19.     <package name="two" extends="struts-default" namespace="/two"> 
  20.         <!-- 相同的 action --> 
  21.         <action name="index"> 
  22.             <result name="error">/error.jsp</result> 
  23.             <result name="success">/World.jsp</result> 
  24.         </action> 
  25.     </package> 
  26. </struts> 

從上面的 struts.xml 配置文件中,配置了兩個包,one 和 two ,配置one包時,設定命名空間爲默認的命名空間。配置 two包時,設定了該包的命名空間爲 /two

如果需要訪問two包中的 index.action 則需要以下方式獲取:

8088爲端口號,test爲項目名稱,two則是指定的命名空間。

http://localhost:8088/test/two/index.action

注意的是命名空間只有一個級別。比如 請求   /username/helloword/index.action ,系統將會先在 /username/helloword 的命名空間下查找名爲 index 的 action ,如果在該命名空間內找到名爲 index的action ,則由該 Action 處理用戶請求,如果在該命名空間內沒有找到名爲 index的 action,系統將直接進入默認的命名空間中查找名爲 index的 action,  而不會在  /username  或 /helloword 的命名空間下查找名爲 index 的 action

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