重定向和转发

来源:互联网 发布:ubuntu maven m2 编辑:程序博客网 时间:2024/06/01 07:28
    单单从写法上来看,重定向和转发分别是这样的:
request.getRequestDispatcher("xxx.jsp").forward(request, response); //转发到xxx.jspresponse.sendRedirect("xxx.jsp"); //重定向到xxx.jsp
    区别上来看,有以下几种区别:    1. 重定向会导致浏览器的url地址改变,但是转发不会造成url地址的改变    2. 转发前后的页面是共享request和response对象的,它们属于同一个访问请求和响应过程;而重定向前后页面属于不通的访问请求和响应过程,所以request和response不会共享。    (举个例子:重定向过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器 ”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。可见,“浏览器”一共发出了两封信和收到了两次回复,“ 浏览器”也知道他借到的钱出自李四之手。 RequestDispatcher.forward 方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“ 浏览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。可见,“浏览器”只 发出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。)    3. 转发方法只能将请求转发给同一个WEB应用中的组件;重定向方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。    (如果传递给HttpServletResponse.sendRedirect方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。)    4.无论是RequestDispatcher.forward 方法,还是HttpServletResponse.sendRedirect 方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中清除。

转载自:http://www.cnblogs.com/shenliang123/archive/2011/10/27/2226892.html

0 0
原创粉丝点击