您现在的位置:首页 >> 前端 >> 内容

Struts2中转发和重定向的区别

时间:2017/2/24 9:53:00 点击:

  核心提示:结果类型中redirect和redirectAction的区别:redirect是在处理完当前Action之后,重定向到另外一个实际的物理资源。redirectAction也是重定向,但它重定向到的是...

结果类型中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},在Struts2的XML文件中可以使用${}表达式,它会自动的取出Action中所有可用的属性,作为参数传递到下一页面,这里${}不是EL表达式,实际上它的本质上是OGNL表达式,由于从链接中取值,故用<%=request.getParameter("name")%>或者${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。

Tags:ST TR RU UT 
作者:网络 来源:a target=_