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