問題:轉發(fā)與重定向的區(qū)別?
一、調用方式
在servlet當中贮折,當我們處理doPost()和doGet()方法時弟晚,調用轉發(fā)朋截、重定向的語句如下:
request.getRequestDispatcher("sell.jsp").forward(req, resp); //轉發(fā)
response.sendRedirect("shop.jsp"); //重定向
二对供、區(qū)別
- 轉發(fā)是服務端行為位他,重定向是客戶端行為。
轉發(fā):web項目內部轉發(fā)到另一個頁面或者另一個servlet产场。
過程:客戶端發(fā)送 http 請求
——> web 服務器接收請求
——>調用內部的一個方法在容器內完成請求處理和轉發(fā)操作
——>將目標資源發(fā)送給商戶(在這里鹅髓,轉發(fā)的路徑必須是同一個web容器下的url,其不能轉向到其他的web路徑上去京景,中間傳遞的是自己的容器內的request)窿冯。
我們可以在瀏覽器里看到 URL 地址欄還是和原來一樣的。瀏覽器只做了一次轉發(fā)請求确徙。請求轉發(fā)是服務器內部把對一個 request / response 的處理權醒串,移交給另外一個對于客戶端而言执桌,它只知道最初的請求,但是中間做了什么事厦凤,客戶端事不知道鼻吮。
而且不會造成數(shù)據(jù)丟失育苟。
重定向:重定向到另一個地址较鼓,可以在web項目內,也可以在項目外违柏。
過程:客戶端發(fā)起 http 請求
——> web服務器接收請求后返回 302 狀態(tài)碼博烂,并響應新的 URL地址給客戶端
重定向又稱之為302,代表暫時性轉移(Temporarily Moved )漱竖,英文名稱:302 redirect禽篱。 也被認為是暫時重定向(temporary redirect),一條對網(wǎng)站瀏覽器的指令來顯示瀏覽器被要求顯示的不同的URL馍惹,當一個網(wǎng)頁經(jīng)歷過短期的URL的變化時使用躺率。一個暫時重定向是一種服務器端的重定向,能夠被搜索引擎蜘蛛正確地處理)
——>客戶端發(fā)下返回是 302 狀態(tài)碼万矾,會自動再發(fā)送一個新的 http 請求悼吱,請求url 是新的地址;
——> web服務器根據(jù)此新的請求尋找資源并返回客戶端良狈。
在這里地址可以重定向到任意URL后添,既然是瀏覽器重新發(fā)出了請求,則就沒有什么request傳遞的概念了薪丁。在客戶瀏覽器路徑欄顯示的是其重定向的路徑遇西,客戶可以觀察到地址的變化的。重定向其實是兩次request严嗜。第一次粱檀,客戶端request A,服務器響應,并response回來漫玄,告訴瀏覽器梧税,你應該去B。這個時候瀏覽器可以看到地址變了称近。重定向可以訪問自己web應用以外的資源第队。在重定向的過程中,傳輸?shù)男畔粊G失刨秆。
在重定向的過程中凳谦,傳輸?shù)男畔粊G失。