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

    访问:

    跳转成功:

     

    小结:

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

    重定向和请求转发对比:

    • 请求转发是一次请求,重定向是多次请求
    • 请求转发地址栏不会发生变化,重定向地址栏发生变化
    • 请求转发只能访问本服务器内的资源,重定向可以访问其他站点的资源
    迎风少年
  • 相关阅读:
    SSM中下载文件到指定位置
    ssm项目实现excel与数据库双向导入
    解决java.net.ConnectException: Connection refused:connect报错
    20220505 08:00:02
    20220504 08:00:02
    20220506 08:00:02
    20220501 08:00:02
    20220502 08:00:02
    20220503 08:00:01
    20220508 08:00:02
  • 原文地址:https://www.cnblogs.com/ZYH-coder0927/p/13666738.html
Copyright © 2020-2023  润新知