在做頁面的請求與響應的時候我們多用request與response進行操作,而我們大家也知道,request是表示用戶發向服務器的請求,而response是對用戶請求的一個響應。
關於轉發和重定向,通俗的講轉發就像是你向售後技術支持打電話問問題,打過去是客服小王接的,但是小王無法解決,他讓你等會兒,別掛電話,然後他去把問題告訴小李,讓小李過來幫你解決,雖然換了人解決可是還是在這個售後處解決了問題。而重定向呢,就是小王說這個不歸他們管,我們處理不了,讓你打給12315投訴吧。然後你打電話給12315投訴解決了。大概就是這樣的。
因此在轉發的時候你的地址欄內容不會變,發過去的請求也在,也就是說request中的內容沒有改變,可以使用request進行值傳遞。
而重定向的過程地址欄發生改變,你的請求也在重定向的時候丟失,原因是在第二次請求時,是再一次對服務器的訪問,服務器會重寫request內容。
下面是轉發和重定向的代碼:
轉發:
request.getRequestDispatcher("").forward(request, response);
重定向:
response.sendRedirect("");
談到轉發和重定向就不得不提一下其中的區別:
|
轉發 |
重定向 |
請求次數 |
瀏覽器僅發送一次請求、一次響應 |
發送兩次請求,兩次響應 |
地址欄是否變化 |
地址欄不發生變化 |
地址欄變成重定向的地址 |
範圍 |
只能轉到本項目的Servlet或其他頁面 |
能重定向到不只本項目的Servlet或者其他頁面 |
實施及地址 |
是有服務器轉發的,根目錄爲項目地址 |
是由瀏覽器再次請求,根目錄是瀏覽器目錄 |
*用到重定向和轉發時要注意的問題:
在做增刪改請求操作的時候不可用轉發,只能用重定向
原因:由於轉發之後地址欄不變,請求(request)內容不變,再次刷新頁面的時候,請求將再次發送,造成重複操作執行,造成錯誤。
在做查詢操作時,只能轉發,不能使用重定性。
原因:重定向後請求會將原本的查詢請求覆蓋,刷新之後將得不到要查詢的數據。
以上爲個人學習總結,歡迎技術大牛路過指定批評。
原網址:
https://www.cnblogs.com/Mr-Dawei/p/7355933.html