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

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

          Listener 監聽器的整理

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

          主站蜘蛛池模板: 泸溪县| 东源县| 嘉荫县| 平谷区| 河南省| 垣曲县| 朝阳市| 璧山县| 宣武区| 鲁山县| 青海省| 澄江县| 武强县| 肥西县| 池州市| 钦州市| 隆安县| 东明县| 霞浦县| 卢龙县| 汽车| 红桥区| 遵义县| 蚌埠市| 马边| 芦山县| 桐乡市| 枣强县| 德安县| 万盛区| 海安县| 田林县| 平罗县| 东安县| 洛浦县| 鄂伦春自治旗| 辽中县| 平远县| 余庆县| 策勒县| 盐源县|