Namespace决定了action的访问路径
1,如果Namespace不写(默认为""(空))或者定义为""或者"/",表示可以接受以下路径的action。
<package name="default1" extends="struts-default">
<action name="namespace" class="action.NamespaceAction">
<result name="success">/success.jsp</result>
</action>
</package>
public class NamespaceAction {
public String execute() {
System.out.println("this is NamespaceAction");
return "success";
}
}
下面路径都能访问
2,如果Namespace定义为"/path1",访问路径为/action名称、/path1/action名称(Struts2中.action可以省略)
<package name="default1" namespace="/aaa" extends="struts-default">
<action name="namespace" class="action.NamespaceAction">
<result name="success">/success.jsp</result>
</action>
</package>
异常
3,如果Namespace路径嵌套很多
如:path1/path2/path3与" "
<package name="default" namespace="" extends="struts-default">
<action name="namespace" class="action.NamespaceAction">
<result name="success">/success.jsp</result>
</action>
</package>
<package name="default1" namespace="/aaa/bbb/ccc" extends="struts-default">
<action name="namespace" class="action.Namespace1Action">
<result name="success">/success1.jsp</result>
</action>
</package>
success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
this is NamespceAction,namespace=""
</body>
</html>
success1.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
this is Namespce1Action,namespace="/aaa/bbb/ccc"
</body>
</html>
NamespaceAction.java
public class NamespaceAction {
public String execute() {
return "success";
}
}
NamespaceAction1.java
public class Namespace1Action {
public String execute() {
return "success";
}
}
如:/path1/path2 与/path3
<package name="default" namespace="/bbb/ccc" extends="struts-default">
<action name="namespace" class="action.NamespaceAction">
<result name="success">/success.jsp</result>
</action>
</package>
<package name="default1" namespace="/aaa" extends="struts-default">
<action name="namespace" class="action.Namespace1Action">
<result name="success">/success1.jsp</result>
</action>
</package>
如:/path1/path2 与 /path1
<package name="default" namespace="/aaa/bbb" extends="struts-default">
<action name="namespace" class="action.NamespaceAction">
<result name="success">/success.jsp</result>
</action>
</package>
<package name="default1" namespace="/aaa" extends="struts-default">
<action name="namespace" class="action.Namespace1Action">
<result name="success">/success1.jsp</result>
</action>
</package>
总结:首先匹配全路径,如果没有,就先匹配/path1/path2(减少最外一个),
如果还是没有符合/path1/path2,继续匹配/path1,
如果还是没有符合/path1,报错,
如果路径匹配就会进入这个包package寻找action名匹配的,没有找到同上继续查找