Web 應用程序狀態管理html
經過隱藏表單域 hidden,cookie,session,重寫URL來實現;java
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值cookie
Session存在於服務器session
Session原理 3d
服務器能夠爲客戶端建立並維護一個Session對象,用於存放數據。
在建立Session對象的同時,服務器將會爲該 Session對象產生一個惟一編號,這個編號稱之爲SessionID
服務器以Cookie的方式將SessionID存放在客戶端。
當瀏覽器再次訪問該服務器時,會將SessionID做爲Cookie信息帶到服務器,服務器能夠經過該SessionID檢索到之前的Session對象,並對其進行訪問code
建立Sessionhtm
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重寫兩種作法