为什么从Jsp页面跳转不到servlet页面
1个回答
展开全部
首先要理解这两句话的意思
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也是被硬生生弄没了。如果你所有代码都写正确的话,那效果应该就是上述那样的,如果还是不行的话,我感觉就是你的路径写得有问题,仔细检查一下。
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也是被硬生生弄没了。如果你所有代码都写正确的话,那效果应该就是上述那样的,如果还是不行的话,我感觉就是你的路径写得有问题,仔细检查一下。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询