it167.com  设为主页
 收藏本站
 
  资讯:业界动态 | 软件动态 | 人物专栏 | 安全资讯 | 网络生活 | 电子商务 | 小游戏 | 视频 | 美女图片 | 音乐
  网络编程 | 网站运营 | 网页制作 | 图形图象 | 操作系统 | 媒体动画 | 软件教学 | 网络应用 | 邮件系统 | 网络安全 | 认证考试
asp | .net | php | jsp | Sql | java | Dreamweaver | FrontPages | Javascript | css | Coreldraw | photoshop | Flash | Coreldraw
当前位置: > 主页>网络编程>Java>JAVA开发技巧>jsp 下实现防止重复在线,统计在线人数的办法
最新新闻

·机会与整合 边缘化互联
·TOM-Skype新增三大本地
·雅虎抢闸邮箱竞赛 网易
·新浪抢攻北京奥运
·洞悉网络口碑的掘金机会
·拆解网络病毒黑金交易
·木马下载器近期出现新变
·《互联网周刊》第17期文
·Web2.0是否催生自吹自擂
·三张宝宝裸照招来MSN封
热门新闻
·一个必看的Java程序
·存储过程
·构建自己的基于Java的超
·构建自己的基于Java的超
·Web应用中的中文问题
·学习MySQL常用操作命令
·MySQL中修改密码及访问
·Hibernate 3新增XML关系
·java实现ftp下载文件
·简单说说SpringFramewor
推荐新闻
 
 

jsp 下实现防止重复在线,统计在线人数的办法  

作者:   来源:   点击:   日期:2007-12-04

jsp 下实现防止重复在线,统计在线人数的办法
关键字:不详

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

 



文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·一个必看的Java程序 ·存储过程
·构建自己的基于Java的超级计算机 ·构建自己的基于Java的超级计算机
·Web应用中的中文问题 ·学习MySQL常用操作命令

   文章评论:(0条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:it167  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。