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 && name.length()!=0) 
{ 
if(onlineuser.deleteUser(name))  
  out.println(name+"已经退出系统!");  
else  
  out.println(name+"没有登陆到系统!");  
} 
%> 
</body> 
</html>

online.jsp

<%@ page contentType="text/html;charset=GB2312" pageEncoding="GBK"%> 
<[email protected] import="com.trs.onLineUser,java.util.*" %> 
<html> 
</body> 
<% 
String name=request.getParameter("name"); 
String password=request.getParameter("password"); 
 
if(name!=null && password!=null) 
{ 
Cookie cookie1=new Cookie("name", name);  
cookie1.setMaxAge(100000); 
response.addCookie(cookie1); 
 
Cookie cookie2=new Cookie("password", password);  
cookie2.setMaxAge(100000); 
response.addCookie(cookie2); 
out.println("完成书写Cookie!"); 
} 
else 
{ 
out.println("书写失败!"); 
} 
%> 
</body> 
</html>

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

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/10963.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论