「學習筆記」請求轉發(Forward)與請求重定向(Redirect)的區別
阿新 • • 發佈:2019-01-10
通過一個比喻來簡單理解:
請求轉發: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物件,所以請求之間不能共享資訊,即不能在請求中訪問到他之前請求中的引數和屬性的值。
請求轉發
處理流程:
- 客戶端傳送請求,Servlet做出業務邏輯處理。
- Servlet呼叫forword()方法,伺服器Servlet把目標資源返回給客戶端瀏覽器。
請求重定向
處理流程:
- 客戶端傳送請求,Servlet做出業務邏輯處理。
- Servlet呼叫response.sendReadirect()方法,把要訪問的目標資源作為response響應頭資訊發給客戶端瀏覽器。
- 客戶端瀏覽器重新訪問伺服器資源xxx.jsp,伺服器再次對客戶端瀏覽器做出響應。