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:程序員編程資料站,有大廠完整面經,工作技術,架構師成長之路,等經驗分享
求一鍵三連:點贊、分享、收藏
點贊對我真的非常重要!在線求贊,加個關注我會非常感激!