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 則需要以下方式擷取: