欢迎光临
我们一直在努力

jsp 下实现防止重复在线,统计在线人数的办法-JSP教程,Jsp/Servlet

建站超值云服务器,限时71元/月

 

防止重复在线,统计在线人数通常由三种办法: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

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » jsp 下实现防止重复在线,统计在线人数的办法-JSP教程,Jsp/Servlet
分享到: 更多 (0)