天天看点

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}

    ,在

    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

继续阅读