1. 程式人生 > >重定向與請求轉發的區別及什麼時候使用

重定向與請求轉發的區別及什麼時候使用

重定向與請求轉發的區別

轉發是伺服器行為,重定向是客戶端行為。為什麼這樣說呢,這就要看兩個動作的工作流程:

轉發過程:客戶瀏覽器傳送http請求——》web伺服器接受此請求——》呼叫內部的一個方法在容器內部完成請求處理和轉發動作——》將目標資源傳送給客戶;在這裡,轉發的路徑必須是同一個web容器下的url,其不能轉向到其他的web路徑上去,中間傳遞的是自己的容器內的request。在客戶瀏覽器路徑欄顯示的仍然是其第一次訪問的路徑,也就是說客戶是感覺不到伺服器做了轉發的。轉發行為是瀏覽器只做了一次訪問請求。

重定向過程:客戶瀏覽器傳送http請求——》web伺服器接受後傳送302狀態碼響應及對應新的

location給客戶瀏覽器——》客戶瀏覽器發現是302響應,則自動再發送一個新的http請求,請求url是新的location地址——》伺服器根據此請求尋找資源併發送給客戶。在這裡location可以重定向到任意URL,既然是瀏覽器重新發出了請求,則就沒有什麼request傳遞的概念了。在客戶瀏覽器路徑欄顯示的是其重定向的路徑,客戶可以觀察到地址的變化的。重定向行為是瀏覽器做了至少兩次的訪問請求的。

重定向時瀏覽器上的網址改變

轉發是瀏覽器上的網址不變

重定向,其實是兩次request

第一次,客戶端request   A,伺服器響應,並response回來,告訴瀏覽器,你應該去B。這個時候

IE可以看到地址變了,而且歷史的回退按鈕也亮了。重定向可以訪問自己web應用以外的資源。在重定向的過程中,傳輸的資訊會被丟失。

例子:

response.sendRedirect("loginsuccess.jsp");

請求轉發是伺服器內部把對一個request/response的處理權,移交給另外一個

對於客戶端而言,它只知道自己最早請求的那個A,而不知道中間的B,甚至CD傳輸的資訊不會丟失。

例子:

       RequestDispatcherdis=request.getRequestDispatcher(“loginsuccess.jsp”);

       Dis.forward(request,response);

重定向實際上產生了兩次請求

轉發只有一次請求 

重定向: 

  傳送請求 -->伺服器執行-->響應請求,返回給瀏覽器一個新的地址與響應碼-->瀏覽器根據響應碼,判定該響應為重定向,自動傳送一個新的請求給伺服器,請求地址為之前返回的地址-->伺服器執行-->響應請求給瀏覽器 

轉發: 

  傳送請求 -->伺服器執行-->進行請求的重新設定,例如通過request.setAttribute(name,value)-->根據轉發的地址,獲取該地址的網頁-->響應請求給瀏覽器 

三:

  重定向時的網址可以是任何網址

  轉發的網址必須是本站點的網址

重定向與請求轉發使用

前後兩個頁面 有資料傳遞 用請求轉發,沒有則用重定向。
比如servlet查詢了資料需要在頁面顯示,就用請求轉發。
比如servlet做了update操作跳轉到其他頁面,就用重定向。

相關推薦

定向請求轉發區別什麼時候使用

重定向與請求轉發的區別 一 轉發是伺服器行為,重定向是客戶端行為。為什麼這樣說呢,這就要看兩個動作的工作流程: 轉發過程:客戶瀏覽器傳送http請求——》web伺服器接受此請求——》呼叫內部的一個方法在容器內部完成請求處理和轉發動作——》將目標資源傳送給客戶;在這裡,轉發的

JavaWeb Filter 過濾器的機制 使用 請求定向請求轉發區別 跳轉過濾,過濾器dispatcher REQUESTFORWARD區別

首先要清楚,過濾的是url 那麼所有頁面跳轉url都會變嗎?不會,比如請求轉發,前前後後都是一個url 首先要弄清請求重定向與請求轉發的區別; 舉例來說有兩個網頁index.jsp 然後分別通過兩種方式跳轉到main.jsp 請求轉發 伺

Servlet應用中定向請求轉發區別

首先重定向和請求轉發的區別在大多數面試題裡面會考到,這篇文章是總結一下個人的理解。本文不講程式碼 第一,我們要明白這兩個東西的作用。Servlet在對客戶端請求的資料處理完成後,會向客戶端返回相應的響應結果(Servlet辦事兒)。 關於重定向

請求定向請求轉發

相信很多剛開始接觸jsp的同學會搞不清楚請求重定向和請求轉發的區別,這裡首先舉個栗子~~ 假設你去辦理某個護照 重定向:你去了A局,A局的人說:“這個事不歸我們管,你們應該去B局”,然後,你就從A局退了出來,自己又跑了一趟B局。 請求轉發:你去了A局,A局看了以後,知道這個

web中解決亂碼問題&&定向請求轉發區別

String ss = "珍珍"; String s8 = URLEncoder.encode(ss, "utf-8"); String so = URLDecoder.

javaweb中定向請求轉發(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的區別

客戶端 不起作用 這也 方法 cnblogs rect() 獲取url rec alt 先來兩張圖,方便理解: 可以看出,重定向時,是服務器向遊覽器重新發送了一個response命令,讓遊覽器再次向url2發送請求,以獲取url2的資源 而請求轉發時,類似於是服務器自己

HTTP中的定向請求轉發區別

response 傳輸 觀察 web應用 ali jpg 處理 size 什麽 一、調用方式 我們知道,在servlet中調用轉發、重定向的語句如下:request.getRequestDispatcher("new.jsp").forward(request, resp

Jsp&Servlet 定向請求轉發絕對路徑的問題

一、重定向:通知瀏覽器重新發送至xxx的請求。 1、發生場景: (1)response.sendRedirect("xxx"); (2)JSP頁面的 src 屬性; (3)JSP表單的 action 屬性; 2、引數問題: 重定向只是告訴瀏覽器傳送請求URL,沒有攜帶任何引數

深入淺出Java 定向請求轉發區別

import java.text.*; import java.util.*; import java.io.*; import javax.servlet.http.*; import ja

Jsp&Servlet 定向請求轉發絕對路徑的問題

一、重定向:通知瀏覽器重新發送至xxx的請求。 1、發生場景: (1)response.sendRedirect("xxx"); (2)JSP頁面的 src 屬性; (3)JSP表單的 action 屬性; 2、引數問題: 重定向只是告訴瀏覽器傳送請求URL,沒有攜帶任何引

模擬面試題目筆記-- 定向請求轉發區別 資料庫的事物

請求轉發 重定向 總結 客戶首先發送一個請求到伺服器端,伺服器端發現匹配的servlet,並指定它去執行,當這個servlet執行完之後,它要呼叫getRequestDispacther

定向請求轉發,請求包含之間的聯絡和區別

一:重定向舉例+畫圖 你向10086客服人員打了個電話說,我這個月的工資怎麼還沒發呢? 然後客服人員給了你一句話:先生您好你的工資不由我們發(相當於先給你一個狀態碼),請您 撥打120向他們要去(再給你一個Location的響應頭,響應頭是鍵值對的形式,鍵是的location

請求定向請求轉發區別

forward let request 在服務器 相同 服務 rdquo 傳遞 req 一個web資源收到客戶端請求後,通知服務器去調用另外一個web資源進行處理,稱之為請求轉發。一個web資源收到客戶端請求後,通知瀏覽器去訪問另外一個web資源,稱之為請求重定向。Requ

【Servlet】深入淺出Java定向請求轉發

列表 url地址 ssi 什麽 stack led 要去 處理 代碼 import java.text.*; import java.util.*; import java.io.*; import javax.servlet.http.*; i

請求定向請求轉發的關系

cti 愛好 ima 重定向 3-9 req 應該 用戶名 action 測試response.sendRedirect方法 先將index.jsp中的action頁面修改成為response.jsp 然後再response.jsp頁面中執行response.sendR

springMVC中的定向請求轉發的使用

請求轉發 controller 方法提供了一個 String 型別返回值之後, 它需要在返回值裡使用:forward: 使用說明: @RequestMapping("/forward") public String forward(){ // 通過forward關鍵字實現轉發

Servlet 獲取前端Form表單資料,並實現請求定向請求轉發

1.前端介面 編寫一個最簡單的登入介面: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title&g

Servlet生命週期、常用提交方式、中文亂碼問題、定向請求轉發

//當前工作空間絕對路徑System.getProperty("user.dir"); 一個Servlet的生命週期由 例項化,初始化,提供服務,銷燬,被回收 幾個步驟組成Serlvet構造方法 只會執行一次,所以Serlvet是單例項的init初始化 只會執行一次     &

JavaWeb學習筆記 (六)定向請求轉發

一. 重定向 有兩種程式碼寫法 1.寫法一 response.setStatus(302) response.setHeader("Location","轉向網址的絕對路徑或相對路徑"); 2.寫法二 response.sendDirection("轉向網

servlet中的定向請求轉發

重定向 重定向即重新定位方向,它的引數是跳轉的位置 response.sendRedirect("xxx.html"); 請求轉發 引數也是跳轉的位置 request.getRequestDispatcher("xxx.html").forward(request,re