• Request请求转发与Respones请求重定向有什么区别?


    目录:

    1.Request请求转发

    2.Respones请求重定向

    3.关于转发和重定向的路径问题


     


    1.Request请求转发

    请求转发(forward)一种在服务器内部的资源跳转方式。

     (1)浏览器发送请求给服务器,服务器中对应的资源A接收到请求

     (2)资源A处理完请求后将请求发给资源B

     (3)资源B处理完后将结果响应给浏览器

     (4)请求从资源A到资源B的过程就叫请求转发

    请求转发的实现方式

    req.getRequestDispatcher("资源B路径").forward(request,response);

    请求转发可以在多个资源间共享数据:使用Request对象

    共享数据的实现方式:

    资源A中:

    //存储数据

     request.setAttribute("message","hello world");

    //请求转发

    request.getRequestDispatcher("/req6").forward(request,response);

    资源B中:

    //获取数据

    Object message = request.getAttribute("message");

    //处理数据

    System.out.println(message);

    请求转发的特点

    浏览器地址栏路径不发生变化

    只能转发到当前服务器的内部资源不能从一个服务器通过转发访问另一台服务器

    只有一次请求,可以在转发资源间使用request共享数据。


    2.Respones请求重定向

    Response重定向(redirect)就是一种资源跳转方式。

     (1)浏览器发送请求给服务器,服务器中对应的资源A接收到请求

     (2)资源A现在无法处理该请求,就会给浏览器响应一个302的状态码+location的一个访问资源B的路径

     (3)浏览器接收到响应状态码为302就会重新发送请求到location对应的访问地址去访问资源B

     (4)资源B接收到请求后进行处理并最终给浏览器响应结果,这整个过程就叫重定向

    重定向的实现方式:

    1. resp.setStatus(302);
    2. resp.setHeader("location","资源B的访问路径")
    3. //或者
    4. resposne.sendRedirect("资源B的访问路径")

    重定向的特点

    浏览器地址栏路径发送变化

    当进行重定向访问的时候,由于是由浏览器发送的两次请求,所以地址会发生变化

    可以重定向到任何位置的资源(服务内容、外部均可)因为第一次响应结果中包含了浏览器下次要跳转的路径,所以这个路径是可以任意位置资源。

    两次请求,不能在多个资源使用request共享数据,因为浏览器发送了两次请求,是两个不同的request对象,就无法通过request对象进行共享数据。



    3.关于转发和重定向的路径问题

    判断的规则:

    浏览器使用:需要加项目访问的具体路径,即绝对路径

    服务端使用:不需要加具体路径,即相对路径

    对于转发来说,因为是在服务端进行的,所以不需要绝对路径。

    对于重定向来说,路径最终是由浏览器来发送请求,就需要添加绝对路径。

    延伸:

    1.超链接,从浏览器发送,需要加绝对路径

    2.表单,从浏览器发送,需要加绝对路径

    3.转发,是从服务器内部跳转,不需要加绝对路径

    4.重定向,是由浏览器进行跳转,需要加绝对路径

  • 相关阅读:
    Docker 安装 Redis
    玩机搞机---全网最详细的手机全机型 刷机教程一
    力扣第20题记录
    WCDMA 无线网络规划
    [附源码]计算机毕业设计网上电影购票系统Springboot程序
    网站接公网+配置域名访问宝宝级教程
    杰理-判断经典蓝牙是否在打开状态
    Java学习路线(14)——Map集合类
    单元测试Mockito笔记
    双亲委派模型
  • 原文地址:https://blog.csdn.net/crazy_xieyi/article/details/128142339