Java基础面试题20:Java语言sendRedirect()和forward()方法有什么区别?
Java基础面试题:Java语言sendRedirect()和forward()方法有什么区别?
在 Java Web 开发中,sendRedirect()
和 forward()
是两个非常常用的方法,但它们有一些核心区别。我们来用最简单的方式给你解释清楚。
一、sendRedirect()
和 forward()
的核心区别
1. sendRedirect()
是重定向
- 特点:
sendRedirect()
会让浏览器发起一个全新的请求,就像你在地址栏里敲了个新网址一样。 - 效果:
因为它是一个新请求,之前的请求相关数据(比如request
作用域中的内容)就失效了,不能继续用了。
2. forward()
是请求转发
- 特点:
forward()
只是把当前请求交给另一个目标来处理,整个过程在服务器内部完成,浏览器啥都看不出来。 - 效果:
因为它用的还是原来的请求,所以之前的请求数据还能继续用。
二、为什么 sendRedirect()
比 forward()
慢?
简单来说:
sendRedirect()
多了一步: 它需要告诉浏览器 “兄弟,去这个新地址吧”,然后浏览器再发起一个新请求,所以多了个来回,时间就多了点。forward()
省时间: 服务器内部直接交接,完全不用麻烦浏览器。
三、啥时候用 sendRedirect()
,啥时候用 forward()
?
-
用
sendRedirect()
的场景:- 页面跳转到一个完全不相关的地址,比如跳去另一个网站。
- 想刷新浏览器地址栏的内容(因为它本质是新请求)。
- 避免表单重复提交(常用在处理完表单后,跳转到一个确认页面)。
-
用
forward()
的场景:- 在同一个系统内页面间跳转,且需要共享数据,比如传递表单验证结果。
- 不想让用户知道页面跳转的细节(因为浏览器地址栏不会变)。
四、总结表格对比
特性 | sendRedirect() | forward() |
---|---|---|
请求类型 | 新请求 | 同一个请求 |
地址栏变化 | 会变 | 不会变 |
请求数据共享 | 不共享,数据会丢失 | 共享,数据还能继续用 |
速度 | 慢一点 | 快一点 |
常见用途 | 页面跳转到新网站或避免表单重复提交 | 系统内页面间跳转,传递请求数据 |
五、简单记忆口诀
sendRedirect()
: 我换了个新地址,重新开始!forward()
: 我把任务交给别人,但我们还是一个团队!
搞清楚这些,面试官问到这个问题,你就能轻松拿下啦! 🎉
最后说一句(求关注,求赞,别白嫖我)
最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。
这是大佬写的 7701页的BAT大佬写的刷题笔记,让我offer拿到手软
本文,已收录于,我的技术网站 cxykk.com:程序员编程资料站,有大厂完整面经,工作技术,架构师成长之路,等经验分享
求一键三连:点赞、分享、收藏
点赞对我真的非常重要!在线求赞,加个关注我会非常感激!