response跳转 request跳转
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了response跳转 request跳转相关的知识,希望对你有一定的参考价值。
它们俩在跳转时候的区别是什么?
其实就是服务器端跳转和客户端跳转的区别。1)调用方法不同--这你应该知道吧
2)跳转时,方法的参数加不加斜杠,跳转的路径也是不想同的。这个你可以测试一下,具体的我也记不清了。有的是绝对路径,有的是相对路径,有的是相对于web项目,有的是相对于当前打开的页面或action所在的文件夹。
1,客户端跳转--用到的是response对象
i. 客户端跳转使用的是response的sendRedirect方法
ii. sendRedirect里的路径和form中action是一样的,加斜杠是绝对路径,不加是相对路径。
也可以跳到servlet,那样参数就是servlet的url-pattern。
总之,参数是路径。
2,服务器跳转,用到的是request对象。
request对象调用getRequestDispatcher(path)方法得到RequestDispatcher对象,该对象再调用forward方法。
地址栏里不会变化,而客户端跳转时地址栏会变成跳转后的地址。
路径:
不加斜杠则相对于相对路径的上下文
加斜杠则是相对于web项目的上下文。
如testapp/abc/bcd
加斜杠则是testapp后边的斜杠
不加则到abc后边的斜杠 参考技术A “response跳转 request跳转”,好奇怪的标题?response是javax.servlet.http.httpServletResponse的实例,用来响应服务器请求的对象,request是javax.servlet.http.httpServletRequest的实例,用来向服务器发送请求的对象,你要他们跳转什么啊! 参考技术B 。。。
你说的是“redirect()”和 “forward()” 有什么区别吧???
第一个是“服务器端向客户端发出指定的响应内容,告知客户端应当,转向指定页面(即:对浏览器来说是可见的,即:浏览器网址会发生改变)”
而“forward()”怎么服务器内部的“转发”,(浏览器网址不会发生改变)
对用户来说是完全透明的。本回答被提问者采纳
servlet无法跳转到jsp页面
RequestDispatcher dispatcher=request.getRequestDispatcher("/GoodsCar.jsp");
dispatcher.forward(request, response);
我把response.sendRedirect("login.jsp");放在第二句前面时,还可以跳转,但是放在第二句后面的时候,就不可以跳转了
request.getRequestDispatcher().forward(request,response)这句话是把你的请求扔到了另外的服务上面了,像你上面这么写的话,就是把原来的请求扔给了GoodsCar.jsp去处理,如果你其他东西没有写错的话,页面应该会跳转到GoodsCar.jsp,而在这个jsp里面的request对象其实跟原来你的servlet里面的是同一个,servlet里面的request可以拿到的东西,这个jsp的request也可以拿到,因为它是servlet直接扔过来的,这个动作是由servlet发起的,所以客户端其实并不知道,留意一下你浏览器上面的url你就知道了,不管servlet里面forward到哪里去,你浏览器上面的url依然是这个servlet的地址,说明浏览器根本就不知道servlet已经把请求扔到别的地方去处理了。
response.sendRedirect()这句话是指示客户端重定向请求。客户端把请求发到servlet之后,servlet处理后给出来的响应是跟客户端说:“你去访问login.jsp吧”,然后客户端就会重新发送一个请求去login.jsp,但是这个请求跟之前发送给servlet的请求已经不是同一个。这个动作经历了三步,第一部是客户端发送请求到servlet,第二步是servlet返回相应,第三步是客户端重新定向请求。最后重定向的动作是由客户端发出的,所以你可以看到你的浏览器上面的地址是变了的。
最后解释一下你的问题,你把forward放在sendRedirect前面,servlet执行到forward的时候就已经把请求扔到别的地方去了,sendRedirect被活生生吞掉了。而如果你把sendRedirect放在前面的话,servlet执行到sendRedirect的时候,就已经把相应返回了,后面的forward也是被硬生生弄没了。如果你所有代码都写正确的话,那效果应该就是上述那样的,如果还是不行的话,我感觉就是你的路径写得有问题,仔细检查一下。追问
呃。。。我有点混乱。。。可以讲的通俗一点吗?
就是造成这个的原因是什么?
那两句话我是照着书上打的,在其他servlet里面都可以运行的
最好的办法就是……不要一齐用,关键是放一齐也没用,谁放前面,就执行谁,后面放多了反而可能出一些奇奇怪怪的问题,原因就是上面写的,以后可以一边看一边体会
参考技术A 前两位的回答都比较明晰。forward是服务器端跳转语句,看你的代码, dispatcher.forward(request, response);会跳到GoodsCar.jsp页面
而sendRedirect也是跳转语句,看你的代码,response.sendRedirect("login.jsp")会跳到login.jsp页面。
两个都是跳转语句,你说的把response.sendRedirect("login.jsp");放在第二句前面时,还可以跳转,是可以跳转到login.jsp页面;“放在第二句的后面,就不能跳转”这句话不对,如果放在第二句 的后面,会跳转到GoodsCar.jsp页面。
你能不能够理解?dispatcher.forward(request, response);和response.sendRedirect("login.jsp");都是跳转语句,执行任何一句,页面就会跳转了,下面的一句话当然不会执行了。追问
但是放在第二句的后面之后,它就停留在servlet页面,login这个不能跳,我懂了,但是GoodsCar.Jsp也不能跳,我就不知道为什么了
参考技术B 首先要理解这两句话的意思request.getRequestDispatcher().forward(request,response)这句话是把你的请求扔到了另外的服务上面了,像你上面这么写的话,就是把原来的请求扔给了GoodsCar.jsp去处理,如果你其他东西没有写错的话,页面应该会跳转到GoodsCar.jsp,而在这个jsp里面的request对象其实跟原来你的servlet里面的是同一个,servlet里面的request可以拿到的东西,这个jsp的request也可以拿到,因为它是servlet直接扔过来的,这个动作是由servlet发起的,所以客户端其实并不知道,留意一下你浏览器上面的url你就知道了,不管servlet里面forward到哪里去,你浏览器上面的url依然是这个servlet的地址,说明浏览器根本就不知道servlet已经把请求扔到别的地方去处理了。
response.sendRedirect()这句话是指示客户端重定向请求。客户端把请求发到servlet之后,servlet处理后给出来的响应是跟客户端说:“你去访问login.jsp吧”,然后客户端就会重新发送一个请求去login.jsp,但是这个请求跟之前发送给servlet的请求已经不是同一个。这个动作经历了三步,第一部是客户端发送请求到servlet,第二步是servlet返回相应,第三步是客户端重新定向请求。最后重定向的动作是由客户端发出的,所以你可以看到你的浏览器上面的地址是变了的。 参考技术C dispatcher.forward(request, response);
已经跳转了啊追问
什么意思?已经跳转了?
追答dispatcher.forward(request, response);
就是跳转啊 既然已经跳转了 这个之后的的语句都不会被执行了
恩恩,那说明我程序已经运行到最后一步了,那为什么结果还是待在servlet里,没有跳转到GoodsCar.jsp页面啊?
我把response.sendRedirect("login.jsp");放第一句话后面,都还可以跳转,这是为什么啊?
....response.sendRedirect("login.jsp"); 这个是重新定向地址
只要使用
RequestDispatcher dispatcher=request.getRequestDispatcher("/GoodsCar.jsp");
dispatcher.forward(request, response);
这2句就能跳转了 如果跳转不了 你看看是不是你写的路径有问题
/GoodsCar.jsp是绝对路径
login.jsp是相对路径
可以加QQ具体说一下不?我们明天交作业。。这样说好慢
以上是关于response跳转 request跳转的主要内容,如果未能解决你的问题,请参考以下文章