Servlet-平常筆記2java
會話:能夠簡單理解爲一個用戶,打開了一個瀏覽器,訪問某一個站點,訪問web資源,而後關閉瀏覽器,這個過程就是一個會話。web
會話跟蹤:HTTP是無狀態協議,也就是沒有記憶力,這就產生了問題,每一個請求之間沒法共享數據,在一個會話中,共享數據即會話跟蹤。瀏覽器
1)使用參數在請求中傳遞:在資源名稱後面添加參數。安全
格式:路徑?參數名=參數值。session
而後在須要使用該數據的地方經過request的getParameter()方法獲取該參數值。spa
2)使用Cookiecode
Cookie:把須要共享的數據,保留在客戶端(瀏覽器)中。對象
步驟:接口
/*建立Cookie*/ Cookie c = new Cookie("currentname","test"); /*添加Cookie到響應中,傳遞給瀏覽器保存*/ response對象.addCookie(c); /*在請求中獲取Cookie和數據*/ Cookie[] cs = request對象.getCookies();
/*修改Cookie指定名的value值*/
方法一:獲取Cookie對象後使用setValue()方法更改。
方法二:從新建立一個同名的Cookie,覆蓋原有的Cookie。
注意:修改以後,要調用response對象的addCookie()方法。生命週期
/*Cookie的生命週期*/
缺省狀況:關閉瀏覽器後Cookie丟失。
可經過setMaxAge(int seconds)方法來設置,可設置值爲正數、負數和0.
seconds>0:表示Cookie存活的時間。
seconds<0:表示存放在瀏覽器進程中,缺省狀況。
seconds=0:表示刪除Cookie。
/*Cookie的路徑和域範圍*/
Cookie對象.setPath(String path);
若不設置,則使用存放CookieServlet資源名的相對路徑。
Servlet跳轉時若路徑不一樣,則沒法獲取Cookies。
設置在整個應用中在請求的時候都鞋帶Cookie的方法:
Cookie對象.setPath("/");
在不一樣應用/主機之間如何共享Cookie?
經過設置域解決。
先了解一下二級域名,二級域名須要配置好虛擬主機,常見的有百度的二級域名,如music.baidu.com、tiebai.baidu.com,這些二級域名之間都會共享登錄信息。
設置域的方法:
Cookie對象.setPath("/");
Cookie對象.setDomain(".baidu.com");
3)HttpSession類
javax.servlet.http.HttpSession
HttpSession技術實際上仍是利用Cookie技術
session是一種服務端技術,把共享數據保存在服務端。(Cookie是保存在客戶端)
每個HttpSession對象,都有惟一的一個ID,是一個特殊的Cookie:
方法:
1.獲取Session對象/建立Session對象。
HttpSession s = request對象.getSession(); 等同於getSession(true).
HttpSession s = request對象.getSession(true); 若是當前有Session對象,直接返回,不然建立一個。
HttpSession s = request對象.getSession(false); 若是當前有Session對象,直接返回,不然返回null。
2.存儲數據到Session中
Session對象.setAttribute(String name, Object value);
3.從Session中獲取數據
Object val = session對象.getAttribute(String name);
4.修改session中的數據
從新設置一個同名的屬性名。
5. 刪除Session
刪除指定名稱的數據:Session對象.removeAttribute(String name);
刪除整個Session對象:Session對象.invalidate(); 經常使用於註銷登陸
6.Session拓展
封裝多個信息做爲對象存儲到Session中。
通常咱們習慣把Session對象讓他實現序列化接口(java.io.Serializable),緣由是當多態服務集羣的時候,彼此之間能夠共享Session數據。
序列化:把對象轉換爲二進制數據。
反序列化:把二進制數據恢復成對象。
該接口沒有方法。
7.Session超時管理
Session對象.setMaxInactiveInterval(int seconds);
表示上一次操做以後,指定時間內無交互,則Session會被自動銷燬。(保證安全,釋放內存)
1.參數傳遞的方法會暴露敏感信息,不可行。
2.Cookie也面臨許多問題:一個Cookie只能存儲一個簡單類型的數據,value只能存String類型,當對象有多個屬性時則不可行;Cookie的大小限制在4KB以內瀏覽器保存Cookie的個數也有限多人使用一臺電腦,也會致使信息不安全。
3.Tomcat中的Session默認超時時間爲30分鐘,通常20來分鐘就銷燬了。