请求转发与重定向到底有哪些区别?

一. 前言

我们知道,Web开发中的页面跳转,通常有两种跳转方式:重定向与请求转发。但可能有很多同学并不知道这两种跳转在细节上的区别,只知道都能跳转到目标页面。但实际上这两种跳转方式深入研究后,你会发现有很多不同之处。接下来,壹哥就给大家梳理一下这两种跳转方式的具体区别。

. 两者的各自特点

两种跳转最大的区别在于,重定向是两次请求,每次都是从客户端发起;而请求转发是一次请求,是服务器发起的转发。如下图所示:

 给大家举一个生活中的案例:

重定向我要找凤姐办事,凤姐说她完成不了,刘亦菲可以完成这件事,让我去找刘亦菲办事。也就是说,我需要再重新发送一次请求,去找刘亦菲办事。

请求转发我要找凤姐办事,凤姐说她完成不了,她帮我找能完成这件事的人,然后完成了这件事,我只需要发一次请求即可。

三. 具体区别

除了上述区别之外,重定向后,url路径会改变;转发不会改变url路径,还是原先的访问路径,在应用中往往增删改使用重定向。比如我们在使用完增删改后,如果路径不改变,则继续刷新,会出现增删改异常;而查询需要使用转发,转发后,可实时变更使用request传值。

然后是对内和对外跳转的区别,对于外部跳转,必须使用重定向,转发则不可对外跳转。例如使用转发跳转到百度页面,是不允许的。这是由转发特点所决定的,转发是一次跳转,两个不同服务器之间,是不可能共用同一个请求对象的。对内部安全页面跳转则必须使用转发,例如转发到内部WEB-INF下的安全页面,则必须使用转发,使用重定向则访问不了。

另外关于在过滤器中的跳转应用,在过滤器中,如果使用转发后,则不会进入过滤器中。因为转发是一次请求,进入服务器后,已经经过了过滤器。当进行转发后,没有重新发请求,则不会再进入到过滤器中。如果是重定向,则是重客户端重新发的请求,则还是会进入过滤器,再访问目标资源。

最后Web项目加入上下文路径,以及多级路径的跳转区别。如果加入了上下文路径,访问映射路径有多级的话,则不能使用相对路径进行跳转,需要使用绝对路径,也就是跳转路径前面必须加“/”标识。使用重定向时,绝对路径是基于站点路径,没有带上下文路径,必须手动加上request.getContextPath()。如果转发跳转,则绝对路径是基于上下文路径,无需加上下文路径。

四. 总结

以上所述,就是重定向与转发的比较典型的几个特点与应用上的区别。我们需要在使用跳转时,多加应用和练习,这样才能把这些区别都了解清楚。现在你知道两者的区别有哪些了吗?如果你还有其他的答案,可以在评论区告诉我哦。

  • 17
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 23
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一一哥Sun

您的鼓励是我继续创作的动力哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值