一、当type为chain 时,说明是action链,运行完第一个action java文件接着会运行第二个action JAVA 文件,相当于forward(客户端的url不会改变).
<result name="noPass" type="chain">
<param
name="actionName">system/User_customerResult</param>
<param
name="namespace">/</param>
<param name="method
">login</param>
</result>
actionName (默认) -- 被调用的action的名字
namespace --
被调用的action的名称空间. 如果名称空间为空,这默认为当前名称空间
method --
用于指定目标action的另一个方法被调用. 如果空,默认为excute方法
chain处理完后转发到一个action,请求参数全部丢失,action处理结果不会丢失。
chain拦截器,处于chain链中的所有action共享一下值栈,每个action把值压入值栈,要用值时从值栈中取
二、当type为redirect-action时,说明会跳转到第二个action的url (客户端的url会改变)
redirect-action处理完后重定向到一个action,请求参数全部丢失,action处理结果也全部丢失。
重定向的调用者和被调用者使用各自的request and response对象,它们属于两个独立的访问请求和响应过程。
重定向需要两次请求能完成的工作,请求转发只要通过一次请求即可完成。这样一来我们也就明白了为什么请求不会造成数据丢失。
ActionName (默认) - 重定位到的action名
namespace - action的名称空间. 如果为null,则为当前名称空间
三、redirect
(1)可以重定向到一个页面,另一个action或一个网址。 Xml代码
1. <result name="success" type="redirect">aaa.jsp</result>
2. <result name="success" type="redirect">bbb.action</result>
3. <result name="success" type="redirect">www.baidu.com</result>
(2)实现方式:
查看doExecute方法,只有一个出口: response.sendRedirect(finalLocation);
sendRedirect是重定向,是重新产生一个HTTP请求到服务器,故重定向后其原来所在的action上下文就不可用了。