Struts2中转发和重定向的区别

结果类型中redirect和redirectAction的区别:

  • redirect是在处理完当前Action之后,重定向到另外一个实际的物理资源。

  • redirectAction也是重定向,但它重定向到的是另外一个Action,或者另外Action类中的方法。

    下面这个方法是重定向到index.jsp页面。

<result name="logout" type="redirect">/index.jsp</result>
  • 重定向本Action的query方法
<result name="" type="redirect">*Action!query.action</result>
  • 下面的例子是访问不同命名空间下的Action,执行其execute方法
<package name="test" extends="struts-default" namespace="/">  
    <action name="test" class="">  
        <result name="success" type="redirectAction">  
            <param name="actionName">test1</param>  
            <param name="namespace">/xx</param>  
        </result>  
    </action>  
</package>  
<package name="test1" extends="struts-default" namespace="/xx">  
    <action name="test1" class="*.Test1Action">  
        <result name="success" type="redirect">/test1Suc.jsp?name=${name}</result>  
    </action>  
</package>  
  • 只要是重定向,那么之前凡是保存在request里面的东西就全都消失了,因为重定向实际是发送第二个请求,故请求中的东西也就不会出现在第二个请求里面了,也就是说重定向是不共享request的东西,重定向后的页面中无法接收request里的东西。那么我们怎样传递参数那?
<action name="test" class="*.TestAction">  
    <result name="success" type="redirectAction">  
        <param name="actionName">test1</param>  
    </result>  
</action>  
<action name="test1" class="*.Test1Action">  
    <result name="success" type="redirect">/test1Suc.jsp?name=${username}</result>  
</action>  

注意

  • 若第二个Action使用type="redirect",那么在页面中将无法接收Action中所共享的数据,
    但在客户端跳转中,我们可以在链接上传参。比如result写成/test1Suc.jsp?name=${username}</code>,在<code>Struts2的XML文件中可以使用${}表达式,它会自动的取出Action中所有可用的属性,作为参数传递到下一页面,这里${}不是EL表达式,</code>实际上它的本质上是OGNL表达式,由于从链接中取值,故用<code>&lt;%=request.getParameter("name")%&gt;</code>或者<code>${param.name},这里param相当于request.getParameter(""),注意也不能使用${name},因为它是用来从page、request、session、application中取值的,并且页面中也不能使用<s:property
    value="name"/>
    接收参数值,因为它是从ValueStack中取值的。

  • 另外dispatcher结果类型的default属性为TRUE,故<result-type/>缺省为dispatcher,所以如果没有设置type属性的话,那么默认的是请求转发,即浏览器显示的是*.action,但是在设置type=”redirect”属性后,就可以重定向了,即浏览器显示的是/*.jsp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值