SendRedirect和forward的区别


(1)重定向是JSP中实现JSP/Servlet程序跳转至目标资源的方法之一,它的基本思想是:服务器将目标资源完整的URL通过HTTP

响应报头发送给客户端浏览器,浏览器接收到URL后更新至地址栏中,并将目标资源的URL提交给服务器。重定向使目标资源的

URL从服务器传到客户端浏览器,再从客户端通过HTTP请求传回服务器,其中有一定的网络时延。 


(2)实现JSP页面跳转的主要方法有转发跳转(forward)和重定向跳转(redirect), RequestDispatcher.forward()实现的是转发跳转,

response.sendRedirect()实现的是重定向跳转。 


两者的最大区别在于:


1.重定向是通过客户端重新发送URL来实现,会导致浏览器地址更新,而转发是直接在服务器端切换程序,

目标资源的URL不出现在浏览器的地址栏中;  

2.转发能够把当前JSP页面中的request、response对象转发给目标资源,而重定向会导致当前JSP页面的

request、response对象生命期结束,在目标资源中无法取得上一个JSP页面的request对象;


3.转发跳转直接在服务器端进行,基本上没有网络传输时延,重定向有网络传输时延。 


如果要实现服务器中两个Servlet程序间跳转,并且要使用request作用范围变量交换数据,应该优先

使用request转发跳转。用重定向实现程序跳转时,如果要求传递数据给目标资源,一个简单、可行的

方法是把数据编码在URL查询串中,例如:http://127.0.0.1:8080/exam.jsp?name=tom




SendRedirect和forward的区别_第1张图片



案例分析:

(1)重定向 (sendRedirect):是将用户从当前的页面或servlet定向到另一个JSP页面或sevlet中;

SendRedirect和forward的区别_第2张图片

上图中,我们第一次请求jsp1没有得到想要的数据,这样的话服务器就告诉客户端,你可以请求JSP2区获取你想要的数据,也就是有两次请求的过程,所以使用重定向的话地址栏中就会有变化。

也就是说重定向,不能将用户对当前页面或另一个servlet的请求转发给所指定的资源,因此重定向的目标也米娜或servlet对象无法使用request获取用户提交的数据。【8


(2)转发(requestDispatcher):就是讲用户对当前jsp页面或servle的对象请求转发给另一个jsp页面或servlet对象,但是转发的过程是在服务器内部,因此地址栏中不会有地址的变化,也不需要客户端重新发送请求信息:

SendRedirect和forward的区别_第3张图片

可以实现用户请求。



你可能感兴趣的:(Jsp学习笔记)