學習了如何使用jsp技術獲取請求資訊,jsp技術是如何將伺服器響應返回給客戶端的?下面介紹jsp內建物件response如何實現使用者響應。
jsp包含多個內建的物件,各自有不同的功能。與request物件相應的是response物件,response物件可用於設定響應引數及取得響應流等。
與request物件一樣,response物件也提供了多個方法用於處理http響應,如表:
方法名稱
說明void addcookie (cookie cookie)
向客戶端新增cookie
void setcontentype(string type)
設定http響應的contenttype型別
void setcharacterencoding(string charset)
設定響應所採用的的字元編碼型別
void sendredirect(string location)
將請求重新定位到乙個新的url上
最常用的方法就是sendredirect(string location),這個方法用於將請求重定向到乙個新的url上。
login.jsp
control.jsp
<
% request.
setcharacterencoding
("utf-8");
string name=request.
getparameter
("username");
if("sa"
.equals
(name))%
>
執行以上**時候,注意到登入頁面跳轉到歡迎頁面,客戶端瀏覽器url的位址發生改變。
問題:如果希望登入成功後,在歡迎頁面顯示登入的使用者的名稱,應該怎麼辦?
分析:當使用者提交請求後,使用request物件獲取使用者請求的資料,若要welcome.jsp中顯示使用者名稱,可以嘗試按此方法修改welcome.jsp的**。
我們在頁面中使用string name=request.getparameter("username");
輸出後發現出現的資料為null。與結果想象的不同,下面解決這個問題。
首先我們進行**的改寫。
response.
sendredirector
("welcome.jsp").
forward
(request,response)
;
這樣我們成功獲得資料了,為什麼呢?要明白這個道理,就必須了解下面的內容:jsp頁面的**與重定向。
從程式的角度理解,即當客戶端傳送乙個請求到伺服器後,web伺服器在容器內部完成請求跳轉,然後將最終的結果傳送給瀏覽器,整個過程都是容器內部完成的。而對應到客戶端,無論伺服器內部如何處理,作為瀏覽器都只是提交乙個請求,因而客戶端url位址不會發生改變。
**的實現很簡單,使用request的getrequestdispacher()方法得到requestdispatcher物件,此物件用於封裝乙個由路徑所標識的伺服器資源,然後用這個物件呼叫forward()方法,將請求傳遞給伺服器上另外的jsp頁面或者html檔案。
**可以在多個頁面互動過程中實現請求資料的共享。
當使用者登入成功後,使用request物件的sendredirect()方法。那麼該方法執行的結果是客戶端重新向伺服器請求乙個位址鏈結,由於是新發的請求,因而上傳請求中的資料將隨機丟失,這種行為成為重定向。由伺服器重新定向了url,因而在客戶端瀏覽器中顯示的是新的url位址,所以重定向可以理解為瀏覽器至少提交了兩次請求。
**和重定向的區別。
(簡單解釋) **:是一次請求,位址列不會變,可以攜帶資料。重定向:是兩次請求,位址列變,不可以攜帶資料。
(詳細解釋)**過程:web伺服器內部將乙個request請求的處理權交給另乙個資源,屬於同一訪問請求和響應過程,所以request物件資訊不會丟失。 **是在伺服器端發揮作用,通過requestdispatcher物件的forward()方法將提交資訊在多個頁面間進行傳遞。**是伺服器內部控制權的轉移,客戶端瀏覽器的位址列不會顯示出轉向後的位址。重定向過程web伺服器向瀏覽器返回乙個響應,瀏覽器接受此響應後再傳送乙個新的http請求到伺服器,這次屬於兩次不同的請求,則上一次請求的request資訊將丟失。 重定向是在客戶端發揮作用,通過請求新的位址實現頁面轉向。其通過瀏覽器重新請求位址,在位址列中可以顯示轉向後的位址。
如果需要在重定向的情況下將簡單資料(值型別,字串)傳遞至目標頁面,可以使用查詢字串(query string)實現。**如下。
response.sendredirect(「welcome.jsp?username=」+name);
注意這時get方式
查詢字串以名值對的方式儲存資料,通過「?」連線url位址後面,多個名值對可以用「&」進行分隔。
如果需要傳遞複雜的資料型別(如物件,集合等)或者需要更大範圍而不僅僅是目標頁面分享資料,則需要使用後續的東西進行。
注意:(1)使用超連結進行資料傳遞時,是用get方式,如果傳入的過程中有中文,使用request獲取物件直接獲取時,容易產生亂碼問題。因此,需要對資料進行重新編碼。可以使用string物件的方法實現資料重新編碼。
語法:new string(需要編碼的資料.getbytes(「iso-8859-1」),「utf-8」);也可有同感tomcat進行設定。
(2)當成傳遞多個資料時,可使用&符號進行鏈結。
JSP資料互動 一
1.什麼是jsp內建物件 jsp內建物件是wed容器建立的一組物件 例子 1 2int value 3for int i value 6 沒有進行宣告和建立,便可以使用out物件 2.常用的jsp內建物件 1.request物件 請求物件,用於客戶端通過http協議連線傳輸到伺服器端的資料。如 表單...
JSP資料互動
所謂內建物件就是由web容器載入的一組類的例項,不需要使用 new 關鍵字去獲取例項。request物件主要用於處理客戶端使用者提交的請求資訊。response物件與request物件相對應,它用於響應客戶請求並向客戶端返回響應資訊。response物件的sendredirect 方法用於將請求重定...
JSP資料互動
1.方法名稱 說明 void setattribute string key,object value object getattribute string key string getrealpath string path 返回相對路徑的真是路徑 2.jsp的重用內建物件 內建物件名稱 說明 o...