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

    访问:

    跳转成功:

     

    小结:

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

    重定向和请求转发对比:

    • 请求转发是一次请求,重定向是多次请求
    • 请求转发地址栏不会发生变化,重定向地址栏发生变化
    • 请求转发只能访问本服务器内的资源,重定向可以访问其他站点的资源
    迎风少年
  • 相关阅读:
    约瑟夫问题
    [bzoj] 2049 洞穴勘探 || LCT
    [bzoj] 1597 土地购买 || 斜率优化dp
    [usaco] 2008 Dec Largetst Fence 最大的围栏 2 || dp
    [LNOI] 相逢是问候 || 扩展欧拉函数+线段树
    [bzoj] 1588 营业额统计 || Splay板子题
    [hdu] 5115 Dire Wolf || 区间dp
    [poj] 1651 Multiplication Puzzle || 区间dp
    [bzoj] 1090 字符串折叠 || 区间dp
    [bzoj] 1068 压缩 || 区间dp
  • 原文地址:https://www.cnblogs.com/ZYH-coder0927/p/13666738.html
Copyright © 2011-2022 走看看