对于转发与重定向有时候傻傻分不清楚,那么我们就来说说转发与重定向
一.请求转发(forward)
- 所谓请求转发其实就是将请求从一个资源中转发(转交)给另外一个资源, 让另外一个资源对请求进行响应
我们用生活中的例子来说:比如我们找人借钱,月末了资金有点短缺,于是便找小王借钱,然而他也没钱了,他就找去小明借钱,接完之后便借给我
从图及其说明我们发现:
转发的特点
(0)转发属于服务器内部的跳转, 对浏览器是不可见的!
(1)整个转发前后属于一次请求,一次响应
(2)转发前后地址栏地址不会发生变化
(3)转发前后的两个资源只能属于同一个Web应用, 否则无法进行转发! - 实现请求转发:
request.getRequestDispatcher(“所转发到资源的路径”).forward(request, response);
- request域对象
所谓域对象就是如果一个对象具有可以被访问的范围, 利用该对象上的map集合, 在这个范围内, 可以实现数据的共享
Request提供了存取数据的方法:
– 往request域中添加一个属性
request.setAttribute(String name, Object value);
– 通过属性名获取request域中对应的属性值
request.getAttribute(String name);
- 请求转发和域对象经常配合着使用,实现从Servlet中带数据到JSP进行显示
Request域对象的三大特征:
(1)生命周期: 服务器接收到请求后,以及在调用service处理请求前创建request对象, 一次请求结束后, 销毁request.
(2)作用范围: 一次请求中
(3)主要功能: 和请求转发配合使用, 实现从Servlet带数据到JSP.
二.重定向(redirect)
-
所谓重定向也是资源的一种跳转方式,但是与请求转发不同,重定向是浏览器发送请求到一个资源,这个资源返回一个状态码到浏览器,告诉它重新请求另一个资源
还是拿生活的例子来说明:还是借钱,我找小王借钱,他也没钱了,他告诉我小明有钱,并告诉我他在哪,我便重新去找小明借钱
从图上和说明上可知: -
重定向的特点:
(1)重定向是两次请求, 两次响应
(2)重定向前后地址栏地址会发生变化
(3)重定向前后的两个资源可以是不同的Web应用或者位于不同的虚拟主机. -
实现代码:
response.sendRedirect(“重定向到资源的地址”);
- 利用重定向实现定时刷新
通过Refresh响应头, 在多少秒之后跳转到指定的地址
比如:在注册成功后, 会提示xx秒之后跳转到首页, 这里就可以通过定时刷新来实现!!
定时刷新代码:
Response.setHeader(“Refresh”, “5;url=/day08_reqres/test.jsp”)
定时刷新的特点:
(1)定时刷新是两次请求, 两次响应
(2)定时刷新前后地址栏地址会发生变化
(3)定时刷新前后的两个资源可以是不同的Web应用或者位于不同的虚拟主机.
(4)重定向在第一次响应结束之后和第二次发送请求之间, 中间没有时间间隔, 是立即跳转; 定时刷新是在隔多少秒之后再立即跳转.
小结:
(1)如果在跳转前后, 需要带数据到目的地, 此时请使用转发
(2)如果在跳转前后, 不希望地址栏地址发生变化, 此时请使用转发
(3)如果在跳转前后, 希望地址栏地址发生变化, 此时请使用重定向或者定时刷新
(4)如果在跳转之前, 需要间隔多少秒之后再进行跳转, 此时请使用定时刷新