jsp:forward和response.SendRedriect的不同

   我们的故事开始于一个浏览器向服务器提交的一次请求........

  大家都知道我们在进行页面重定向的时候有几种方式,其中较为常用的是<jsp:forward page="target">(下文简称forward)和使用response的sendRedriect方法(以下简称redriect)这两种,这两种方式在实现上到底有什么区别呢?我们来看下面的模拟过程图。

  首先来看使用forward进行重定向的示意图:

   下面我们来分析这个过程。故事开始在我们的pc上的一个客户端,也就是一个浏览器,我们在浏览器的地址栏中输入希望访问的url,这个url是 页面1 的url,这个请求通过一个request对象帮我们传达到了服务器,页面1通过request解析出用户的请求,这时有可能我们页面1的资源已经转移到了页面2,可是用户并不知道,所以我们决定帮用户进行跳转,这时页面1判断自己的forward中的page的参数值以后把这个用户发来的request请求原原本本的转发给页面2,页面2收到后进行了相应的处理,然后给发来请求的浏览器可以用来显示的信息。到此,故事就告一段路了。

   让我们来回顾一下这个过程中的要点:1.这个跳转的动作是发生在服务器端的。我们的客户端只是发送了一次请求,就得到了显示。2.这个过程中客户端发出的request对象在整个过程中是同一个实例。这里的1页面的动作只是把客户端发来的request交给了页面2而已。

   现在我们看一下使用redriect方式进行重定向的示意图:

   同样的,这个故事也开始于浏览器对服务器的一次请求,首先用户输入了页面1的url地址,页面1在接收到用户的request解析后发现客户端找的原来不是自己,于是页面1很伤心的告诉浏览器:“你找的不是我,你要找的url是这个”,于是页面1通过获得自己response.SendRedriect(“target”)中的url给浏览器送了回去,说你去找这个吧,就找到你想要的了,于是浏览器再次产生了一个request请求,并且这时的地址栏中的url地址就发生了变化,浏览器通过则个改变后的url访问了服务器,这时焦急的浏览器终于访问到了心中的页面2,页面2回送内容使其显示出来。

   让我们回顾一下这个过程中的要点:1.这个跳转动作是发生在客户端的。这个重定向的实现从根本上讲是通过改变客户端的地址栏中的url来实现的,知识不需要用户手动改变而已。这一点就和上面的故事有根本的区别了。2.这个过程中客户端发出了两个request实例。在客户端请求页面1的时候发出了一个,但是页面1说你认错人了,你要找的人在哪哪哪,你去吧,于是浏览器又发出了一个到那个地址的请求。

  到此为止明白这两种方式的异同了吧。

  不知道我理解的对不对,把自己的理解发出来给大家分享下,希望大家多多指正。

posted @ 2013-03-21 11:23  张宇鹏  阅读(761)  评论(0编辑  收藏  举报