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

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

          日歷

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          我參與的團隊

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 358310
          • 排名 - 155

          Listener 監聽器的整理

          Posted on 2009-09-01 22:47 Gavin.lee 閱讀(448) 評論(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) {}

          主站蜘蛛池模板: 兴安盟| 太康县| 西安市| 武城县| 武邑县| 台南市| 东安县| 滦平县| 卢湾区| 泸州市| 泾川县| 互助| 舟曲县| 牡丹江市| 南投县| 灵川县| 新兴县| 荥阳市| 贺兰县| 嘉义县| 项城市| 突泉县| 长武县| 德保县| 杭州市| 和硕县| 泾源县| 兴山县| 东光县| 长乐市| 崇礼县| 汝城县| 邵阳县| 剑川县| 承德市| 西峡县| 广南县| 中宁县| 高陵县| 六枝特区| 大宁县|