重定向和请求转发的区别,java 中,什么时候用转发,什么用重定向?
重定向和请求转发的区别,java 中,什么时候用转发,什么用重定向?详细介绍
本文目录一览: 转发和重定向的区别
转发和重定向的区别是:请求次数不同、地址栏不同、共享数据不同、跳转限制不同、发生行为不同。
1、请求次数不同
重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址;重定向至少请求两次,转发请求一次。
2、地址栏不同
重定向地址栏会发生变化,转发地址栏不会发生变化。
3、共享数据不同
重定向两次请求不共享数据,转发一次请求共享数据。
4、跳转限制不同
重定向可以跳转到任意URL,转发只能跳转本站点资源。
5、发生行为不同
重定向是客户端行为,转发是服务器端行为。
请求转发和重定向之间有什么区别
两者的内部机制有很大的区别:
1 请求转发只能将请求转发给同一个WEB应用中的组件,而重定向还可以重新定向到同一站点不同应用程序中的资源,甚至可以定向到一绝对的URL;
2 重定向可以看见目标页面的URL,转发只能看见第一次访问的页面URL,以后的工作都是有服务器来做的;
3 请求响应调用者和被调用者之间共享相同的request对象和response对象,重定向调用者和被调用者属于两个独立访问请求和响应过程;
4 重定向跳转后必须加return,不然页面虽然跳转了,但是还会执行跳转后面的语句,转发是执行了跳转页面,下面的代码不会在执行了。
重定向和转发有什么区别
重定向和转发的区别:
1、作用方式不同,当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求;
2、页面显示不同,当使用重定向时,浏览器中所显示的URL会变成新页面的URL,,而当使用转发时,该URL会保持不变;
3、速度不同,重定向的速度比转发慢,因为浏览器还得发出一个新的请求;
4、作用对象效果不同,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。通常情况下转发更快,而且能保持request内的对象;
5、页面转换不同,转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。
java中转发和重定向的区别
java 重定向和转发的区别
重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重 定向后,request内的对象将无法使用。
转发和重定向的区别
不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。
1,请求重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保持,地址栏的URL地址会改变。
2,请求转发:服务器行为,request.getRequsetDispatcher().forward(requset,response);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变。(服务器内部转发,所有客户端看不到地址栏的改变)
下面举个生活中的实例来说明:
请求重定向:就好比我们找一个A广告公司给设计名片,A明确告诉我们他们不会设计,就让我们找B公司,结果B公司给我设计好了,所以我们会对外宣称是B公司给我们设计的名片,(所以我们就相当于发送了两次次请求,URL地址栏里就从A变成了B公司)
请求转发:同样去找A公司给设计名片,A公司虽然不能设计但是他们接下了我们的活,把这项任务外包(转发)给B公司,最终我们会把钱给A公司,也就会对外宣称是A公司给我们设计的名片这就是请求重定向(所以我们就相当于只对A发送了一次请求,URL地址栏里依然是A公司)。
:forward 是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传递.
但forward ()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如 servlet?name=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个页面.重定向后浏览器地址栏URL不变.
response.sendRedirect()是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至不同的主机上,且在浏览器地址栏上会出现重定向页面的URL.sendRedirect()可以重定向有frame的jsp文件.
1、jsp:forward动作执行的是强制性跳转,写在其后面的语句不会执行。而sendRedirect()方法跳转至页面后,还会执行后面的代码;
2、jsp:forward动作是将page的值指定的页面直接送给IE。sendRedirect()方法是告诉IE要跳转页面,IE再自动调用其参数指定值的页面,其间经过三趟通讯;
3、jsp:forwart动作切断了本面与跳转页的上下文联系,而sendRedirect()方法执行跳转后,还能使用上页传递过来的信息。
重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。
怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。
转发和重定向的区别
不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。
转发:
request.getRequestDispatcher("success.jsp").forward(request,response);
在服务器组件收到用户请求后。经过它的处理后有传递给了另一个组件。不修改用户的请求码。各组件处理完之后在返回给用户,例如主页面的框架。
用户请求-----》服务器-------》组件1-------》组件2------->服务器-------》用户
(请求不变)
重定向:
response.sendRedirect("success.jsp");
在服务器组件收到用户请求后。经过处理修改用户请求。在返回给用户。这样用户再次使用这个请求就会被动的使用新的请求了。(重定向一般是为了防止用户提交完数据后点浏览器刷新或点后退之后产生重复提交)
用户请求-----》服务器-------》组件------>服务器-------》用户-------》新的请求
(修改用户请求)
转发与重定向的区别如下:
转发是服务器行为,重定向是客户端行为
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应用以外的资源。在重定向的过程中,传输的信息会被丢失。
、重定向与转发有何区别?它们分别在什么情况下使用?
、重定向与转发有何区别?它们分别在什么情况下使用? 转发和重定向的区别 重定向response.sendRedirect("suess.jsp"); 转发:request.getRequestDispatcher("suess.jsp").forward(request,response); 1.转发在伺服器端完成的;重定向是在客户端完成的 2.转发的速度快;重定向速度慢 3.转发的是同一次请求;重定向是两次不同请求 4.转发不会执行转发后的程式码;重定向会执行重定向之后的程式码 5.转发位址列没有变化;重定向位址列有变化 6.转发必须是在同一台伺服器下完成;重定向可以在不同的伺服器下完成
sort,asort,和 ksort 有什么分别?它们分别在什么情况下使用 sort(),根据阵列中元素的值,以英文字母顺序排序,索引键会由0到n-1重新编号。主要是当阵列索引键的值无关紧要时用来把阵列排序。 assort(),PHP没有assort()函式,所以可能是asort()的笔误。asort(),对阵列进行排序,阵列的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合阵列进行排序。 ksort(),根据阵列中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的关联阵列。
在日语中つ的大小写怎么区分,它们分别在什么情况下使用? 这个问题涵盖太广了。你从基础慢慢学上去这个问题会迎刃而解的
discount on note receivable与loss on sale of receivable分别在什么情况下用?怎样区别它们 discount on note receivable应该是指应收票据贴现费用,计入财务费用 loss on sale of receivable应该是指应收账款的坏账损失,计入资产减值损失
anywhere,everywhere和somewhere怎样区分,分别在什么情况下使用? somewhere-in,at or to some place 在某处,到某处; 尤专指某处 例句:i konw somewhere you can eat japanese good. anywhere-在任何地方, 例句:do you konw anywhere i can buy a elder car? everywhere-各处,到处的意思 例句:i 've looked everywhere.
领带与领结的区别?它们分别在什么情况下打更适合? 一般场合如商务场所,办公地点等使用领带。而当晚宴等重要的宴会场合则用领结(搭配礼服)。但在中国领结使用率很低。
SVM和logistic回归分别在什么情况下使用 两种方法都是常见的分类演算法,从目标函式来看,区别在于逻辑回归采用的是logistical loss,svm采用的是hinge loss.这两个损失函式的目的都是增加对分类影响较大的资料点的权重,减少与分类关系较小的资料点的权重.SVM的处理方法是只考虑support vectors,也就是和分类最相关的少数点,去学习分类器.而逻辑回归通过非线性对映,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的资料点的权重.两者的根本目的都是一样的.此外,根据需要,两个方法都可以增加不同的正则化项,如l1,l2等等.所以在很多实验中,两种演算法的结果是很接近的. 但是逻辑回归相对来说模型更简单,好理解,实现起来,特别是大规模线性分类时比较方便.而SVM的理解和优化相对来说复杂一些.但是SVM的理论基础更加牢固,有一套结构化风险最小化的理论基础,虽然一般使用的人不太会去关注.还有很重要的一点,SVM转化为对偶问题后,分类只需要计算与少数几个支援向量的距离,这个在进行复杂核函式计算时优势很明显,能够大大简化模型和计算 svm 更多的属于非引数模型,而logistic regression 是引数模型,本质不同.其区别就可以参考引数模型和非参模型的区别就好了. logic 能做的 svm能做,但可能在准确率上有问题,svm能做的logic有的做不了
too much 和 much too 有什么区别 分别在什么情况下使用? 简单的说 1.too much trouble 太多麻烦 too much 不可数名词 2.much too tired 太累了 much too 形容词
This is my fault. 与 It is my fault.有什么区别。 this is 与 it is 分别在什么情况下使用? 没有太大的区别。 用This 或许会更有针对性一点,也可能是在有很多缺失的情况中特指其中的一部分。 it's my fault 基本就是“概括承担”所有的责任了。
德语中Herr和Herrn分别在什么情况下使用 Herr是弱变化名词,第一格在句中做主语和表语的时候使用Herr,比如 Herr Liu ist mein Lehrer Das ist Herr Jin aus Shanghai。 三四格宾语(动词、介词都有)会用到Herrn, 介词:an Herrn Schmidt, mit Herrn Li 动词:Ich helfe Herrn Wang beim Deutschlernen. Rufen Sie Herrn Han an?
java 中,什么时候用转发,什么用重定向?
session
的生命周期默认是半个小时,如果你不清空缓冲,不重启服务器,会在浏览器端存放30分钟。所以你第二次访问也可以查看到用户信息。
如果你要跳转的那个页面需要用到你本页的参数,就用转发request.getRequestDispache("目标页面").forward(request,response),反之则可以用重定向
如果你想保留request范围内的数据,那么就需要用转发,如果你不像保留request范围内的数据和请求参数,那么可以重定向.
转发是在服务器内跳转的
重定向是服务器反馈客户端,由客户端重新发起其他请求
需要传参数是用转发,否则用重定向
转发是服务器内部跳转,数据不会丢失,浏览器只提交了一次请求
重定向是客户端二次跳转,数据会丢失,浏览器提交了二次请求
做增、删、改的时候最好用重定向,因为如果不用重定向,每次刷新页面就相当于再请求一次,就可能会做额外的操作,导致数据不对。
跳转和页面重定向的区别
1. 请求的次数的不同,重定向总共请求了两次服务器;转发则是用户请求一次可能经过N个JSP页面由返回到用户浏览器中,是一次请求多次处理的过程。
2. 跳转过程中链接的变化,重定向在跳转中请求了两次服务器并且是两次不同的链接地址,在浏览器的地址栏可以看到两次是有变化的;转发在跳转过程中浏览器请求了一次服务器,服务器经过了n个JSP页面并没有改变请求的链接地址,因为用户只请求了一次,所以在整个跳转过程中链接地址是没有改变的,在浏览器的地址栏就可以看到。
3. 目的不同,重定向只是简单的让用户访问一个新的链接,而转发是服务器要得到用户的请求内容并需要进行一部分处理的,所以两者目的之不同的。
forward是在服务器端的跳转,就是客户端一个请求发给服务器,服务器直接将请求相关的参数的信息原封不动的传递到该服务器的其他jsp或servlet去处理,而sendredirect是在客户端的跳转,服务器会返回给客户端一个响应报头和新的URL地址,原来的参数什么的信息如果服务器端没有特别处理就不存在了,浏览器会访问新的URL所指向的servlet或jsp,这可能不是原先服务器上的webservce也有可能是。
重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。
怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。
转发和重定向的区别
不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。
希望我的回答能采纳 再次谢谢您的提问 祝你快乐
区别:
1.请求的次数的不同,重定向总共请求了两次服务器;转发则是用户请求一次可能经过N个JSP页面由返回到用户浏览器中,是一次请求多次处理的过程;
2.跳转过程中链接的变化,重定向在跳转中请求了两次服务器并且是两次不同的链接地址,在浏览器的地址栏可以看到两次是有变化的;转发在跳转过程中浏览器请求了一次服务器,服务器经过了n个JSP页面并没有改变请求的链接地址,因为用户只请求了一次,所以在整个跳转过程中链接地址是没有改变的,在浏览器的地址栏就可以看到
3.目的不同,重定向只是简单的让用户访问一个新的链接,而转发是服务器要得到用户的请求内容并需要进行一部分处理的,所以两者目的之不同的
跳转(也叫转发)与重定向的区别-细谈
1.跳转(request.getRequestDispatcher("*.jsp").forward(request,response)).
跳转首先浏览器对服务器只有发生了一次请求,过程:客户端浏览器--->发送http请求 到web服务器-->调用容器中的某个方法完成请求处理和跳转-->将目标资源发送给客户。 注意:在这里跳转的路径必须是在同一个web容器中的url,一定不能跳转到其他web容器中URL路径,并且在浏览器地址栏无法看见地址的变化,所以客户是感觉不到服务器作出了跳转的。
2.重定向(response.sendRedirect)过程:客户浏览器发出一个http请求,-->web容器接受到请求后,发乎302编码响应以及对应的新的location给浏览器-->浏览器发现是302响应,-->再次自动发出一个新的http请求,请求URL是新的location地址-->服务器根据这个请求将得到的资源发送给客户。 注意:仔细观察浏览器地址栏会发现地址有变更,这里一共向服务器发出了两次请求。而且这里的location可以定向到任意的URL去。
java开发了一个web系统,由登陆页面进入主界面是用转发好还是重定向好?
重定向和转发有一个重要的不同:
当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。
重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。
怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。 转发和重定向的区别 不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。
最好是重定向,然后重新查库。登陆的时候,只做用户名和密码的校验。重定向后,重新查库。URL也会改变(例如xx/user/login->xx/index.view)
由登陆页面进入主界面通常情况下转发更快,而且能保持request内的对象,但是在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。详细信息可以通过千锋教育进行了解,千锋Java现已拥有成熟独立的项目库,项目均1:1引进大厂项目,授课采用 CREA 项目研发模型。转发是指当一个Servlet处理请求的时候,它可以决定自己不继续处理,而是转发给另一个Servlet处理;重定向是指当浏览器请求一个URL时,服务器返回一个重定向指令,告诉浏览器地址已经变了,麻烦使用新的URL再重新发送新请求。想要了解更多有关Java的相关信息,推荐咨询千锋教育。千锋励精图治,不改教育初心。十一年来,千锋以政策为引导,不断完善国内特色现代职业教育体系建设,充分发挥教研师资队伍使命,构建品质教育,加大创新型人才培养力度,为经济发展提供智力人才和智力支撑,成为新时期职业教育发展的新方向,在同行业中有很高的美誉度。