namespace 屬性是一個可選屬性,該屬性定義該包的命名空間。
namespace決定了action 的訪問路徑,默認爲 "" ,可以接收所有的action
Struts2 提供了命名空間的功能,主要是爲了處理同一個 Web 應用中包含同名的 Action 的情況,以命名空間的方式來管理Action,可以實現同一個命名空間裏不能有同名的 Action,不同的命名空間裏可以有同名的Action.
Struts2 不支持爲單獨的Action 設置命名空間,如果在配置 package 時沒有指定 namespace 屬性,則該包下的所有 Action 處於默認的包空間下。
例子:
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <constant name="struts.i18n.encoding" value="GBK" />
- <constant name="struts.devMode" value="true" />
- <!-- 使用默認命名空間 -->
- <package name="one" extends="struts-default">
- <!-- 相同的 action -->
- <action name="index">
- <result name="error">/error.jsp</result>
- <result name="success">/Hello.jsp</result>
- </action>
- </package>
- <!-- 使用指定命名空間 -->
- <package name="two" extends="struts-default" namespace="/two">
- <!-- 相同的 action -->
- <action name="index">
- <result name="error">/error.jsp</result>
- <result name="success">/World.jsp</result>
- </action>
- </package>
- </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