1. 程式人生 > >重定向和請求轉發,請求包含之間的聯絡和區別

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

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

重定向的過程:
客戶端傳送請求,web伺服器接收該請求後傳送302狀態碼響應並且傳送新的一個地址(location)給客戶端瀏覽器,客戶端接收到302則自動再發送一個新的請求,而這個請求就是新的location,既然是客戶端傳送的一個請求,就對web容器的request沒關係了,它可以任意跳轉到所有location。


二:請求轉發舉例+畫圖
班上有一個女生長的很好看,有一天他要你幫她做個題
要你第二天給她答案,你看了下題不會做,為了不在他面前出醜,
你就偷偷的去請教了一個學霸,學霸跟我說你自己先把一部分簡單的做完(留頭不留體),核心的部分和剩下另一部分簡單的由我來做(留頭要留體)
我很愉快的答應了,然後第二天把答案告訴她了

在這個例子中:女同學知不知道其實這道題是學霸做的,[答案是不知道],她只知道,她給了我題目,我還了他答案(一次請求一次響應)
注意:[在一個請求鏈中要涉及到多個servlet,但他只是一個請求]
請求轉發中第一個servlet是留頭不留體的
如果你非要在第一個servlet中寫響應體:有兩種情況:1.根本就不會把內容顯示在瀏覽器(客戶端)中 2.會丟擲異常
這裡說簡單的部分:其實是想象成了響應頭,因為傳送響應頭這個操作很簡單嗎

轉發的過程:
客戶端瀏覽器傳送請求,web伺服器接收請求再進行在內部跳轉,什麼意思呢,也就是說,
跳轉只能在自己所在的web容器下的url,而不能跳轉出去其他的url。


三:請求包含舉例+畫圖
我接了一個專案,要一個月之內做完,但是我短時間之內做不完
於是我就找到了張三,張三也同意了

在這個例子裡:不是我不會做,而是我一個人做不完,需要有一個幫手共同完成(而在請求轉發中:就是我不會做)
第一個servlet:留頭要留體(因為是我請別人做,可能我做的稍微多一點)
之後的servlet:只會留體(就算有頭也不會發送到客戶端)
其實請求包含:就相當於把一個servlet的內容,分別寫到了兩個servlet中