目錄
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方法可以讓你重定向到任何