概述:
与请求转发类似的是重定向也是当客户端浏览器请求的功能被请求的资源类不能完成,会通过另一个资源类去完成。但是不同的是重定向是当访问的资源类不能完成请求的业务逻辑时,资源类会告诉浏览器能够完成这个业务的资源类的地址,然后浏览器再去访问另一个资源类。
重定向的实现方式有两种:
1.
- 设置状态码为302
- 设置相应头location的值为重定向的资源类的地址
2.
使用:response.sendRedirect(String URI);
代码实现:
第一种方式:
资源类1
@WebServlet("/servlet01") public class Servlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("资源类1执行了...."); response.setStatus(302); //设置状态码 response.setHeader("location", "/hui/servlet02"); //设置重定向地址 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
资源类2
@WebServlet("/servlet02") public class Servlet02 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("资源类2执行了..."); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
访问:
地址栏发生了变化:
运行结果:
第二种方式实现:
资源类1
@WebServlet("/servlet01") public class Servlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("资源类1执行了...."); response.sendRedirect("/servlet02"); //第二种方式 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
资源类2不变。
访问:
地址栏发生变化:
运行结果:
因为重定向并不是一次访问,而是让浏览器去访问另外一个地址,那么这个地址可不可以是别的服务器中的呢?
我们可以将重定向地址改成百度首页:
@WebServlet("/servlet01") public class Servlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("资源类1执行了...."); response.sendRedirect("http://www.baidu.com"); //第二种方式 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
访问:
跳转成功:
小结:
第二种重定向方式其实是第一种方式的简化,其内部应用的还是第一种方式。
重定向和请求转发对比:
- 请求转发是一次请求,重定向是多次请求
- 请求转发地址栏不会发生变化,重定向地址栏发生变化
- 请求转发只能访问本服务器内的资源,重定向可以访问其他站点的资源