转发与重定向区别

一、请求的两种操作方式

在进行servlet+jsp简单功能构建的时候发现在访问jsp页面时遇到这两种操作方式:

1、req.getRequestDispatcher("jsp/index.jsp").forward(req, resp);

2、resp.sendRedirect("jsp/index.jsp");

这两种方式浏览器在请求该servlet的时候都可以访问到jsp页面,但是他们的区别貌似这么长时间没有接触到servlet比较基础的东西有些模糊了,通过网上搜索查看一些资料进行重新了解了一下。

req.getRequestDispatcher("jsp/index.jsp").forward(req, resp)方法叫做转发(服务器行为由servlet直接将资源返回浏览器完成的),而resp.sendRedirect("jsp/index.jsp")方法叫做重定向(浏览器行为,由浏览器重新定位访问对应资源的方式)

二、转发与重定向的具体操作时序图:

1、转发:req.getRequestDispatcher("jsp/index.jsp").forward(req, resp),通过servlet的request内部请求访问转发的资源,由服务器进行操作,客户端(浏览器)对服务器内部的转发不感知。

 时序图:

 操作演示:浏览器访问通过转发的方式响应时,浏览器的地址栏不会变更。

2、重定向:resp.sendRedirect("jsp/index.jsp"),通过response直接将资源路径返回给浏览器,由浏览器重新发起对服务器的请求(这里资源路径也可以是其他web站点的资源),也就是浏览器会对服务器进行两次请求。

操作演示:进行重定向访问时浏览器的地址栏的url会发生变化,变为第二次请求访问的资源url

 三、转发与重定向的特性总结:

通过时序图可以比较出两者的不同:

1、重定向时浏览器会发起两次请求;转发时浏览器只进行了一次请求。

2、重定向因为是两次请求所以第一次的request与第二次请求的request是不一样的,数据不可传递;转发因为是servlet的行为,是服务器内部把对一个request/response的处理权,移交给另外一个处理程序,数据是可传递的。

3、重定向时servlet将资源url发送给客户端,由客户端进行重新请求,那么这个url可以是任意的资源请求url;转发因为时servlet的服务器端操作的行为,所以只能转发服务器的该web内站点资源url。

猜你喜欢

转载自www.cnblogs.com/liushi805347332/p/8983159.html