首先介绍一下namespace 
     Struts2的配置文件struts.xml当中有一个元素package ,这个元素有一个属性是 namespace。这个属性的作用是什么呢?  
1. 确定该包内的action URL路径 
例如:Java代码 
<package name="rodom"  namespace="/templates" extends="struts-default">   
         <action name="testAction" class="test.web.TestAction">   
            <result>test.jsp</result>   
         </action>   
</package>  <package name="rodom"  namespace="/templates" extends="struts-default">
         <action name="testAction" class="test.web.TestAction">
   <result>test.jsp</result>
         </action>
</package>假设应用contextpath名字为tianxia,应用服务器端口号为8080若在浏览器中访问testAction此时URL的路径为 http://localhost:8080/tianxia/ templates/ testAction.action 在配置namespace时注意的是在templates名字前加“/” 
2. 确定返回jsp或ftl等文件的物理路径 
如上面的配置test.jsp需放在templates目录下struts才能够找到 
若想访问应用根目录下的文件例如index.jsp则如下配置: 
<result>/index.jsp</result> 
接下来讨论一下<result type=”chain”>的配置 
当action结果调用另一个action时result的类型设置为chain,则表示被调用的action会保持调用action的属性值。 
Type=“chain”时 result标签的参数可以有下面4个 
       • actionName 
       • namespace 
       • method 
       • skipActions 
举个例子: 
配置如下:Java代码 
<action name="fm" class="test.web.SimpleAction">   
            <result type="chain">   
                <param name="actionName">chaintest</param>   
                <param name="method">look</param>   
            </result>   
</action>   
<action name="chaintest" class="test.web.ChainAction">   
        <result type="freeer">test.ftl</result>   
</action>  <action name="fm" class="test.web.SimpleAction">
   <result type="chain">
   <param name="actionName">chaintest</param>
   <param name="method">look</param>
   </result>
</action>
<action name="chaintest" class="test.web.ChainAction">
   <result type="freeer">test.ftl</result>
</action> Java代码 
public class SimpleAction extends ActionSupport{   
    private String message;   
public String getMessage() {   
        return message;   
    }   
    public void setMessage(String message) {   
        this.message = message;   
    }   
public String execute()   
    {   
        message = "hello ";   
    }   
}  public class SimpleAction extends ActionSupport{
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String execute()
{
message = "hello ";
}
} Java代码 
public class ChainAction extends ActionSupport{   
    private String message;   
public String getMessage() {   
        return message;   
    }   
    public void setMessage(String message) {   
        this.message = message;   
    }   
public String execute()   
    {   
        message += " tianxia!";   
        System.out.println(message);   
    }   
}  public class ChainAction extends ActionSupport{
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String execute()
{
message += " tianxia!";
System.out.println(message);
}
}
当调用”fm”这个action返回SUCCESS时fm会调用test.web.ChainAction类的look()方法 
控制台上会打印 hello tianxia!这说明SimpleAction的message被保存到ChainAction。 此处需要注意的是, 
1.一个Action调用其它Action用chain的方式,调用者中的集合类中的元素依然会保存到被调用者执行。 
2. <result type="chain"> chaintest! look</result>不能访问到test.web.ChainAction的look方法