<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    甜咖啡

    我的IT空間

    servlet監(jiān)聽器判斷用戶的session是否還存

    //   SessionListener.java    
       
         
       
      import  
    java.io.*;    
       
      import   java.util.*;    
       
      import  
    javax.servlet.http.*;    
       
         
       
      //監(jiān)聽登錄的整個過程    
     
     
      public   class   SessionListener   implements    
       
       
     
    HttpSessionBindingListener    
       
      {    
       
         
       

      public   String   privateInfo="";   //生成監(jiān)聽器的初始化參數(shù)字符串    
       
     
    private   String   logString="";   //日志記錄字符串    
       
      private   int  
    count=0;   //登錄人數(shù)計(jì)數(shù)器    
       
         
       
      public  
    SessionListener(String   info){    
       
      this.privateInfo=info;    

       
      }    
       
         
       
      public   int   getCount(){  
     
       
      return   count;    
       
      }    
       
         
     
     
      public   void   valueBound(HttpSessionBindingEvent   event)    
       

      {    
       
      count++;    
       
      if  
    (privateInfo.equals("count"))    
       
      {    
       
      return;    

       
      }    
       
      try{    
       
      Calendar   calendar=new
      GregorianCalendar();    
       
     
    System.out.println("LOGIN:"+privateInfo+"    
       
       
     
    TIME:"+calendar.getTime());    
       
      logString="\nLOGIN:"+privateInfo+"
      TIME:"+calendar.getTime()  
       
       
      +"\n";    
       
     
    for(int   i=1;i<1000;i++){    
       
      File   file=new  
    File("yeeyoo.log"+i);    
       
      if(!(file.exists()))    
       
     
    file.createNewFile();   //如果文件不存在,創(chuàng)建此文件    
       
     
    if(file.length()>1048576)   //如果文件大于1M,重新創(chuàng)建一個文件    
       
      continue;  
     
       
      FileOutputStream   foo=new   FileOutputStream  
       
       

      ("yeeyoo.log"+i,true);//以append方式打開創(chuàng)建文件    
       
     
    foo.write(logString.getBytes(),0,logString.length());   //寫入日志  
       
       

      字符串    
       
      foo.close();    
       
      break;//退出    
     
     
      }    
       
      }catch(FileNotFoundException   e){}    
       

      catch(IOException   e){}    
       
      }    
       
         
       

      public   void   valueUnbound(HttpSessionBindingEvent   event)    
       

      {    
       
      count--;    
       
      if  
    (privateInfo.equals("count"))    
       
      {    
       
      return;    

       
      }    
       
      try{    
       
      Calendar   calendar=new
      GregorianCalendar();    
       
     
    System.out.println("LOGOUT:"+privateInfo+"    
       
       
     
    TIME:"+calendar.getTime());    
       
    logString="\nLOGOUT:"+privateInfo+" TIME:"+calendar.getTime()
       
     
     
      +"\n";    
       
      for(int   i=1;i<1000;i++){    
       
     
    File   file=new   File("yeeyoo.log"+i);    
       
      if(!(file.exists()))  
     
       
      file.createNewFile();   //如果文件不存在,創(chuàng)建此文件    
       
     
    if(file.length()>1048576)   //如果文件大于1M,重新創(chuàng)建一個文件    
       
      continue;  
     
       
      FileOutputStream   foo=new   FileOutputStream  
       
       

      ("yeeyoo.log"+i,true);//以append方式打開創(chuàng)建文件    
       
     
    foo.write(logString.getBytes(),0,logString.length());   //寫入日志  
       
       

      字符串    
       
      foo.close();    
       
      break;//退出    
     
     
      }    
       
      }catch(FileNotFoundException   e){}    
       

      catch(IOException   e){}    
       
      }    
       
         
       

      }    
       
         
       
      登錄日志的實(shí)現(xiàn):    
       
         
     
     
      下面再來看看我們的登錄Servlet中使用這個監(jiān)聽器的部分源代碼:    
       
      ……    
       
     
    HttpSession   session   =   req.getSession   (true);    
       
      ……    

       
    ////////////////////////////////////////////////////////////////
       
       
      ///////    
       
      SessionListener  
    sessionListener=new   SessionListener("    
       
       
     
    IP:"+req.getRemoteAddr());   //對于每一個會話過程均啟動一個監(jiān)聽器    
       
     
    session.setAttribute("listener",sessionListener);   //將監(jiān)聽器植入  
       
       

      HttpSession,這將激發(fā)監(jiān)聽器調(diào)用valueBound方法,從而記錄日志文件  
       
       
      。    

       
      ////////////////////////////////////////////////////////////////  

       
       
      ///////    
       
     
    當(dāng)系統(tǒng)退出登錄時,只需簡單地調(diào)用session.removeAttribute  
       
       
     
    (“listener”);即可自動調(diào)用監(jiān)聽器的valueUnbound方法。或者,當(dāng)  
       
       
      Session  
    Time   Out的時候也會調(diào)用此方法。    
       
         
       
         
       
     
    登錄人數(shù)的統(tǒng)計(jì):    
       
      ServletContext  
    session1=getServletConfig().getServletContext  
       
       
     
    ();//取得ServletContext對象實(shí)例    
       
     
    if((SessionListener)session1.getAttribute("listener1")==null)    
       
     
    {    
       
      SessionListener   sessionListener1=new  
    SessionListener("count");//  
       
       
     
    只設(shè)置一次,不同于上面日志文件的記錄每次會話均設(shè)置。即當(dāng)?shù)谝粋€客  
       
       
     
    戶連接到服務(wù)器時啟動一個全局變量,此后所有的客戶將使用相同的上下  
       
       
      文。    
       
     
    session1.setAttribute("listener1",sessionListener1);//將監(jiān)聽器對  
       
       

      象設(shè)置成ServletContext的屬性,具有全局范圍有效性,即所有的客戶均  
       
       
      可以取得它的實(shí)例。
       
       
      }    
       
     
    session.setAttribute("listener1",(SessionListener)  
       
       
     
    session1.getAttribute("listener1"));//取出此全局對象,并且將此對  
       
       
     
    象綁定到某個會話中,此舉將促使監(jiān)聽器調(diào)用valueBound,計(jì)數(shù)器加一。    
       
     
    在此后的程序中隨時可以用以下代碼取得當(dāng)前的登錄人數(shù):    
       
     
    ((SessionListener)session.getAttribute("listener1")).getCount()    
       

      getCount()是監(jiān)聽器的一個方法,即取得當(dāng)前計(jì)數(shù)器的值也就是登錄人數(shù)  
       
       
      了。

    修改web.xml,增加:  
       
         
       
    <listener>
       

      <listener-class>SessionListener</listener-class>    
       

      </listener>  
       
         
       
             
    <servlet-mapping>  
       
                     
    <servlet-name>SessionListener</servlet-name>  
       
             
            <url-pattern>/servlet/SessionListener</url-pattern>  
     
     
              </servlet-mapping>  
       
         
       
           
      <servlet>  
       
                     
    <servlet-name>SessionListener</servlet-name>  
       
             
            <servlet-class>SessionListener</servlet-class>  
       

      </servlet>  

    posted on 2011-07-13 16:19 甜咖啡 閱讀(1165) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    <2011年7月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    統(tǒng)計(jì)

    常用鏈接

    留言簿(1)

    我參與的團(tuán)隊(duì)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲冬月枫中文字幕在线看| 久久亚洲精精品中文字幕| 亚洲手机中文字幕| 亚洲精品视频在线观看免费| 老色鬼久久亚洲AV综合| 污视频在线观看免费| 亚洲AV福利天堂一区二区三| 无码A级毛片免费视频内谢| 久久久久亚洲av无码尤物| 久久精品视频免费| 亚洲中文无码永久免费| 18禁超污无遮挡无码免费网站国产| 亚洲国产综合在线| 我要看免费的毛片| 白白色免费在线视频| 99久久久精品免费观看国产 | 青青草a免费线观a| 亚洲精品无码久久久久| 华人在线精品免费观看| 亚洲成a人片在线观看播放| 无码中文字幕av免费放| 国产亚洲精品欧洲在线观看| 国产精品亚洲不卡一区二区三区| 中国一级特黄高清免费的大片中国一级黄色片 | 久久午夜无码免费| 国产99在线|亚洲| 国产免费观看黄AV片| a级毛片免费网站| 亚洲高清在线mv| 精品久久久久久久免费人妻| 国产成人自产拍免费视频| 亚洲国产精品成人精品无码区| 四虎在线最新永久免费| 黄色毛片免费在线观看| 婷婷久久久亚洲欧洲日产国码AV | 国产精品亚洲综合一区在线观看| 亚洲精品国产精品乱码在线观看 | 免费一级毛片正在播放| 午夜精品一区二区三区免费视频 | 6080午夜一级毛片免费看 | 亚洲乱码一二三四区麻豆|