• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

servlet/jsp 搞代码 7年前 (2018-06-18) 172次浏览 已收录 0个评论

 

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

http://www.gaodaima.com/42126.htmljsp 下实现防止重复在线,统计在线人数的

                    
                }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

欢迎大家阅读jsp 下实现防止重复在线,统计在线人数的》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:jsp 下实现防止重复在线,统计在线人数的

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址