下面的**片段演示如何處理頁面的重定向
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值可能編碼型別有誤,在本文的 字元...