天天看點

[Servlet&JSP] Cookie會話管理隐藏字段的使用Cookie的使用URL重寫的使用

web應用程式的請求與響應是基于http的,為無狀态的通信協定,伺服器不會記得這次請求與下一次請求的關系。,然而有些功能必須由多次請求來完成,例如購物車,使用者可能在多個購物網頁之間采購商品,web應用程式必須有個方式來得知使用者在這些網頁中采購了哪些商品,這種記得此次請求與之後請求間關系的方式,就稱為會話管理(session management)。

使用隐藏字段,可以将上一次請求的參數用隐藏字段的方式傳回到下一頁窗體中,如此發送下一頁窗體時,就可以一并發送這些隐藏字段,每一頁的參數就可以保留下來。

使用隐藏字段的方式,在關掉網頁之後,就會遺失先前請求的資訊,是以這種方式僅适合用于一些簡單的狀态管理,像是線上問卷。由于在檢視頁面源代碼時,就可以看到隐藏字段的值,是以這個方法不适合于隐秘性較高的資料。隐藏字段不是servlet/jsp實際會話管理時的機制,這裡主要是為了說明由浏覽器主動告知必要的資訊,為實作web應用程式會話管理的基本原理。

web應用程式會話管理的基本方式,就是在此次請求中,将下一次請求時伺服器所應知道的資訊先響應給浏覽器,由浏覽器在之後的請求中再一并發送給應用程式,如此應用程式就可以得知多次請求間的相關資料。

cookie是在浏覽器中儲存資訊的一種方式,伺服器可以響應浏覽器set-cookie标頭,浏覽器收到這個标頭與數值後,會将之儲存為計算機上的一個檔案,這個檔案就成為cookie。可以給cookie設定一個存活期限,保留一些有用的資訊在用戶端。如果關閉浏覽器之後,再度打開浏覽器并連接配接伺服器時cookie仍在有效期限内,浏覽器會使用cookie标頭自動将cookie發送給浏覽器,伺服器就可以得知先前浏覽器請求的相關資訊。

servlet本身體用了建立、設定與讀取cookie的api。如果要建立cookie,則可以使用cookie類,建立時指定cookie中的名稱與數值,并使用httpservletresponse的addcookie()方法在響應中添加cookie。例如:

http中cookie的設定時通過set-cookie标頭來實作的,是以必須在實際響應浏覽器之前隻是用addcookie()來添加cookie執行個體,在浏覽器輸出html響應之後再執行addcookie()是沒有作用的。

可以使用setmaxage()來設定cookie的有限期限,設定的機關是秒。預設情況下,關閉浏覽器之後cookie就失效。如果要取得浏覽器上儲存的cookie,則可以用從httpservletrequest的getcookies()來取得,它可以取得該網頁所有域(domain)的所有cookie,是以傳回值時cookie[]數組。取得cookie對象後,可以使用cookie的getname()和getvalue()方法,分别取得cookie的名稱與數值。例如:

cookie的一個常見應用是實作使用者自動登入功能,若使用者勾選自動登入選項,則下次再通路同一網頁就不需要再輸入使用者名和密碼,而可以直接登入該網頁。主要示例代碼如下:

index.java(檢查cookie):

user.java(處理表單submit,設定cookie):

login.jsp(登入視窗):

user.jsp(登入成功後的使用者界面):

web.xml:

所謂url重寫(url rewriting),其實就是get請求參數的應用,當伺服器響應浏覽器的上一次請求時,将某些相關資訊以超連結的方式響應給浏覽器,超連結中包含請求參數資訊。

以下用一個簡單的範例模拟搜尋分頁結果:

search.java(生成搜尋結果編号):

result.jsp:

效果圖:

[Servlet&JSP] Cookie會話管理隐藏字段的使用Cookie的使用URL重寫的使用

url重寫是在超連結之後以附加資訊的方式進行的,是以必須以get方式發送請求,再加上get本身可以攜帶的請求參數長度有限,是以,大量的用戶端資訊保留并不适合使用url重寫。通常url重寫用于一些簡單的用戶端資訊保留,或者是輔助會話管理之中。

轉載:http://blog.csdn.net/foreverling/article/details/50295559