1. 程式人生 > >「學習筆記」請求轉發(Forward)與請求重定向(Redirect)的區別

「學習筆記」請求轉發(Forward)與請求重定向(Redirect)的區別

通過一個比喻來簡單理解: 
請求轉發:A向B傳送一次請求,想讓他完成某項工作,當B接受到請求時,發現自己完成不了,又請求C幫忙,C接收到B請求之後最終完成了該項工作,並把最後的結果交給了A。在此期間,A只發送了一次請求,他只知道把任務交給了B,至於B是如何完成的,A並不知道,他只等待最終的結果。 
請求重定向:首先A向B傳送請求,想讓他完成某項工作,當B接收到這個請求時,發現自己完成不了,他立即通知A,並推薦C可以完成任務,於是A又聯絡C,最終C完成了該項任務。 
 

區別: 
1、瀏覽器位址列顯示不同(表面區別) 
無論進行多少次請求,如果使用請求轉發來實現,瀏覽器位址列中只顯示第一次傳送請求的地址;如果使用重定向來實現,瀏覽器位址列顯示的是每次請求的新地址。這只是表面上看到的不同地方。 
2、元件之間可否共享資訊不同(本質區別)

 
從本質上講,請求轉發時,從傳送第一次到最後一次請求的過程中,WEB容器只建立一次request和response物件,請求之間始終共享這兩個物件,所以每個請求可以訪問他之前請求中的引數和屬性的值;而重定向時,瀏覽器每傳送一次請求,WEB容器都會重新建立新的request和response物件,所以請求之間不能共享資訊,即不能在請求中訪問到他之前請求中的引數和屬性的值。 

 

請求轉發

處理流程:

  1. 客戶端傳送請求,Servlet做出業務邏輯處理。
  2. Servlet呼叫forword()方法,伺服器Servlet把目標資源返回給客戶端瀏覽器。

 

請求重定向

處理流程:

  1. 客戶端傳送請求,Servlet做出業務邏輯處理。
  2. Servlet呼叫response.sendReadirect()方法,把要訪問的目標資源作為response響應頭資訊發給客戶端瀏覽器。
  3. 客戶端瀏覽器重新訪問伺服器資源xxx.jsp,伺服器再次對客戶端瀏覽器做出響應。