服务器端和客户端的重定向

  1.引言 

       在学习struts2的过程中,我们用到了<result></result>标签,这个标签里有个属性type。type对应了几个不同的值,其中我们用到最多的有2种,分别为:type="redirect" 和type="dispatcher";

    这让我们想起了在jsp中的重定向的两种不同的方法。

   http://blog.csdn.net/bluishglc/article/details/7953614  这篇博客写的很清楚。

   下面我说一下我自己的观点。

2.叙述

    我要补充的有两点。

    (1)当在servlet中我们调用了response.sendRedirect()这个方法的时候,这个方法后边的代码还会被执行。所以说,如果想让方法后的代码不被执行,就要填上“return ;”用来终止剩余代码的执行。但是,我们在jsp页面中,如果使用了forward进行调转,forword后边的代码不会被执行。

    (2)其实,在我看来,redirect和disaptcher最大的不同点就是,是不是会生成新的request。

           假设我们客户端有个A.jsp页面,当他向服务器发出请求时,会有一个独属于这次请求的request对象。我们假设这个reqeust为A_request。假设A.jsp请求的servlet中明确的使用response.sendRedirect()重定向到B.jsp。这时,服务器会生成一个新的request,我们假设其为B_request。A_request和B_request完全不同。那么,A_request中包含的A.jsp页面的信息,自然也就不会包含到B_request中,进而不能被B.jsp使用。

          同样是上述过程,如果我们在servlet中使用的是dispatcher重定向。那服务器端就会将A_request传递给B.jsp,而不会产生新的request对象。这样的结果就是,B.jsp可以共享A.jsp页面中的信息和资源。

3.总结

         2.中叙述的redirect和dispatcher的特点同样适用于result标签中,type属性的。








猜你喜欢

转载自blog.csdn.net/cleanarea/article/details/17381071