request的转发与response的重定向有什么区别?

作者&投稿:苗肤 (若有异议请与网页底部的电邮联系)
请问重定向与请求转发有什么区别?~

一、目标不同
转发是服务器行为,重定向是客户端行为 。
二、请求次数不同
1、重定向是两次request 。
第一次,客户端request一个网址,服务器响应,并response回来,告诉浏览器,你应该去别一个网址。
2、请求转发只有一次请求

三、网址定位不同
重定向的网址可以是任何网址,请求转发只能是指定网址。
四、导致的结果不同
不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等。
1、网站调整(如改变网页目录结构);
2、网页被移到一个新地址;
3、网页扩展名改变(如应用需要把.php改成.Html或.shtml)。
参考资料:百度百科-重定向

转发与重定向的区别如下:
转发是服务器行为,重定向是客户端行为
1.转发在服务器端完成的;重定向是在客户端完成的
2.转发的速度快;重定向速度慢
3.转发的是同一次请求;重定向是两次不同请求
4.转发不会执行转发后的代码;重定向会执行重定向之后的代码
5.转发地址栏没有变化;重定向地址栏有变化
6.转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成
在servlet中调用转发、重定向的语句如下:
request.getRequestDispatcher("new.jsp").forward(request, response);//转发到new.jsp
response.sendRedirect("new.jsp");//重定向到new.jsp
转发过程:客户浏览器发送http请求,web服务器接受此请求,调用内部的一个方法在容器内部完成请求处理和转发动作,将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
重定向过程:客户浏览器发送http请求,web服务器接受后发送302状态码响应及对应新的location给客户浏览器,客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址,服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。
重定向,其实是两次request
第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。

一、作用不同

1、request的转发:作用是与客户端交互,收集客户端的Form、Cookies、超链接,或者收集服务器端的环境变量。

2、response的重定向:用于动态响应客户端请示,控制发送给用户的信息,并将动态生成响应。

二、原理不同

1、request的转发:客户端可通过HTML表单或在网页地址后面提供参数的方法提交数据,然后服务器通过request对象的相关方法来获取这些数据。

2、response的重定向:只提供了一个数据集合cookie,用于在客户端写入cookie值。若指定的cookie不存在,则创建它。若存在,则将自动进行更新。


三、特点不同

1、request的转发:主要用来处理客户端浏览器提交的请求中的各项参数和选项。

2、response的重定向:可以直接发送信息给浏览器,重定向浏览器到另一个URL或设置cookie的值等。


参考资料来源:百度百科-Response对象

参考资料来源:百度百科-Request对象



forward方式:request.getRequestDispatcher("/somePage.jsp").forwardrequest, response);
redirect方式:response.sendRedirect("/somePage.jsp");
forward是服务器内部重定向,程序收到请求后重新定向到另一个程序,客户机并不知道;redirect则是服务器收到请求后发送一个状态头给客户,客户将再请求一次,这里多了两次网络通信的来往。当然forward也有缺点,就是forward的页面的路径如果是相对路径就会有些问题了。 forward 会将 request state , bean 等等信息带往下一个 jsp
redirect 是送到 client 端后再一次 request , 所以资料不被保留.
使用 forward 你就可以用 getAttribute() 来取的前一个 jsp 所放入的 bean 等等资料

在网上看到一些帖子,总结了一些区别,可以从以下几个方面来看:

1.从地址栏显示来说

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.

redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客户端向服务器端发出两次request,同时也接受两次response。

2.从数据共享来说

forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.

redirect不仅可以重定向到当前应用程序的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源.

forward,方法只能在同一个Web应用程序内的资源之间转发请求.forward 是服务器内部的一种操作.
redirect 是服务器通知客户端,让客户端重新发起请求.

所以,你可以说 redirect 是一种间接的请求, 但是你不能说"一个请求是属于forward还是redirect "

3.从运用地方来说

forward:一般用于用户登陆的时候,根据角色转发到相应的模块.

redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.

4.从效率来说
forward:高.
redirect:低.

一、作用不同
1、request的转发:作用是与客户端交互,收集客户端的Form、Cookies、超链接,或者收集服务器端的环境变量。
2、response的重定向:用于动态响应客户端请示,控制发送给用户的信息,并将动态生成响应。
二、原理不同
1、request的转发:客户端可通过HTML表单或在网页地址后面提供参数的方法提交数据,然后服务器通过request对象的相关方法来获取这些数据。
2、response的重定向:只提供了一个数据集合cookie,用于在客户端写入cookie值。若指定的cookie不存在,则创建它。若存在,则将自动进行更新。
/iknow-pic.cdn.bcebos.com/83025aafa40f4bfb455d8e3b0c4f78f0f63618cb"target="_blank"title="点击查看大图"class="ikqb_img_alink">/iknow-pic.cdn.bcebos.com/83025aafa40f4bfb455d8e3b0c4f78f0f63618cb?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto"esrc="https://iknow-pic.cdn.bcebos.com/83025aafa40f4bfb455d8e3b0c4f78f0f63618cb"/>

三、特点不同
1、request的转发:主要用来处理客户端浏览器提交的请求中的各项参数和选项。
2、response的重定向:可以直接发送信息给浏览器,重定向浏览器到另一个URL或设置cookie的值等。

参考资料来源:/baike.baidu.com/item/Response对象/7465134?fr=aladdin"target="_blank"title="百度百科-Response对象">百度百科-Response对象
参考资料来源:/baike.baidu.com/item/Request对象/5357566?fr=aladdin"target="_blank"title="百度百科-Request对象">百度百科-Request对象

学习


一个servlet可以被两个jsp引用吗?
servlet是处理页面,只要在jsp页面跳转到servlet页面时,只要在跳转的url给他一个特殊的参数,(action=“servlet?jsp=“jsp1””)根据这个特殊的参数可以在servlet进行分别得处理 if(jsp.equest(“jsp1”)){} if(jsp.equest(“jsp2”)){} ...

扶沟县15650745818: java request和response的区别 -
万咬健豪: 1、response 属于重定向请求; 其地址栏的URL会改变; 会向服务器发送两次请求; 2、 request 属于请求转发; 其地址栏的URL不会改变; 向服务器发送一次请求; 通俗的举例解释就是: A向B借钱: 第一种:用response.B没有钱,请求失败,但是B告诉A,C有钱.于是A再次向C借钱,C借给A,请求成功. 第二种:用request.B没有钱,但是B向C借钱然后给A,请求成功.这次A只发送了一次请求,他并不知道借的钱是C的.

扶沟县15650745818: java中,什么时候用request,什么时候用response? -
万咬健豪: 他们都有很多方法,具体要看你使用什么方法了.我们常用的:(1解决中文乱码 request.setCharacterEncoding("");-----解决中文乱码---------从a页面向b页面传递数据时,防止传递的数据是乱码 response.setContentType();------解决中...

扶沟县15650745818: jsp的request和response怎么使用 -
万咬健豪: response.setContentType();设置JSP页面编码的. request.setCharacterEncoding();也是设置编码的. request.getParamater("字段");获取URL里面的参数的. response.sendredirecter("");重定向到一个页面 request.getrequestdispatcher().forward("")转发到一个页面的. 建议你去查看API.方法有很多,解释也很清楚.

扶沟县15650745818: JSP 中request、response、session各自的作用是什么? -
万咬健豪: request、response、session就是字面上的意思 请求 响应 会话.. 请求这个好理解把 就是像网站发送一个请求 比如我要一个1 这个时候就轮到响应出马了 当网站接收到你的请求以后 如果可能他就返回给你一个1会话可以理解成一种特殊的请求 就像上边的例子 你先像网站发送一个请求1 过了一段事件你继续访问这个网站 你想要一个2 你给网站发送请求2 但是网站有个要求 必须先接受过1 以后才能接受2 但是只用请求的话 网站是不会记得你发送过1的 无论你发送多少次1 网站都是认为你是第一次访问这个网站 这个时候就的用会话 使用会话来记录发送过的请求 你发送1以后网站就会记住你发送过1 然后你发送2 网站才能给你2的响应

扶沟县15650745818: HTTP的request(请求)和response(响应)是什么? -
万咬健豪: 这个的请求和响应呢,一般是可以分成两类的,可以在网站的内部请求或者是在网站的外部想要这些都是可以的,如果请求和响应不支持的话,可以看看主板是不是出现了故障.

扶沟县15650745818: .Request对象和Response对象的主要用途是什么?两者有何联系和区别 -
万咬健豪: 前者是请求接收数据的事件,通常用于后台存储,后者刚是显示接收到的数据,通常用于前台显示.也可以说是服务端与客户端的区别.在ASP中通常写法如: 请输入信息:<input type=text name="message"> <% DIM messagemessage=request.form("message") '后台取得表单中 信息名为message的数据'语法省略 resonse.write message '在前台页面中显示 %>

扶沟县15650745818: jsp中将request,reponse转发后,值会有什么变化? -
万咬健豪: 首先,你要清楚,把request和response传回下一个页面,不论是哪个页面,这不是必须的.还有另外一种方式,是response.sendRedirect("页面地址"); 这种方式就是不需要传的.那么这就出现问题了,何时该用forward,何时该用...

扶沟县15650745818: request.getRequestDispatcher()与response.sendRedirect()的区别. -
万咬健豪: request.getRequestDispatcher()是请求转发,前后页面共享一个request response.sendRedirect()是重新定向 前后页面不是一个request

扶沟县15650745818: jsp 编程与数据库相连 request 和response分别能完成什么功能 跪求理论 解答 不要代码
万咬健豪: request: 有关于客户端请求的信息,都可以由它来取得,例如请求标头、请求方法、请求参数、使用者IP等等信息. 属于请求转发;其地址栏的URL不会改变;向服务器发送一次请求; response: 有关于对客户端请求之响应,可以利用它来设定一些要响应的讯息,例如标题信息、响应状态码等. 属于重定向请求,其地址栏的URL会改变;会向服务器发送两次请求

扶沟县15650745818: JAVA里面Servlet中request内部转发到jsp页面还是同一个请求吗 还是经过包装 -
万咬健豪: 每次生成新的对象,hashcode当然不同了..........如果要相同的对象,可以放session中..............

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网