1.从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址. redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客户端向服务器端发出两次request,同时也接受两次response。谁能解释一下这两段话的意思,尤其是后一段的2次????
解决方案 »
- 跪求高手解决ssh问题
- 关于HIberate 映射问题----Association references unmapped class
- tomcat连接池报Cannot create JDBC driver of class '' for connect URL 'null'错误。
- 页面问题:选择框selected 求高手解答
- 问一个简单的HSS问题
- getElementById()和getElementByName()有什么区别?
- 头晕眼花,还是没有弄出来
- 如何用java写一个访问页面的程序?
- 往mysql中如何写数据?我老出乱码
- jsp让我气死另了!
- 如何在input type="text" 文本框里显示数据库的值,我要做信息修改
- 求教,两个不同的action写入同一个类中调用时为什么返回的是同一个页面?
redirect:A访问B,若想访问C,需由B返回给A一个参数,由A去访问C,过程是A-->B-->A-->C,地址栏的地址是C。2次的意思是指一次访问B,一次访问C
当一个客户端访问服务器端的一个JSP(本质上就是一个SERVLET),当调用response.sendRedirect,实际上它做的是从服务器端往客户端发一个指令,告诉IE把地址拦自动变成第2个页面,并点一下转到那个按钮,客户端接到这个指令后马上去访问第2个JSP,第2个JSP再把算出的结果返回客户端
forward 当一个客户端访问服务器端的一个JSP(本质上就是一个SERVLET),在服务器端直接转到第2个JSP,让第2个JSP(实际上是SERVLET)来处理客户端的请求,请求处理完把结果直接返回到客户端。(可以转了好几次,客户端不知道。最后一个反给客户端)区别:
<jsp:forward> response.sendRedirect
使用同一个request 是不同的request
forward后的语句不会继续发送给客户端 send后的语句会继续执行,除非return
速度快 速度慢
服务器内部转换 需要到客户端的往返,可以转到任何页面
可以传参数 可以传参数,直接写在url后面
地址拦没有变化 地址拦有变化
response.sendRedirect 重定向 到c页面时 a--b的参数就得不到了。。是一个新的请求
引用 1 楼 jiatai416 的回复:
redirect直接跳转到页面,参数会丢失
原文地址:http://www.java2000.net/p2597更多的JAVA面试题,Java代码,Java学习资料,请到:JAVA世纪网
更多的数据库面试题,智力面试题,相声,笑话,请到:老紫竹的家
关键是redirect是重新返回客户端,重定向
而forword是可以是内部把请求进行转向,不用返回客户端
redirect里的2次的概念应该是这样的:
第一次request: 客户端 请求-> 服务器
第一次response: 服务器 redirect(url)-> 客户端
第二次request: 客户端 根据redirect的url再次请求 服务器
第二次response: 服务器直接去获取(url)的内容。