黑马程序员技术交流社区

标题: 求高手给我讲解Java Servlet API中forward() 与redirect()的区别 [打印本页]

作者: 李杰    时间: 2012-8-31 09:58
标题: 求高手给我讲解Java Servlet API中forward() 与redirect()的区别
真心求教:)
作者: 孙鑫    时间: 2012-8-31 11:12
1.从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
2.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据
3.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等
4.从效率来说
forward:高.
redirect:低

作者: 小黑马    时间: 2012-8-31 12:40
他们的区别是:
             response.sendRedirect是向客户浏览器发送页面重定向指令,浏览器接收后将向web服务器重新发送页面请求,所以执行完后浏览器的url显示的是跳转后的页面。跳转页面可以是一个任意的url(本服务器的和其他服务器的均可)。
             RequestDispatcher.forward则是直接在服务器中进行处理,将处理完后的信息发送给浏览器进行显示,所以完成后在url中显示的是跳转前的页面。在forward的时候将上一页面中传送的request和response信息一同发送给下一页面(而response.sendRedirect不能将上一页面的request和response信息发送到下一页面)。由于forward是直接在服务器中进行处理,所以forward的页面只能是本服务器的。

作者: 王海宇    时间: 2012-8-31 14:23
这两个原理的区别,方立勋老师经常举张孝祥老师的那个例子:forward() 你向我借钱,我没有,然后我帮你去向别人借钱给你;redirect() 是你向我借钱我没有,然后我告诉你你去跟谁借,你再去找那个人借。你就是客户端,我就是服务器端。感觉比喻的很形象




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2