Struts2中转发和重定向的区别

    xiaoxiao2021-03-26  7

    结果类型中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。

    转载请注明原文地址: https://ju.6miu.com/read-650114.html

    最新回复(0)