`

显示在线用户

阅读更多
方法一:

用application对象。 
简单描述如下: 
当用户登录时维护一个会话对象:UserInfo类的实例,同时UserInfo类实现javax.servlet.http.HttpSessionBindingListener接口: 
import java.util.Map; 
import java.util.HashMap; 
import javax.servlet.http.*; 
import javax.servlet.ServletContext; 

public class UserInfo implements HttpSessionBindingListener { 
// 用户信息 
int userId; 
String userName; 
...... 

/** 
* 当UserInfo类被绑定到session中时触发这个事件 
* 具体信息请参见Servlet/JSPs的规范 
*/ 
public void valueBound(HttpSessionBindingEvent event) { 
HttpSession session = event.getSession (); 
ServletContext ctx = session.getServletContext (); 
Map map = (Map)ctx.getAttribute ("users"); 
if (map == null) { // 如果是服务器启动后的第一个登录用户,新建一个容器 
map = new HashMap (); 
ctx.setAttribute ("users", map); 
} 

map.put (userName, this); // 把自己加入容器中 
} 

/** 
* 当UserInfo类从session中删除时触发这个事件 
* 具体信息请参见Servlet/JSPs的规范 
*/ 
public void valueUnbound(HttpSessionBindingEvent event) { 
HttpSession session = event.getSession (); 
ServletContext ctx = session.getServletContext (); 
Map map = (Map)ctx.getAttribute ("users"); 
map.remove (this); // 把自己从容器中删除 
} 

...... 
} 

以后在JSP中就可以这样显示在线用户数了: 
<% 
int userCount = 0; 
java.util.Map map = (java.util.Map)application.getAttribute ("users"); 
if (map == 0) userCount = 0; 
else userCount = map.size (); 
%>; 

当然你也可以不实现javax.servlet.http.HttpSessoinBindLisenter接口,而用自己的程序来实现这个功能,但这种方法最保险,也最简单。
如果用户关掉浏览器,过一段时间后session就会超时,这时发触发valueUnbound事件

方法二:
servlet:
package SessionCount;
import javax.servlet.*;
   import javax.servlet.http.*;
   public class SessionCounter implements HttpSessionListener {
   private static int activeSessions = 0;
   public void sessionCreated(HttpSessionEvent se) {
   activeSessions++;
   }
   public void sessionDestroyed(HttpSessionEvent se) {
   if(activeSessions > 0)
   activeSessions--;
   }
   public static int getActiveSessions() {
   return activeSessions;
   }
   }
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
   <welcome-file-list>
     <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
  
   <listener>
   <listener-class>
   SessionCount.SessionCounter
   </listener-class>
   </listener>
   
   <session-config>
   <session-timeout>1</session-timeout>
</session-config>
</web-app>
test.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="SessionCount.SessionCounter" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
   <head>
    
     <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
   </head>
  
   <body>
     在线人数:<%=SessionCounter.getActiveSessions()%>
   </body>
</html>

 

分享到:
评论

相关推荐

    lotus domino 命令显示在线用户

    lotus domino 命令显示在线用户

    Java聊天室(界面完整,群聊,私聊,用户列表)

    Java聊天室是一个基于Java编程语言实现的实时通讯应用,它具备完整的用户界面,支持群聊和私聊功能,并且能够显示在线用户列表。这个项目利用了Socket编程来实现实时的数据传输,为用户提供了一个交互性强、功能丰富...

    spring boot用户注册上传头像并在及时页面上显示

    这样,当页面加载时,用户上传的头像就能即时显示出来。 为了优化用户体验,可能还需要考虑图片的缩放或裁剪,以适应不同的展示需求。这可能需要借助第三方库如ImageMagick或Java的ImageIO类进行处理。 此外,考虑...

    15套论坛在线、用户组图标

    "15套论坛在线、用户组图标"是一个集合,专门针对论坛社区设计,旨在增强交互性和视觉吸引力。这些图标通常用于表示论坛用户的在线状态、权限级别或者用户组,使论坛更加生动有趣,易于理解和导航。 首先,我们来...

    Windows服务(Windows Service,system权限)程序显示界面与用户交互(xp,win7通用)

    一般情况下windows的服务程序运行权限时system,不能显示可以与用户交互的界面,本文讲述了一个用vc2008创建ATL的service,并在服务启动时启动一个可以显示出来,并且可以与用户交互的notepad窗口,同理你可以用此...

    百度地图显示多点坐标并连线显示用户轨迹

    读取移动端存入数据库的坐标位置信息显示在百度地图上并连线显示用户轨迹。 程序为mysql数据库,location.sql为数据库导出文件 数据库连接信息见BaiduMap\src\com\pandora\db\SqlConnection.java 运行环境:...

    0.96寸OLED显示屏用户资料

    0.96寸OLED显示屏用户资料,包含程序和技术资料。

    pb graph显示数值

    总之,`pb graph显示数值`涉及到了图形用户界面设计中的数据可视化原理,以及如何在PowerBuilder中利用其图形和事件处理机制来提升用户体验。熟练掌握这些技巧,可以帮助你创建出更加直观、用户友好的数据分析应用。

    C#WinForm用户控件间相互传值

    程序功能是:当在第一个用户控件文本框里输入信息后会及时的把信息显示到第二个用户控件的DataGridView数据显示控件指定的列上,在第二个用户控件上的文本框中输入信息也及时显示到本用户控件的DataGridView指定的列...

    PB-数据库保存图片并在Datawindow中显示

    4. **picture.pbl**:这是一个PowerBuilder库文件,可能包含了用于处理图片显示的用户对象或者定制的DataWindow对象。PBL(PowerBuilder Library)是PB中的类库,包含了一系列可重用的对象,如窗口、菜单、按钮等。 ...

    Android锁屏状态下显示Activity

    在Android系统中,有时开发者需要在用户设备锁屏的状态下显示特定的Activity,以提供更为直接的用户交互体验。比如来电提醒、紧急通知或者闹钟等。这些功能的实现涉及到了Android系统的电源管理、窗口管理和通知策略...

    Matlab Simulink三维图形显示模块

    总之,“Matlab Simulink三维图形显示模块”涵盖了Simulink中的自定义S函数开发、三维可视化、混沌系统建模等多个核心概念,为用户提供了一种强大且灵活的方式来展示和理解复杂系统的动态特性。通过深入学习和实践...

    chart游标跟随并悬停显示ToolTip

    在用户将鼠标指针悬停在图表的特定数据点上时,会弹出一个ToolTip,显示该点对应的数据信息,同时游标会自动对准该点,方便用户查看和分析。 1. **游标跟随(Cursor Follow)**: 游标跟随功能允许图表的游标...

    LedPlay显示屏编辑系统 3.1

    【LedPlay显示屏编辑系统 3.1】是一个专为LED显示屏设计的专业编辑工具,它集成了多种功能,旨在帮助用户创建、编辑和管理LED显示内容。这个系统版本为3.1,相较于之前的版本可能包含了一些优化和新特性,旨在提高...

    Qt自定义QLabel滚动显示文本文字,label可根据文本长度自动开启滚动显示

    `main.cpp`是项目的主入口点,它创建并显示对话框,使得用户可以观察到滚动文本的效果。`TestLabelRolling.pro`是项目配置文件,包含了编译和链接所需的Qt模块和编译选项。`TestLabelRolling.pro.user`可能存储了...

    图片显示特效javascript

    在网页设计中,图片显示特效是提升用户体验和网站视觉吸引力的重要手段之一。JavaScript,作为客户端脚本语言,常被用来实现这些动态效果。本主题主要围绕"图片显示特效javascript"展开,探讨如何利用JavaScript实现...

    duilib 显示gif图片

    在本主题中,我们将深入探讨如何使用Duilib显示GIF动态图片,这在创建交互式用户界面时非常有用,特别是在游戏、动画或者需要动态反馈的软件中。 首先,我们要知道GIF是一种支持动画的图像格式,它可以存储多帧图像...

    qt 实现数据库操作和显示

    在本文中,我们将深入探讨如何使用Qt框架来实现数据库操作并将其结果显示在用户界面上,主要关注"模型视图"架构。Qt是一个功能强大的C++工具包,广泛应用于图形用户界面(GUI)开发,同时也提供了丰富的数据库接口。...

    js时间控件大全 只显示年月

    开发者可能使用了自定义事件监听器和DOM操作来响应用户的交互,更新显示的值。此外,控件可能还实现了格式化函数,将选定的年月转换为指定的字符串格式,如"YYYY-MM"。 第二个时间控件专注于显示年月,可能更加简洁...

    Qt实现窗体在显示屏旁边自动隐藏/显示

    "Qt实现窗体在显示屏旁边自动隐藏/显示"这个话题涉及到的是如何让一个Qt窗口根据用户的操作或者系统状态,智能地出现在屏幕边缘或者隐藏起来,提供一种类似QQ等即时通讯软件的用户体验。这种功能可以增加应用的便捷...

Global site tag (gtag.js) - Google Analytics