轉發和重定向的過程和區別
轉發 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域物件進行資料共享,只能使用轉發!!!
相關文章
- 轉發和重定向的區別?
- 轉發和重定向的區別(轉)
- 重定向和請求轉發的區別
- 請求重定向和請求轉發的區別
- HTTP中的重定向和請求轉發的區別HTTP
- 轉發與重定向的區別
- 儲存過程和函式的區別儲存過程函式
- 物件導向和麵向過程的區別物件
- SQL中儲存過程和函式的區別SQL儲存過程函式
- Spring MVC 轉發和重定向SpringMVC
- 心得 : 物件導向和麵向過程的區別【分享】物件
- 物件導向和麵向過程程式設計的區別?物件程式設計
- 堆和棧的區別(轉過無數次的文章)
- 【轉】mysql 和 redis的區別MySqlRedis
- HttpRequest 和HttpWebRequest的區別(轉)HTTPWeb
- 轉:SAN和NAS的區別
- Latch和Lock的區別(轉)
- editchanged 和 itemchanged 的區別(轉)
- JavaScript和Java的區別(轉)JavaScript
- Servlet中請求重定向和請求轉發和includeServlet
- 過載和重寫的區別
- Oracle中執行儲存過程call和exec區別Oracle儲存過程
- Javaweb的轉發與重定向的區別以及解決重定向不能共享資料的問題JavaWeb
- ../和./和/的區別
- InnoDB和MyISAM 區別(轉)
- jmeter學習指南之HTTP請求中自動重定向和跟隨重定向的區別JMeterHTTP
- frame和bounds的區別(轉載)
- (轉)ORACLE 中IN和EXISTS的區別Oracle
- RUP的剪裁原理和剪裁過程 (轉)
- Boot, Init和Shutdown 過程的描述(轉)boot
- Oracle 儲存過程 定義 和 優點 與 函式 區別Oracle儲存過程函式
- 關於物件導向和麵向過程本質的區別(個人感悟)物件
- (轉)編譯和連結的區別編譯
- malloc/free 和 new /delete 的區別 (轉)delete
- su和sudo的區別與使用(轉)
- 和 的區別
- as 和 with的區別
- 會開發和懂開發的區別