`
zhanghengfirst
  • 浏览: 9565 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

HttpSessionBindingListener获取在线用户数,同一用户登陆一次

阅读更多

项目中统计在线用户数量和同一用户只能登陆一次的需求,查询联系 HttpSessionBindingListener接口的使用,记录以备后用

下面为我的测试例子,首先建个web工程,例子中程序包括:OnLineUser.java  ,login.jsp ,logout.jsp,onLineUser.jsp四个文件

OnLineUser.java清单:

 

package pub;

/**//*
 * onLineUser类实现HttpSessionBindingListener接口
 * onLineUser类将具有HttpSessionBindingListener接口的特有属性
 * 那么HttpSessionBindingListener接口的特有属性是什么呢?
 * HttpSessionBindingListener接口具有的两个空函数
 * public void valueBound(HttpSessionBindingEvent e)
 * public void valueUnBound(HttpSessionBindingEvent e)
 * 
 * onLineUser实现一些方法:获取在线用户数
 * 
 
*/


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

public class OnLineUser implements HttpSessionBindingListener ...
   
   
public OnLineUser()...{
   }
 

   
private Vector users=new Vector();
   
public int getCount()...{
       users.trimToSize();
//调整Vector users的容量为Vector users的大小
       return users.capacity();//返回users的容量
   }

   
public boolean existUser(String userName)...{
       users.trimToSize();
       
boolean existUser=false;
       
for (int i=0;i<users.capacity();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<users.capacity();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();
       System.out.println(
"请求:::::::::::"+e.getName());
    
if(!existUser(e.getName()))...{
        users.add(e.getName());
        System.out.print(e.getName()
+"    登入到系统 "+(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
+"    退出系统 "+(new Date()));
    System.out.println(
"      在线用户数为:"+getCount());
   }
 
   
   
}
 


==========================================================================

login.jsp 清单:

 

<%...@ page contentType="text/html;charset=gb2312" %> 
<html>
<head>
<title>测试HttpSessionBindingListener接口</title>
</head>

<body>
<form name="login" method="post" action="onLineUser.jsp">
<input type=text name="username">
<input type=submit name="submit" value="登陆">
</form>
</body>
</html>

================================================================================

logout.jsp清单:

 

<%...@ page contentType="text/html;charset=gb2312" %> 
<%...@ page import="pub.OnLineUser,java.util.*" %> 
<jsp:useBean id="onlineuser" class="pub.OnLineUser" scope="application"/>
<html> 
<head> 
<title>搞定JSP在线人数</title>
</head>
<body> 
<center> 
  
<h1>登陆成功,欢迎您访问!</h1>
</center>
<%... 
   
String username=request.getParameter("username");
   
if(username!=null&&onlineuser.deleteUser(username)){
       out.println(username
+"已经退出系统!");
       session.removeAttribute(username);
       out.println(
"<script>window.location="login.jsp";</script>");
   }
else{
       out.println(username
+"已经退出系统!");
       out.println(
"<script>window.location="login.jsp";</script>");
   }
%> 
<center> 
  
<p>elapsed制作</p>
  
<p> </p>
  
<p><href="logout.jsp">退出系统</a></p>
</center> 
</body> 
</html>

 

==============================================================================

onLineUser.jsp清单

 

<%...@ page contentType="text/html;charset=gb2312" %> 
<%...@page import="java.util.*,pub.*"%>
<jsp:useBean id="onlineuser" class="pub.OnLineUser" scope="application" />
<html> 
<head> 
<title>搞定JSP在线人数</title>
</head>
<body> 
<center> 
  
<h1>登陆成功,欢迎您访问!</h1&
分享到:
评论
1 楼 aaron7524 2010-03-30  
兄弟应该用 HttpSessionListener

相关推荐

    HttpSessionBindingListener获取在线用户数(转)

    `HttpSessionBindingListener`接口提供了一种优雅的方式来跟踪用户的在线状态,从而实现统计在线用户数的功能。这篇文章将详细讲解如何利用`HttpSessionBindingListener`来获取在线用户数。 首先,我们需要理解`...

    HttpSessionBindingListener实现在线人员查看即人数统计

    因为每个在线用户都会有一个与之关联的session对象,所以每当有新的session对象被创建并绑定时,就代表有一个新用户上线。 4. **监听解绑事件**:在`valueUnbound()`方法中,减少在线人数计数。当用户注销、关闭...

    基于HttpSessionBindingListener的登陆日志

    * 我们使用了HttpSessionBindingListener来记录登陆日志信息,这是一种常见的日志记录方式。 技术要点: * HttpSessionBindingListener接口 * PreparedStatement语句 * 数据库连接池 * Java多线程机制 * SQL ...

    jsp 统计在线人数利用HttpSessionListener、HttpSessionBindingListener

    jsp 统计在线人数实例,是个完整的项目实例,部署即可查看效果! 通过使用:HttpSessionListener、HttpSessionBindingListener来实现. valueBound 方法登录触发。 valueUnbound 方法退出触发。

    HttpSessionListener 和HttpSessionBindingListener的区别 单点登录

    单点登录(Single Sign-On, SSO)是一种认证机制,允许用户在一个地方登录后,无需再次登录即可访问系统内的多个应用。在实现SSO的过程中,`HttpSessionListener`和`HttpSessionBindingListener`都可以发挥重要作用...

    Spring+Struts2+ibatis 异地登录 HttpSessionBindingListener

    我们可以自定义一个拦截器,检查每次请求的session状态,如果发现有异地登录的情况,就触发`HttpSessionBindingListener`的相关方法,通知用户已注销当前设备的登录状态。 iBatis作为持久层框架,主要用于数据库...

    利用session监听器实现一个客户不能再两个客户端登录。

    在Java Web开发中,确保用户在同一时间只能在一个设备上登录是一项重要的安全性需求。这通常通过实现Session监听器来实现。本文将深入探讨如何利用Session监听器来防止同一用户在多个客户端同时登录。 首先,理解...

    JSP统计在线人数实现

    - `valueBound(HttpSessionBindingEvent e)` 当用户登录时被调用,将用户名添加到`users`向量并更新在线用户数。 - `valueUnbound(HttpSessionBindingEvent e)` 当用户注销时被调用,从`users`向量中移除用户名并...

    源码:程序开发中,经常需要对某些事件进行监听,比如一一个网站页面可能要动态监听当前在线用户有 哪些以及在线总人数

    程序开发中,经常需要对某些事件进行监听,比如一一个网站页面可能要动态监听当前在线用户有 哪些以及在线总人数,这个就可以使用到Servlet进行监听用户的登陆退出。 3、需求分析 程序开发中,经常需要对某些事件...

    怎么保存在网站的登录状态

    - **记录登录状态**:为每个用户设置一个字段,如`online`,用来标记用户是否在线。同时记录用户的最后活动时间。 - **定期检查活动状态**:定时检查用户的活动状态,对于长时间未活动的用户,将其在线状态更新为0。...

    javaweb开发在线人数统计

    当一个用户退出登录或者 Session 超时值发生时,从在线用户名单中删除这个用户,同时将在线的总人数减 1。这个功能的完成,主要是利用一个实现了 HttpSessionBindingListener 接口的对象,当这个对象被绑定到 ...

    JSP中基于Session的在线用户统计分析

    在JSP中,基于Session的在线用户统计分析是一种常见的用户管理技术,用于追踪并记录当前正在网站上活动的用户。Session是Web应用中用来跟踪用户状态的一种机制,它允许服务器端存储特定用户会话的数据,即使用户在...

    基于ServletJSP的部门管理系统.zip

    基于ServletJSP的部门管理系统 项目简介 本项目是一个基于Servlet和JSP技术的部门管理系统,主要... 通过HttpSessionBindingListener接口监听用户会话的绑定和解除绑定事件,实时更新在线用户数量。 3. 部门管理

    在线人数统计

    - 在`result.jsp`中,我们获取`application`对象中的在线用户列表,并遍历它,将每个在线用户显示在表格中。 5. **注销流程**: - 用户点击注销链接,跳转到`logout.jsp`。 - 在`logout.jsp`中,我们从session...

    jsp完成对在线人数的统计!

    为了实时获取用户的在线状态,项目中采用了`HttpSessionBindingListener`接口。当用户登录时,该接口会被用来监听会话绑定事件,从而记录用户登录信息;当用户注销或会话超时时,监听器则会触发会话解除绑定事件,...

    用JSP程序实现统计当前在线人数

    在IT领域,特别是Web开发中,统计在线用户数量是一个常见的需求。这不仅有助于了解网站的实时访问情况,还可以用于优化服务器资源、提升用户体验等。在本文中,我们将深入探讨如何利用JSP(JavaServer Pages)技术来...

    jsp统计在线人数.txt

    - `public Vector getOnLineUser()`: 获取所有在线用户的列表。 - `public void valueBound(HttpSessionBindingEvent e)`: 当一个对象被绑定到会话时调用此方法。 - `public void valueUnbound...

    java-servlet-api.doc

    然而,一个映射可能是由一个URL和许多Servlet实例组成,例如:一个分布式的Servlet引擎可能运行在不止一个的服务器中,这样的话,每一个服务器中都可能有一个Servlet实例,以平衡进程的载入。作为一个Servlet的...

    servlet 监听器范例

    对于“人员登陆”的部分,虽然Servlet监听器本身不直接处理登录逻辑,但我们可以结合`HttpSessionBindingListener`来监控用户登录状态。当用户成功登录后,可以将用户对象绑定到会话,然后创建一个监听器来监听该...

Global site tag (gtag.js) - Google Analytics