轉發和重定向的過程和區別
轉發 req.getRequestDispatcher("/要跳轉的地址").forward(req, resp);
轉發的過程:(以servlet和jsp為例)
瀏覽器首先傳送一個請求到伺服器端,伺服器端發現匹配的 servlet,並指定它去執行,當這個 servlet 執行完之後,它要呼叫getRequestDispacther()方法,把請求轉發給指定的jsp頁面,整個流程都是在伺服器端完成的,而且是在同一個請求裡面完成的,因此 servlet 和 jsp 共享的是同一個request,在 servlet 裡面存放的所有東西,在jsp頁面中都能取出來。整個過程是一個請求,一個響應。
易錯點:
a)位址列不會改變
b)轉發只能轉發到當前web應用內的資源
c)在轉發過程中,可以把資料儲存到request域物件中(因為轉發使用同一個request域)
d)轉發是在伺服器端的跳轉,瀏覽器並不知情
重定向 resp.sendRedirect("/要跳轉的地址");
重定向的過程:(以servlet和jsp為例)
瀏覽器傳送一個請求到伺服器端,伺服器端匹配servlet,這都和請求轉發一樣,servlet 處理完之後呼叫了sendRedirect()這個方法,這個方法是response的方法,所以當這個servlet處理完之後,看到response.senRedirect()方法,立即向瀏覽器返回這個響應(包含響應報頭和新的URL地址),響應告訴瀏覽器你必須要再傳送一個請求,去訪問 jsp頁面,緊接著瀏覽器收到這個請求後,立刻又重新發出一個新的請求,去請求 jsp頁面。這兩個請求互不干擾,相互獨立,在前面request裡面 setAttribute() 的任何東西,在後面的request裡面都獲取不了。可見,在重定向裡面是兩個請求,兩個響應。
易錯點:
a)位址列會改變,變成重定向後的地址
b)重定向可以跳轉到當前web應用或其他web應用,甚至是外部域名網站
c)不能在重定向的過程中,把資料儲存到request中(因為傳送第二個request請求時,第一個的request域會失效)
d) 重定向是在瀏覽器的跳轉,瀏覽器知情
轉發和重定向的區別:
轉發是在伺服器端的跳轉,就是瀏覽器向伺服器傳送一個請求,伺服器直接將請求相關的引數的資訊原封不動的傳遞到該伺服器的其他jsp或servlet去處理。而重定向是在瀏覽器的跳轉,伺服器會返回給瀏覽器一個響應報頭和新的URL地址,原來的引數或者其他的一些資訊,如果伺服器端沒有特別處理就不存在了,瀏覽器會訪問新的URL所指向的servlet 或 jsp。
注意點:如果要使用request域物件進行資料共享,只能使用轉發!!!
相關文章
- 轉發和重定向的區別?
- 轉發和重定向
- 面向象和麵向過程的區別
- Springmvc中轉發和重定向SpringMVC
- Spring MVC 轉發和重定向SpringMVC
- 物件導向和麵向過程的區別物件
- 心得 : 物件導向和麵向過程的區別【分享】物件
- Javaweb的轉發與重定向的區別以及解決重定向不能共享資料的問題JavaWeb
- 過載和重寫的區別
- ../和./和/的區別
- jmeter學習指南之HTTP請求中自動重定向和跟隨重定向的區別JMeterHTTP
- 轉發和重定向又是什麼“垃圾”——教你再分類
- input屬性disabled和readonly的區別(轉)
- 【轉】理解 CI 和 CD 之間的區別
- Vue中computed和watch的區別(轉載)Vue
- LinkedList和ArrayList的區別、Vector和ArrayList的區別
- http和https的區別/get和post的區別HTTP
- springboot和ssm開發的區別Spring BootSSM
- ||和??的區別
- /*和/**的區別
- 關於物件導向和麵向過程本質的區別(個人感悟)物件
- 初學Python過程中,例項方法和類方法的區別是什麼?Python
- Java開發和Android開發的區別JavaAndroid
- vue-router 重定向和別名 理解Vue
- 過渡和動畫的區別是什麼?動畫
- 強制型別轉換(int)、(int&)和(int*)的區別型別
- String.valueOf和強制型別轉換(String)的區別型別
- jquery $(this) 和this的區別jQuery
- JQuery this和$(this)的區別jQuery
- T和?的區別
- makefile =和:=的區別
- ++a和a++的區別
- ./ 和sh 的區別
- 瀑布式開發和敏捷開發的區別敏捷
- 和區別
- 堆和棧的概念和區別
- GO語言中string和[]byte的區別及轉換Go
- 塊元素和行內元素的區別與轉換