重定向、定时刷新、请求转发的区别
1. 重定向和定时刷新
-
代码
-
重定向
response.setStatus(302); response.setHeader(“location”, “/webapp/index.jsp”); //或使用sendRedirect方法,等价于以上两行。 response.sendRedirect(“/webapp/index.jsp”);
-
定时刷新
//必须设刷新时间,没有设跳转地址时,只刷新当前页面 response.setHeader(“refresh”, “3; url=/web/index.jsp”);
-
-
说明
-
两次请求,两次响应,request对象不是同一个。
-
地址栏地址会发生变化。
-
既可以实现在同一个WEB应用内部资源之间进行跳转,也可以在不同的WEB应用和不同服务器资源之间进行跳转。
-
由于是两次请求,两次响应,无法通过request对象共享数据。
-
重定向即时跳转,而定时刷新可以在跳转到新的地址前设置一个时间,在这段时间内可以输出文本到浏览器并维系到这段时间。
-
2. 请求转发和包含转发
-
代码
//在请求对象中获取转发器 RequestDispatcher rd = request.getRequestDispatcher("/servlet"); //请求直接转发 rd.forward(request, response); //请求包含转发 rd.include(request, response);
-
说明
-
一次请求对应一次响应,request对象是同一个。
-
地址栏地址不会发生变化。
-
请求转发是服务器内部的并且是同一个WEB应用内部的资源跳转;不能是在不同应用和不同服务器中的资源跳转。
-
一个Servlet只能转发给一个目标servlet(即A不能同时转发给B和C),但可以进行多次转发(A转发给B, B再转发给C)。
-
forward转发时,response缓冲区不会保留转发前的数据,只会响应转发目标servlet的数据给客户端。
-
include转发时,两个servlet的数据都会保留,并顺序地响应会客户端。
-