java Web(4)
Web 應用程序狀態管理
通過隱藏表單域 hidden,cookie,session,重寫URL來實現;
cookie存在於客戶端,瀏覽器關閉時失效
cookie原理:服務器在響應請求時將一些數據以“鍵-值”對的形式通過響應信息保存在客戶端
Servlet中提供了如下一系列操作Cookie的API
Cookie(name, value):構造方法用於創建一個或多個Cookie
setMaxAge(int lifetime):設置Cookie的過期時間(以秒為單位)。默認值為負值(Cookie將在瀏覽器關閉時過期)
getMaxAge():獲取Cookie的過期時間。
getName():獲取Cookie的名字
setValue(String value):指定Cookie的值。
getValue():獲取Cookie的值
要將Cookie發送到客戶端,Servlet應該按照下列的操作步驟執行:
創建一個或多個Cookie,使用構造方法指定Cookie的名字和值
使用setValue方法為Cookie設置屬性值
使用HttpServletResponse對象的addCookie()方法將Cookie插入到響應頭中
要讀取客戶端傳入的Cookie,Servlet執行下列操作步驟:
使用HttpServletRequest對象的getCookies方法返回一個Cookie對象數組
Servlet遍歷該數組(調用getName()方法),直到找到與名稱相匹配的Cookie值
Session存在於服務器
Session原理
服務器可以為客戶端創建並維護一個Session對象,用於存放數據。
在創建Session對象的同時,服務器將會為該 Session對象產生一個唯一編號,這個編號稱之為SessionID
服務器以Cookie的方式將SessionID存放在客戶端。
當瀏覽器再次訪問該服務器時,會將SessionID作為Cookie信息帶到服務器,服務器可以通過該SessionID檢索到以前的Session對象,並對其進行訪問
創建Session
HttpSession session = request.getSession();
HttpSession接口常用的一些方法
setAttribute(java.lang.String, java.lang.Object):在Session對象中用一個名字綁定一個對象。
getAttribute(java.lang.String):通過名字獲取Session對象中保存的對象。
removeAttribute(java.lang.String):在Session中刪除與一個名字對應的對象。
getCreationTime():返回第一次創建會話的時間。
getLastAccessedTime():返回容器最後一次得到該會話ID的請求時間。
setMaxInactiveInterval(int interval):對於會話指定客戶請求的最大間隔時間,以秒為單位。-1表示永不過期
getMaxInactiveInterval(int interval):返回客戶請求的最大間隔時間。
invalidate():會話結束,當前存在在會話中的所有會話屬性也會解除綁定。
getId():此方法返回每個session唯一的標識
Session的存在依賴於cookie
當cookie被禁用時,采用URL重寫,及在地址後面添加SessionId;
URL重寫
response.encodeURL()
response.encodeRedirectURL(“/lovobook/sucess.html” )
總結:
HTTP協議使用的是無狀態的連接,連接只針對一個請求/響應
狀態管理方案:表單隱藏字段、Cookie、Session、URL重寫
Cookie是Web服務器發送到客戶端瀏覽器並保存的簡短文本信息
Session對象就是服務器為客戶端創建並維護的用於存放客戶狀態數據的對象
用戶會禁用Cookie。這時我們可以使用URL地址重寫來解決
通過HttpServletResponse的addCookie方法將該Cookie信息添加到響應信息中
Session對象是某個Servlet調用HttpServletRequest.getSession()這樣的語句時才被創建
Session對象是保存在服務器端,瀏覽器關閉時並不意味著Session對象被刪除
Session只認SessionID不認人
應當盡量使用維護時間短的域對象
在向客戶返回第一個響應時,會同時嘗試設置Cookie和URL重寫兩種做法
java Web(4)