jsp 下實現防止重複線上,統計線上人數的辦法

來源:互聯網
上載者:User
js|統計|線上|線上人數|重複  

防止重複線上,統計線上人數通常由三種辦法:1.通過資料庫的記錄 2.使用ServletContext類型的application

3.採用session.

第一種做法較簡單但會給資料庫造成負擔.第二種做法還沒去實現.:)

本文實現了採用session的做法,基本思想就是正常登陸的時候建立一個session記錄登陸名字,此時激發監聽器。

代碼如下:

1。登陸時假設登陸名loginINFO[0],建立session記錄登陸名字。

if(rs_login.next()){
           Login_servlet.logger.info("登陸驗證成功");//log4j
             OnLineUser OLU=new OnLineUser();//
           if  (!OLU.existUser(loginINFO[0])){  
              Login_servlet.logger.info("重複登陸");
        return;
                    
                }else{ 
                      session.setMaxInactiveInterval(3000); //session的生命週期
                        session.setAttribute(loginINFO[0],OLU);   
                      
              
                } 

2.監聽器代碼:OnLineUser

/*
 * 建立日期 2005-5-12
 *
 * 目的:
 *
 */
package cn.wst.common.onLine;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
 

import org.apache.log4j.Logger;

import  java.util.*;
/**
 * @author wangshangting
 *
 * 目的:
 * 用於統計線上人數,防止統一帳號登陸,退出取消帳號
 */
public  class OnLineUser implements HttpSessionBindingListener{ 
//    private static OnLineUser instance = null;

//    synchronized public static OnLineUser getInstance()//singleton模式,確保只有一個OnLineUser執行個體
//    {
//    if( instance == null )
//    {
//        instance = new OnLineUser();
//    }
//    return instance;
//    }

   
   
    static Logger logger = Logger.getLogger(OnLineUser.class.getName());
    public  OnLineUser(){ 
    } 

    private static Vector  users=new  Vector();  //靜態變數!!!!!!!!!!!!
    private int i=1;
    public  int  getCount(){ 
     
            users.trimToSize(); 
   
            return  users.capacity(); 
    } 
    public  boolean  existUser(String  userName){ 
            users.trimToSize(); 
            boolean  existUser=true; 
            for  (int  i=0;i<users.capacity();i++  ) 
            { 
                    if  (userName.equals((String)users.get(i))) 
                    { 
                            existUser=false; 
                            OnLineUser.logger.info(users.get(i));
                            OnLineUser.logger.info("重複");
                            break; 
                    } 
            } 
            return  existUser; 
    } 

   
    public  boolean  deleteUser(String  userName)  { 
        OnLineUser.logger.info("移除開始!!");
            users.trimToSize(); 
     
            if(!existUser(userName)){ 
                    int  currUserIndex=-1; 
                    for(int  i=0;i<users.capacity();i++){ 
                            if(userName.equals((String)users.get(i))){ 
                //                OnLineUser.logger.info("找到");
                                    currUserIndex=i; 
                                    break; 
                            } 
                    } 
                    if  (currUserIndex!=-1){ 
                         OnLineUser.logger.info("移除:"+currUserIndex);
                            users.remove(currUserIndex); 
                            users.trimToSize(); 
                            return  true; 
                    } 
                   
            } 
            return  false; 
    } 

    public  Vector  getOnLineUser() 
    { 
            return  users; 
    } 
   
        public  void  valueBound(HttpSessionBindingEvent  e)  { 
            users.trimToSize(); 
   
                    users.add(e.getName()); 

                   
                    OnLineUser.logger.info(e.getName()+"\t      登入到系統\t"+(new  Date())); 
                    OnLineUser.logger.info("第"+i+"進入");
                    i++;
        
                    for(int i = 0;i < users.size();i++){
                        OnLineUser.logger.info(""+i+":"+users.get(i));
                    }
                 
                    System.out.println("            線上使用者數為:"+getCount());  
                   
           }
 
       

       
        /**
         *
         */
        public  void  valueUnbound(HttpSessionBindingEvent  e)  { 
            users.trimToSize(); 
            String  userName=e.getName(); 

            deleteUser(userName);

            OnLineUser.logger.info(userName+"\t      退出系統\t"+(new  Date())); 
            OnLineUser.logger.info("            線上使用者數為:"+getCount()); 
        } 

3. 要記得在web.xml的所有servlet之前生命 OnLineUser,

<listener>
 <listener-class>cn.wst.common.onLine.OnLineUser </listener-class>
 </listener



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.