1. 程式人生 > >Forward和 Redirect的區別

Forward和 Redirect的區別

  直接轉發方式(Forward),客戶端和瀏覽器只發出一次請求,Servlet、HTML、JSP或其它資訊資源,由第二個資訊資源響應該請求,在請求物件request中,儲存的物件對於每個資訊資源是共享的。

  間接轉發方式(Redirect)實際是兩次HTTP請求,伺服器端在響應第一次請求的時候,讓瀏覽器再向另外一個URL發出請求,從而達到轉發的目的。

舉個通俗的例子:

  直接轉發就相當於:“A找B借錢,B說沒有,B去找C借,借到借不到都會把訊息傳遞給A”;

  間接轉發就相當於:"A找B借錢,B說沒有,讓A去找C借"。

一:間接請求轉發(Redirect)

間接轉發方式,有時也叫重定向,它一般用於避免使用者的非正常訪問。例如:使用者在沒有登入的情況下訪問後臺資源,Servlet可以將該HTTP請求重定向到登入頁面,讓使用者登入以後再訪問。在Servlet中,通過呼叫response物件的SendRedirect()方法,告訴瀏覽器重定向訪問指定的URL,示例程式碼如下:

複製程式碼
......
//Servlet中處理get請求的方法
public void doGet(HttpServletRequest request,HttpServletResponse response){
//請求重定向到另外的資源
    response.sendRedirect("資源的URL");
}
........
複製程式碼

                

上圖所示的間接轉發請求的過程如下:

  1. 瀏覽器向Servlet1發出訪問請求;
  2. Servlet1呼叫sendRedirect()方法,將瀏覽器重定向到Servlet2;
  3. 瀏覽器向servlet2發出請求;
  4. 最終由Servlet2做出響應。 
回到頂部

二:直接請求轉發(Forward)

   直接轉發方式用的更多一些,一般說的請求轉發指的就是直接轉發方式。Web應用程式大多會有一個控制器。由控制器來控制請求應該轉發給那個資訊資源。然後由這些資訊資源處理請求,處理完以後還可能轉發給另外的資訊資源來返回給使用者,這個過程就是經典的MVC模式。

  javax.serlvet.RequestDispatcher介面是請求轉發器必須實現的介面,由Web容器為Servlet提供實現該介面的物件,通過呼叫該介面的forward()方法到達請求轉發的目的,示例程式碼如下:

複製程式碼
......
    //Servlet裡處理get請求的方法
 public void doGet(HttpServletRequest request , HttpServletResponse response){
     
//獲取請求轉發器物件,該轉發器的指向通過getRequestDisPatcher()的引數設定 RequestDispatcher requestDispatcher =request.getRequestDispatcher("資源的URL"); //呼叫forward()方法,轉發請求 requestDispatcher.forward(request,response); }
......
複製程式碼

         

 上圖所示的直接轉發請求的過程如下:

  1. 瀏覽器向Servlet1發出訪問請求;
  2. Servlet1呼叫forward()方法,在伺服器端將請求轉發給Servlet2;
  3. 最終由Servlet2做出響應。

技巧:其實,通過瀏覽器就可以觀察到伺服器端使用了那種請求轉發方式,當單擊某一個超連結時,瀏覽器的位址列會出現當前請求的地址,如果伺服器端響應完成以後,發現位址列的地址變了,則證明是間接的請求轉發。相反,如果地址沒有發生變化,則代表的是直接請求轉發或者沒有轉發。

問:直接轉發和間接轉發的原理及區別是什麼?

答:Forward和Redirect代表了兩種請求轉發方式:直接轉發和間接轉發。對應到程式碼裡,分別是RequestDispatcher類的forward()方法和HttpServletRequest類的sendRedirect()方法。

  對於間接方式,伺服器端在響應第一次請求的時候,讓瀏覽器再向另外一個URL發出請求,從而達到轉發的目的。它本質上是兩次HTTP請求,對應兩個request物件。

  對於直接方式,客戶端瀏覽器只發出一次請求,Servlet把請求轉發給Servlet、HTML、JSP或其它資訊資源,由第2個資訊資源響應該請求,兩個資訊資源共享同一個request物件。


相關推薦

java web基礎學習 ForwardRedirect區別

響應 對象 一次 servlet t對象 資源 http 發的 請求 Forward和Redirect代表了兩種請求轉發方式:直接轉發和間接轉發。對應到代碼裏,分別是RequestDispatcher類的forward()方法和HttpServletRequest類的sen

Servlet中的forwardredirect區別

背景:在設計Web應用時,需要把一個系統進行結構化設計,即按照模組化進行劃分,讓不同的Servlet實現不同的功能,例如讓其中一個Servlet負責接收使用者的請求,另一個Servlet負責處理使用者的請求。為了實現這種程式的模組化,就需要保證在不同的Servlet之間可以相

Java常見面試題之ForwardRedirect區別

http請求 請求重定向 兩種 原理 目的 方式 重定向 public javax 原文出處: 阿赫瓦裏 Forward和Redirect代表了兩種請求轉發方式:直接轉發和間接轉發。 直接轉發方式(Forward),客戶端和瀏覽器只發出一次請求,Servlet、HTML

servlet裏的forwardredirect區別

路徑 網上 std 信息 ati jsp 語法 問題 邏輯 服務器端 forward方式:request.getRequestDispatcher("/somePage.jsp").forwardrequest, response); redirect方式:resp

Java Web forwardredirect區別

forward 數據 cati 訪問 sele 自己 .get 辦理 事情   客戶端向服務器發送一次HTTP請求,該請求可能會經過多個信息資源處理以後才把結果返回給客戶端,各個信息資源使用請求轉發機制相互轉發請求。根據轉發方式的不同,可以區分為直接請求轉發(Forward

Servlet中forwardredirect區別(轉)

intern host 邏輯 overflow IT lan 實時性 解析 relative forward方式:request.getRequestDispatcher("/somePage.jsp").forwardrequest, response); red

forward redirect區別

容器 資源 告訴 參數 目標 跳轉 根據 瀏覽器 url forward 和redirect的區別 解答:forward是容器中控制權的轉向,是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器,瀏覽器根本不知道服

ForwardRedirect區別?

【考點】 Forward轉發請求的原理; Redirect轉發請求的原理。 【分析】   Forward和Redirect代表了兩種請求轉發方式:直接轉發和間接轉發。 直接轉發方式(Forward),客戶端和瀏覽器只發出一次請求,Servlet、HTML、JSP或其它資訊資源,由

ForwardRedirect區別

使用者向伺服器傳送了一次HTTP請求,該請求可能會經過多個資訊資源處理以後才返回給使用者,各個資訊資源使用請求轉發機制相互轉發請求,但是使用者是感覺不到請求轉發的。根據轉發方式的不同,可以區分為直接請求轉發(Forward)和間接請求轉發(Redirect),

JAVA中ForwardRedirect區別

Forward和Redirect代表了兩種請求轉發方式:直接轉發和間接轉發。 使用者向伺服器傳送了一次HTTP請求,這個請求可能被直接請求轉發(Forward)和間接請求轉發(Redirect),兩種轉發方式有何區別呢? 直接轉發就相當於:“A找B借錢,B沒有,B去找C借

Forward Redirect區別

  直接轉發方式(Forward),客戶端和瀏覽器只發出一次請求,Servlet、HTML、JSP或其它資訊資源,由第二個資訊資源響應該請求,在請求物件request中,儲存的物件對於每個資訊資源是共享的。  間接轉發方式(Redirect)實際是兩次HTTP請求,伺服器端在

【PHP】forwardredirect區別

1.從位址列顯示來說 forward是伺服器請求資源,伺服器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道伺服器傳送的內容從哪裡來的,所以它的位址列還是原來的地址. redirect是服務端根據邏輯,傳送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以

前端中,forwardredirect區別

forward:內部重定向;<jsp:forward page="xxxx.html"></jsp:forward>; redirect:外部重定向; 執行forward時,

Web開發中伺服器轉發方式forwardredirect區別

使用者向伺服器傳送了一次HTTP請求,該請求可能會經過多個資訊資源處理以後才返回給使用者,各個資訊資源使用請求轉發機制相互轉發請求,但是使用者是感覺不到請求轉發的。根據轉發方式的不同,可以區分為直接請求轉發(Forward)和間接請求轉發(Redirect)兩種有何區別呢?

JSP中forwardredirect有什麼區別? 什麼時候必須用哪個?

解釋一: RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的區別是:前者僅是容器中控制權的轉向,在客戶端瀏覽器位址列中不會顯示出轉向後的地址,他是不會改變Request的值,如果你需要在下一個頁面中能從中獲取新的資訊的話

一起寫框架-MVC框架-基礎功能-實現forwardredirect的跳轉(四)

實現 java path subst velocity javax logs 兼容 lar 實現功能 當Controller的執行方法返回的視圖映射字符串是 “forward:/index.jsp”或者"/index.jsp":使用forw

forwardredirect

jsp 客戶端 什麽 AR 資源 頁面 net http csdn forward和redirect是什麽? 是servlet種的兩種主要的跳轉方式。forward又叫轉發,redirect叫做重定向。 forward(轉發): 1.是服務器內部的重定向,服務器直接訪問目標

forwardredirect請求方式

esp 記憶 lan ansi sys enc tro doctype url 之前一直對forward和redirect有點疑問,現在練習一下加深點記憶,理解理解,forward是一次請求,在一個request範圍內,而redirect是二次請求 實例: @Contro

forwardredirect兩種跳轉方式

寫部落格的目的是為了自己學習和複習,許多解釋來自於網上大牛,文章非原創。能幫助到別人當然更好不過,水平有限,可能有許多錯誤,歡迎指正 上課老師一直搶到forward和redirect的區別和重要性,一直沒記住。現在做一下簡單區分。至於完整對比總結,以後

SpringMVC中使用forwardredirect進行轉發重定向以及重定向時如何傳參詳解

轉自:http://blog.51cto.com/983836259/1877188 2016-11-28 09:45:59   如題所示,在SpringMVC中可以使用forward和redirect關鍵字在Controller中對原請求進行轉發或重定向到其