HttpClient 學習整理 3

2021-08-29 19:48:42 字數 2725 閱讀 1732

下面的**片段演示如何處理頁面的重定向

client.executemethod(post);

system.out.println(post.getstatusline().tostring());

post.releaseconnection();

//檢查是否重定向

我們可以自行編寫兩個

jsp頁面,其中乙個頁面用

response.sendredirect

方法重定向到另外乙個頁面用來測試上面的例子。4.

模擬輸入使用者名稱和口令進行登入

本小節應該說是

客戶端程式設計中最常碰見的問題,很多**的內容都只是對註冊使用者可見的,這種情況下就必須要求使用正確的使用者名稱和口令登入成功後,方可瀏覽到想要的頁面。因為

協議是無狀態的,也就是連線的有效期只限於當前請求,請求內容結束後連線就關閉了。在這種情況下為了儲存使用者的登入資訊必須使用到

cookie

機制。以

jsp/servlet

為例,當瀏覽器請求乙個

jsp或者是

servlet

的頁面時,應用伺服器會返回乙個引數,名為

jsessionid

(因不同應用伺服器而異),值是乙個較長的唯一字串的

cookie

,這個字串值也就是當前訪問該站點的會話標識。瀏覽器在每訪問該站點的其他頁面時候都要帶上

jsessionid

這樣的cookie

資訊,應用伺服器根據讀取這個會話標識來獲取對應的會話資訊。

對於需要使用者登入的**,一般在使用者登入成功後會將使用者資料儲存在伺服器的會話中,這樣當訪問到其他的頁面時候,應用伺服器根據瀏覽器送上的

cookie

中讀取當前請求對應的會話標識以獲得對應的會話資訊,然後就可以判斷使用者資料是否存在於會話資訊中,如果存在則允許訪問頁面,否則跳轉到登入頁面中要求使用者輸入帳號和口令進行登入。這就是一般使用

jsp開發**在處理使用者登入的比較通用的方法。

這樣一來,對於

的客戶端來講,如果要訪問乙個受保護的頁面時就必須模擬瀏覽器所做的工作,首先就是請求登入頁面,然後讀取

cookie

值;再次請求登入頁面並加入登入頁所需的每個引數;最後就是請求最終所需的頁面。當然在除第一次請求外其他的請求都需要附帶上

cookie

資訊以便伺服器能判斷當前請求是否已經通過驗證。說了這麼多,可是如果你使用

的話,你甚至連一行**都無需增加,你只需要先傳遞登入資訊執行登入過程,然後直接訪問想要的頁面,跟訪問乙個普通的頁面沒有任何區別,因為類

已經幫你做了所有該做的事情了,太棒了!下面的例子實現了這樣乙個訪問的過程。

用來演示登入表單的示例

*@author

liudong*/

public

class

formlogindemo );

intstatus = client.executemethod(post);

system.out.println(post.getresponsebodyasstring());

post.releaseconnection();

//檢視

cookie

資訊cookiespec cookiespec = cookiepolicy.getdefaultspec();

cookie cookies = cookiespec.match(logon_site, logon_port,

"/",

false

, client.getstate().getcookies());

if(cookies.length == 0)

else}//

訪問所需的頁面

main2.jsp

getmethodget=

newgetmethod(

"/main2.jsp"

);client.executemethod(get);

system.out.println(get.getresponsebodyasstring());

get.releaseconnection();}}

HttpClient學習筆記

httpclient程式設計的基本步聚 建立 httpclient 的乙個例項.建立某個方法 deletemethod,entityenclosingmethod,expectcontinuemethod,getmethod,headmethod,multipartpostmethod,option...

httpclient 學習筆記

前陣子,學習了一下apache 的httpclient,感覺httpclient還是比較好用的,就是傳輸漢字的時候有預設的編碼問題。在使用 httpclient.executemethod postmethod 時,httpclient會呼叫 protected requestentity gene...

httpclient學習筆記

1.第一種,getresponsebody,該方法返回的是目標的二進位制的byte流 第二種,getresponsebodyasstring,這個方法返回的是string型別,值得注意的是該方法返回的string的編碼是根據系統預設的編碼方式,所以返回的string值可能編碼型別有誤,在本文的 字元...