• 重定向和转发的分析与理解


    一、重定向和转发的区别

    NO 比较项目 重定向 转发
    1 关键字 redirect forward
    2 地址栏URL 会变 不会变
    3 请求次数 至少2次请求 1次请求
    4 跳转速度 较慢 较快
    5 哪一端行为 客户端行为 服务端行为
    6 信息传递 转发2次信息不会丢失 重定向2次信息会丢失
    7 跨程序访问资源 不可

    重定向和转发的区别,几乎是java web的入门知识。不管是刚毕业的学生或者经过培训刚出来的新人,基本都能倒背如流。但是,针对上面的每一点,或者两者的适用场合,如果要细究,恐怕少有人能说得很完整。

    二、理解与分析


    ​ 转发图示

    ​ 重定向图示

    以上两张图示可以表示转发和重定向的流程。以一个现实中的实例来说明两者的区别:

    转发:张三去问李四一个java技术问题,李四一知半解,然后去问了王五,得知问题的答案后,李四再向张三解答该问题。这个过程中,张三只问了一次,也只得到了一次答复。

    重定向:张三去问李四一个java技术问题,李四不会,然后告诉张三,"我不会,王五会,你去找他,他的地址是xxx"。然后张三去找王五,王五解答了该问题。这个过程中,张三问了两次,得到了两次答复(一次李四的答复,一次王五的答复)。

    其实从不管从图示,还是现实中的实例来看,基本能够理解重定向和装发的区别的含义了。例如:由于重定向访问了两次服务器以及得到两次应答,转发都只有一次。其性能必然会比转发要低;重定向URL地址会变,转发地址栏不会变等。

    三、选择与场景

    重定向和转发,不管是去理解它、去分析它或者要弄懂两者之间的差别,都只是为了在合适的场景选择合适的方式。

    1. 重定向。

      ​ 我们先来说说重定向的优点。重定向可以防止重新加载页面时执行了相同的动作(调用了相同的接口)

      ​ 例如,当提交表单的时候,执行保存的方法将会被调用,并执行相应的动作,数据入库。但是如果在提交表单后,重新加载页面,执行保存的方法就很有可能再次被调用。同样的产品信息就将可能再次入库,为了避免这种情况,提交表单后,你可以将用户重定向到一个不同的页面(例如列表页面)。

      ​ 再来谈谈重定向的缺点。重定向有一个不方便的地方,就是经过了客户端,值容易丢失,不方便传入目标页面。不过在新版的spring(3.1)框架中,已经通过RedirectAttributes(该接口继承了Model接口)接口解决了数值丢失的问题。使用方法与Modal接口类似:

      attributes.addFlashAttribute("response",response);
      

      然后在目标页面接收该值。

      ​ 另一方面,不同web程序之间的访问,必须要用重定向。

    2. 转发。

      ​ 其实说完重定向的优点和缺点,我们大概就知道了什么时候有那个转发的方式进行页面跳转了——除了以上必须用重定向的场景,其余的场景能有转发就用转发。而转发可以用Modal(这个接口在spring2.5.1时就有了)这个接口很方便携带参数到目标页面。

    四、在SpringBoot中的使用

    重定向和转发在SpringBoot+thymeleaf中使用如下:

    return "forward:/dashboard.html"; // 转发
    return "redirect:/main.html"; // 重定向
    

    另外,区分通过thymeleaf模板引擎解析跳转到响应的HTML页面:

    return "dashboard";
    

    作者:追梦1819
    来源:博客园
    原文:https://www.cnblogs.com/yanfei1819/p/10540401.html
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    RAID
    变量的内存位置
    OSI网络结构的七层模型 TCP/IP层次模型
    IT公司【应聘】
    ajax的一个最简单例子
    优先级反转问题
    问一道算法题:算出这些直线一共有多少个交点
    一个女研究生(高级测试工程师)的职业选择 ZZ
    使用SWIG实现C/C++与其他语言间的互相调用 zz
    创建系统级热键 C++ builder为例
  • 原文地址:https://www.cnblogs.com/yanfei1819/p/10540401.html
Copyright © 2020-2023  润新知