hualinux servlet 2.19:servlet請求轉發三種方式

目錄

一、servlet請求轉發三種方式

二、forward請求轉發

三、 redirect重定向

四、forward請求轉發和redirect重定向區別


 

hualinux servlet 2.19:servlet請求轉發三種方式也需要了解一下

一、servlet請求轉發三種方式

servlet中的請求轉發主要有三種方式:

1、  forward:是指轉發,將當前request和response對象保存,交給指定的url處理。並沒有表示頁面的跳轉,所以地址欄的地址不會發生改變。

2、  redirect:是指重定向,包含兩次瀏覽器請求,瀏覽器根據url請求一個新的頁面,所有的業務處理都轉到下一個頁面,地址欄的地址會變發生改變。

3、  include:意爲包含,即包含url中的內容,進一步理解爲,將url中的內容包含進當前的servlet當中來,並用當前servlet的request和respose來執行url中的內容處理業務.所以不會發生頁面的跳轉,地址欄地址不會發生改變。

 

二、forward請求轉發

forward請求轉發(服務器端轉發):

請求轉發是將請求再轉發到其他地址,轉發過程中使用的是同一個請求,轉發後瀏覽器地址欄內容不變。 

請求轉發(服務器端轉發):

1、客戶端(HTML)向服務器發送一條請求,服務端發現匹配的servlet,並指定它去執行。當這個servlet執行完之後,它要調用getRequestDispacther()方法,返回值類型是RequestDispatcher,設定目標資源jsp(jsp==servlet是服務端)。

2、調用forward(ServletRequest req,ServletResponse res):該方法是RequestDispatcher接口的方法,將請求從一個servlet轉發到服務器上另一個資源jsp(目標資源)(jsp==servlet是服務端)

3、目標資源jsp(jsp==servlet是服務端)接收轉發過來的請求,並將接收數據後的jsp生成HTML返回給客戶端

重點:轉發是服務器行爲,因此也是在這個web應用內轉發,整個過程是一個請求一個響應。可以看做一個request請求裏包含了多個servlet,多個servlet共享的是同一個request,所以他們之間可以通過getAttribute()讀取前一個servlet的存值。

(因爲是一次請求,所以地址欄是不會改變的)

request執行轉發操作,request.getRequestDispacther"url".forward(request,response)

 

 

三、 redirect重定向

由原請求地址重新定位到某個新地址,原有的請求失效,客戶端看到的是新的請求返回的響應結果,客戶端瀏覽器地址欄變爲新的請求地址其中第二次請求是由客戶端瀏覽器自動發出。 

從上圖中看出,知道爲什麼要用response而不用request了吧?

由response執行重定向操作: response.sendRedirect();

把上面兩個圖簡化後爲:

重定向(客戶端跳轉):

1、客戶端(HTML)發送一個請求到服務器,服務器匹配servlet,這都和請求轉發一樣。

2、servlet處理完之後調用了sendRedirect()這個方法,這個方法是response的方法,所以,當這個servlet處理完之後,看到response.senRedirect()方法,立即向客戶端返回這個響應,響應行告訴客戶端你的目標資源在哪裏你必須要再發送一個請求,去訪問你的目標資源jsp(jsp==servlet客戶端)。

3、緊接着客戶端收到這個請求後,立刻發出一個新的請求,去請求你的目標資源jsp(這裏兩個請求互不干擾,相互獨立,在前面request裏面setAttribute()的任何東西,在後面的request裏面都獲得不了)

4、目標資源jsp把自己生成HTML返回給客戶端。

重點:重定向是客戶端行爲,也就註定可以向任何地址發送請求,客戶端行爲的改變是服務器所給的指示,亦即是response的行爲返回,每次請求都是新的行爲,request不保留上次的內容。

(因爲是兩次請求,所以地址欄會改變)

 

四、forward請求轉發和redirect重定向區別

兩者最大區別是:

運用forward方法只能重定向到同一個Web應用程序中的一個資源。

而sendRedirect方法可以讓你重定向到任何 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章