zoukankan      html  css  js  c++  java
  • Servelet------12 response,重定向

    概述:

    与请求转发类似的是重定向也是当客户端浏览器请求的功能被请求的资源类不能完成,会通过另一个资源类去完成。但是不同的是重定向是当访问的资源类不能完成请求的业务逻辑时,资源类会告诉浏览器能够完成这个业务的资源类的地址,然后浏览器再去访问另一个资源类。

    重定向的实现方式有两种:

      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);
        }
    }

    访问:

    跳转成功:

     

    小结:

    第二种重定向方式其实是第一种方式的简化,其内部应用的还是第一种方式。

    重定向和请求转发对比:

    • 请求转发是一次请求,重定向是多次请求
    • 请求转发地址栏不会发生变化,重定向地址栏发生变化
    • 请求转发只能访问本服务器内的资源,重定向可以访问其他站点的资源
    迎风少年
  • 相关阅读:
    家庭记账本---开发进度1
    HDOJ 1004--Let the Balloon Rise
    DP HDIJ1421 搬宿舍
    动态规划之最长公共子序列
    和最大的子序列之二
    和最大的子序列之一
    动态规划之一最长上升子序列LIS
    动态规划之一数塔
    动态规划之一ones
    动态规划实例
  • 原文地址:https://www.cnblogs.com/ZYH-coder0927/p/13666738.html
Copyright © 2011-2022 走看看