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
转载于:https://blog.51cto.com/mengli/1107827