网站首页 > java教程 正文
一. 前言
关于Web开发中的页面跳转,通常有两种跳转方式,重定向与转发。可能有很多同学不知道两种跳转的细节区别,只知道都能跳转到目标页面,实际上这两种跳转方式细化后,会发现有很多不同之处。接下来,就跟各位一起梳理下这两种跳转的具体区别。
二. 两者的各自特点
两种跳转最大的区别在于,重定向是两次请求,每次都是从客户端发起;而转发是一次请求,是服务器发起的转发。如下图所示:
给大家举一个生活中的案例:
重定向就好比:我要找凤姐办事,凤姐说她完成不了,刘亦菲可以完成这件事,让我去找刘亦菲办事。也就是说,我需要再重新发送一次请求,去找刘亦菲办事。
转发就是:我要找凤姐办事,凤姐说她完成不了,她帮我找能完成这件事的人,然后完成了这件事,我只需要发一次请求即可。
三. 具体区别
除了上述区别之外,重定向后,url路径会改变;转发不会改变url路径,还是原先的访问路径,在应用中往往增删改使用重定向。比如我们在使用完增删改后,如果路径不改变,则继续刷新,会出现增删改异常;而查询需要使用转发,转发后,可实时变更使用request传值。
然后是对内和对外跳转的区别,对于外部跳转,必须使用重定向,转发则不可对外跳转。例如使用转发跳转到百度页面,是不允许的。这是由转发特点所决定的,转发是一次跳转,两个不同服务器之间,是不可能共用同一个请求对象的。对内部安全页面跳转则必须使用转发,例如转发到内部WEB-INF下的安全页面,则必须使用转发,使用重定向则访问不了。
另外关于在过滤器中的跳转应用,在过滤器中,如果使用转发后,则不会进入过滤器中。因为转发是一次请求,进入服务器后,已经经过了过滤器。当进行转发后,没有重新发请求,则不会再进入到过滤器中。如果是重定向,则是从客户端重新发的请求,则还是会进入过滤器,再访问目标资源。
最后Web项目加入上下文路径,以及多级路径的跳转区别。如果加入了上下文路径,访问映射路径有多级的话,则不能使用相对路径进行跳转,需要使用绝对路径,也就是跳转路径前面必须加“/”标识。使用重定向时,绝对路径是基于站点路径,没有带上下文路径,必须手动加上request.getContextPath()。如果转发跳转,则绝对路径是基于上下文路径,无需加上下文路径。
四. 总结
以上所述,就是重定向与转发的比较典型的几个特点与应用上面的区别。我们需要在使用跳转时,多加应用和练习,这样才能把这些区别都了解清楚。现在你知道两者的区别有哪些了吗?如果你还有其他的答案,可以在评论区告诉我哦。
Original reprint:https://mp.weixin.qq.com/s/WO_bEqNpXqrTFjoB8fnasA
猜你喜欢
- 2024-12-10 《JAVA编程思想》5分钟速成:第18章(Java的IO系统)
- 2024-12-10 Hook技术简介
- 2024-12-10 Tomcat 配置详解和调优
- 2024-12-10 「故障演练」 Redis Cluster集群,当master宕机,主从切换
- 2024-12-10 一次完整的HTTP请求与响应涉及了哪些知识?
- 2024-12-10 一款超牛逼的 Linux 终端复用神器(附安装、使用教程)
- 2024-12-10 Java中常用的API——阿里架构师的两万字总结
- 2024-12-10 Java—用ProcessBuilder执行Shell任务
- 2024-12-10 面试官:请用Java实现一个HTTP请求
- 2024-12-10 Nice,终于有人把SpringMVC讲明白了,太简单了...
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)