国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

session

2019-11-08 03:20:51
字體:
來源:轉載
供稿:網友

     servlet容器為每一個Httpsession對象分配一個唯一標志符sessionID。

     會話流程:

     1.一個瀏覽器第一次訪問支持session的網頁,查找有沒有sessionId的cookie。沒有就創建一個HttpSession對象,分配一個 SessionID,寫到cookie中保存在客戶端。

     2.不是第一次訪問,發現有了sessionID的cookie,所以就不會創建新的HttpSession對象。然后就去查找sessionID對應的HttpSession對象。進行操作。

     3.重復第2步,直到session銷毀。

     jsp頁面默認情況是支持session的。也可以關閉

<%@ page session="false"%>//加上這一句就不支持session,也就不會創建Httpsession對象。HttpSession接口方法

getId()//返回sessionidinvalidate()//銷毀httpsession對象setAttribute(name,value)getAttribute(name)getAttributeNames()//得到所有的屬性removeAttribute(name)isNew()//是不是新創建的setMaxInactiveInterval(int interval)//設置不活動狀態的最長時間,超過時間銷毀對象,設置負數表示永遠不過期getMaxInactiveInterval()getServletContext()以下幾種情況會話會被銷毀。

1.瀏覽器進程終止。要等到會話過期才會銷毀。

2.服務器執行HttpSession對象的invalidate()方法。

3.會話過期。tomcat默認1800秒。可以設置不過期。       tomcat關閉不會銷毀會話,而是持久化到永久花的存儲設備中。重啟后重新加載會話。可以設置tomcat屬性關閉這種情況。

       Jsp默認支持會話,所以有隱含對象session來直接訪問HttpSession。HttpServlet默認不支持會話。可以通過HttpServletRequest來得到HttpServlet對象。

getSession():使得當前HttpServlet支持會話。如果沒有HttpSession對象就創建一個。有就返回原來的對象。

getSession(boolean create)為true,跟getSession()一樣。false會話不存在就返回null,存在就返回原來的對象。

         支持會話,瀏覽器不支持cookie時可以用HttpServletResponse.encodeURL(string url)來重寫url。就是在url后面加sessionid來判斷是不是用一用戶,其他情況直接使用url。

會話的持久化

       某些情況下,httpSession對象會被持久化到永久化的存儲設備中(數據庫或硬盤)。用到的時候再加載到內存。使用的是java對象序列化技術。

持久化的兩個好處:

1.節省內存空間。把不活動的HttpServlet對象保存到存儲設備中,可以提高內存資源的利用率。

2.服務器重啟后能恢復會話。

會話的兩個狀態:

運行時狀態:對象處于內存中,分為不活動狀態和活動狀態。

持久化狀態:對象位于存儲設備中。

會話從運行時狀態改為持久化狀態叫做擱置或者持久化。一下幾種情況會被擱置。

1.服務器終止。

2.會話處于不活動狀態太久了。超過了限定值。

3.web應用處于活動狀態的會話太多超過了限定值,部分會話會被擱置

會話從持久化到運行時狀態叫做激活或者加載

1.服務器重啟。

2.一個會話的客戶端發送HTTP請求。

 會話的持久化是依靠servlet容器的,tomcat的會話管理器有兩種。

1.標準會話管理器StandardManager

         這是默認的標準會話管理器,實現機制為:服務器終止,被終止的應用會被持久化。重啟是會激活對象。

2.持久化會話管理器

更靈活,功能:

1.服務器關閉,持久化對象,重啟記載對象。

2.具有容錯功能:及時備份對象(持久化)。服務器意外關閉可以恢復對象。

3.可以控制內存會話數目,將部分會話持久化。

會話的監聽

在servlet api定義了4個監聽器接口

1.HttpSessionListener:監聽創建和銷毀會話的事件。

sessionCreate(HttpSessionEvent event)創建會話后,調用。sessionDestroyed(HttpSessionEvent event)銷毀會話之前,調用。

2.HttpServletAttributeListener:監聽加入屬性,替換屬性,刪除屬性的事件。

attributeAdded(HttpSessionBindingEvent event):加入屬性時,調用。attributeRemoved(HttpSessionBindingEvent event):刪除屬性時,調用。attributeReplaced(HttpSessionBindingEvent event):替換屬性時,調用。3.HttpSessionBindingListener監聽會話和屬性綁定或解除綁定的事件。

valueBound(HttpSessionBindingEvent event)綁定后執行valueUnbound(HttpSessionBindingEvent event)解除綁定前執行4.HttpSessionActivationListener:監聽激活或者擱置的事件。

sessionDidActivate(HttpSessionEvent event)激活后 調用sessionWillPassivate(HttpSessionEvent event)擱置之前調用

1和2要在web.xml中<listener>中配置,用一個類實現這兩個接口然后配置<listener><listener-class>實現類路徑</listener-class></listener>。

3和4只要一個類實現接口就行了,session.setAttribute("name",實現類)就會觸發綁定事件。用HttpSessionListener統計在線人數

 每創建一個session就是數量加1,銷毀就數量減一。把數量保存在servletContext中(event.getSession().getServletContext())。這個接口的兩個方法干好可以用到。不過要在web.xml里面配置監聽器。這個統計的是HttpSession對象的數量,其實不是真正的在線人數。也無法統計在線人數的具體名單。

用HttpSessionBindingListener統計在線人數

         用一個類實現這個接口,然后綁定的時候把名字傳到一個公共的類中(這個類有一個static final 自己類=new 自己類這樣就可以確保這個類不會重復創建,然后用一個方法返回這個類對象),就可以從list中取到用戶的名字。統計的也是session對象數量不過可以綁定屬性。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 彩票| 班玛县| 榆社县| 新绛县| 江山市| 东宁县| 商南县| 纳雍县| 岑巩县| 滕州市| 南部县| 洛阳市| 枣庄市| 汾西县| 滦南县| 元朗区| 阜新市| 红河县| 连云港市| 龙泉市| 灵台县| 台山市| 南丹县| 朝阳县| 肥东县| 武宁县| 岐山县| 沽源县| 江津市| 泸州市| 卫辉市| 莱州市| 嵊泗县| 鲜城| 柯坪县| 惠来县| 遵义市| 海淀区| 维西| 连云港市| 江源县|