天天看点

action之间的跳转

一、当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上下文就不可用了。