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

    访问:

    跳转成功:

     

    小结:

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

    重定向和请求转发对比:

    • 请求转发是一次请求,重定向是多次请求
    • 请求转发地址栏不会发生变化,重定向地址栏发生变化
    • 请求转发只能访问本服务器内的资源,重定向可以访问其他站点的资源
    迎风少年
  • 相关阅读:
    语音激活检测(VAD)--前向神经网络方法(Alex)
    语音信号处理基础
    MySQL死锁系列-插入语句正常,但是没有插入成功
    关于wx.getProfile和wx.login获取解密数据偶发失败的原因
    指针访问数组元素
    libev 源码解析
    leveldb 源码--总体架构分析
    raft--分布式一致性协议
    使用springcloud gateway搭建网关(分流,限流,熔断)
    爬虫
  • 原文地址:https://www.cnblogs.com/ZYH-coder0927/p/13666738.html
Copyright © 2011-2022 走看看