返回顶部

收藏

Jsp使用HttpSessionBindingListener实现在线人数记录

更多

onLineUser.java 继承HttpSessionBindingListener实现在线人数记录功能

package com.trs;

import java.util.*;  
import javax.servlet.http.*;  
import javax.servlet.*;  

/**
*HttpSessionBindingListener接口有两方需要实现的方法:
*public synchronized void valueBound(HttpSessionBindingEvent httpsessionbindingevent)
*public synchronized void valueUnbound(HttpSessionBindingEvent httpsessionbindingevent)
*Session创建的时候Servlet容器将会调用valueBound方法;Session删除的时候则调用valueUnbound方法.
*/
public class onLineUser implements HttpSessionBindingListener
{  
    public onLineUser()
    { 
    } 

    //保存在线用户的向量
    private Vector users=new Vector();

    //得到用户总数
    public int getCount()
    { 
        users.trimToSize(); 
        return users.capacity(); 
    }

    //判断是否存在指定的用户
    public boolean existUser(String userName)
    { 
        users.trimToSize(); 
        boolean existUser=false; 
        for (int i=0;i
        { 
            if (userName.equals((String)users.get(i)))
            {
                existUser=true; 
                break;
            }
        }
        return existUser; 
    }

    //删除指定的用户
    public boolean deleteUser(String userName)
    { 
        users.trimToSize(); 
        if(existUser(userName))
        { 
            int currUserIndex=-1; 
            for(int i=0;i
            { 
                if(userName.equals((String)users.get(i)))
                { 
                    currUserIndex=i; 
                    break; 
                } 
            } 
            if (currUserIndex!=-1)
            { 
                users.remove(currUserIndex); 
                users.trimToSize(); 
                return true; 
            } 
        } 
        return false; 
    }

    //得到当前在线用户的列表
    public Vector getOnLineUser() 
    {
        return users; 
    } 

    public void valueBound(HttpSessionBindingEvent e)
    {  
        users.trimToSize(); 
        if(!existUser(e.getName()))
        { 
            users.add(e.getName()); 
            System.out.print(e.getName()+"\t  登入到系统\t"+(new Date())); 
            System.out.println("     在线用户数为:"+getCount()); 
        }else 
            System.out.println(e.getName()+"已经存在"); 
    }  

    public void valueUnbound(HttpSessionBindingEvent e)
    {  
        users.trimToSize(); 
        String userName=e.getName(); 
        deleteUser(userName); 
        System.out.print(userName+"\t  退出系统\t"+(new Date())); 
        System.out.println("     在线用户数为:"+getCount()); 
    }
}  

logout.jsp

<%@ page contentType="text/html;charset=GB2312" pageEncoding="GBK"%>
<%@ page import="com.trs.onLineUser,java.util.*" %>  
<jsp:useBean id="onlineuser" class="com.trs.onLineUser" scope="application"/> 
<html>
<head>
<title>show</title>
</head>  
<body>
<%  
String name=(String)session.getValue("name");
if(name!=null &amp;&amp; name.length()!=0)
{
if(onlineuser.deleteUser(name)) 
  out.println(name+"已经退出系统!"); 
else 
  out.println(name+"没有登陆到系统!"); 
}
%>
</body>
</html>

online.jsp

None

需要说明的是这种方式适合只有单台服务器的小网站使用,如果网站有多台webserver则不能使用这种方式记录在线人数。

标签:java

收藏

0人收藏

支持

0

反对

0

发表评论