無線&移動互聯網技術研發

          換位思考·····
          posts - 19, comments - 53, trackbacks - 0, articles - 283
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          日歷

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          我參與的團隊

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 357827
          • 排名 - 155

          Listener 監聽器的整理

          Posted on 2009-09-01 22:47 Gavin.lee 閱讀(446) 評論(0)  編輯  收藏 所屬分類: web 積累(前端 + 后臺)
          package com.Gavin.tools.sessioncount;

          import java.util.ArrayList;
          import java.util.List;
          import javax.servlet.ServletContext;
          import javax.servlet.http.HttpSession;
          import javax.servlet.http.HttpSessionBindingEvent;
          import javax.servlet.http.HttpSessionBindingListener;

          /**
           * 不需要在web.xml中部署
           * 向session綁定一個屬性時調用。
           * 每一個會話過程均啟動一個監聽器
           * HttpSessionBindingListener必須實例化后放入某一個session中,才可以進行監聽。 
           * session.setAttribute("listener",sessionListener);  將監聽器植入HttpSession,這將激發監聽器調用valueBound方法
           * 
           *         session.removeAttribute("listener")
           *         Session Time Out
           *         session.invalidate()
           *         session.setAttribute("onlineUserListener", "其他對象"); 即可自動調用監聽器的valueUnbound方法。
           
          */


          public class HttpSessionBindingEventTest implements HttpSessionBindingListener {

              
          public String username;
              
              
          public HttpSessionBindingEventTest(String username) {
                  
          this.username = username;
              }

              
              List onlineUserList 
          = null;
              
              
          public void valueBound(HttpSessionBindingEvent event) {
                  HttpSession session 
          = event.getSession();
                  ServletContext application 
          = session.getServletContext();
                  
          // 把用戶名放入在線列表
                  List onlineUserList = (List) application.getAttribute("onlineUserList");
                  
          // 第一次使用前,需要初始化
                  if (onlineUserList == null{
                      onlineUserList 
          = new ArrayList();
                      application.setAttribute(
          "onlineUserList", onlineUserList);
                  }

                  onlineUserList.add(
          this.username);
                  
                  
          //username已經通過構造方法傳遞給 listener,在數據綁定時,可以直接把它放入用戶列表。
              }


              
          public void valueUnbound(HttpSessionBindingEvent event) {
                  HttpSession session 
          = event.getSession();
                  ServletContext application 
          = session.getServletContext();// 從在線列表中刪除用戶名  
                  List onlineUserList = (List) application.getAttribute("onlineUserList");
                  onlineUserList.remove(
          this.username);
              }

              
              
          public List getOnlineCount() {
                  
          return onlineUserList;
              }

          }


          //把用戶名放入在線列表
          //session.setAttribute("onlineUserList", new HttpSessionBindingEventTest(username));



          HttpSessionListener:一旦,進入一個網站,這個網站就自動為瀏覽器分配一個session,調用sessionCreated(),當session過期或銷毀時候,調用sessionDestroyed,這時候有兩種方法:session.invalidate();和等待session自動過期。

          <session-config>      
               
          <session-timeout>1</session-timeout>   
          </session-config> 

          #session過期時間,時間單位是一分鐘,并且只能是整數,如果是零或負數,那么會話就永遠不會超時。    
           public void sessionCreated(HttpSessionEvent arg0) {}
           public void sessionDestroyed(HttpSessionEvent arg0) {} 
          例:http://www.aygfsteel.com/jzone/articles/284193.html

          HttpSessionAttributeListener:在向session增加、刪除和修改屬性時調用
           public void attributeAdded(HttpSessionBindingEvent arg0) {}
           public void attributeRemoved(HttpSessionBindingEvent arg0) {}
           public void attributeReplaced(HttpSessionBindingEvent arg0) {}


          HttpSessionActivationListener:分布式環境下Session激活和失活時調用
           public void sessionDidActivate(HttpSessionEvent arg0) {}
           public void sessionWillPassivate(HttpSessionEvent arg0) {}


          ServletContextListener:在一個application啟動和結束時調用 
           public void contextDestroyed(ServletContextEvent arg0) {}
           public void contextInitialized(ServletContextEvent arg0) {}
          例:http://www.cnblogs.com/jackyrong/archive/2006/09/04/494759.html
          http://www.qqgb.com/Program/Java/JavaBlog/Program_145756.html


          ServletContextAttributeListener:在向application增加、刪除和修改 Attributes時調用
           public void attributeAdded(ServletContextAttributeEvent arg0) {}
           public void attributeRemoved(ServletContextAttributeEvent arg0) {}
           public void attributeReplaced(ServletContextAttributeEvent arg0) {}

          主站蜘蛛池模板: 常宁市| 抚顺县| 铜山县| 淮阳县| 三亚市| 孟村| 临泉县| 新宾| 大名县| 宜城市| 延边| 孟村| 班戈县| 尼玛县| 囊谦县| 会理县| 金堂县| 丹寨县| 邓州市| 高邮市| 江城| 广汉市| 尤溪县| 天镇县| 沙雅县| 汤阴县| 彩票| 泰宁县| 揭东县| 明星| 阜南县| 平南县| 视频| 滨海县| 宜城市| 遵义县| 荥经县| 仁布县| 临夏市| 永寿县| 儋州市|