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

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

一、重定向和转发的区别

NO比较项目重定向转发
1关键字redirectforward
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";
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值