方法一:
用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>
分享到:
相关推荐
通过客户端发送心跳包,包内容为用户名 和发送时间,服务端接受后返回给客户端,同时根据用户名和发送时间对在线列表 维护,并刷新在线用户。 可以开启多个客户端 同时连接 服务端,测试时需要在用户名一栏 输入...
C#用户信息显示并注册C#用户信息显示并注册C#用户信息显示并注册C#用户信息显示并注册C#用户信息显示并注册C#用户信息显示并注册C#用户信息显示并注册C#用户信息显示并注册C#用户信息显示并注册C#用户信息显示并注册...
在线用户小工具 humhub-modules-onlineusers 向仪表板添加小部件以显示在线用户。 管理员可以设置彩色边框。 安装 在您的protected/modules/文件夹中克隆或上传为onlineusers 。
Java聊天室是一个基于Java编程语言实现的实时通讯应用,它具备完整的用户界面,支持群聊和私聊功能,并且能够显示在线用户列表。这个项目利用了Socket编程来实现实时的数据传输,为用户提供了一个交互性强、功能丰富...
本文档详细地介绍wincc flexible用户登录、注销及显示的操作步骤,简单明了易操作。
<br>2、服务器特点:1)实现GUI界面,可选择端口运行或关闭服务器,可设置最大连接数 <br> 2)在GUI记录运行日志,同时日志被保存在log文件中 <br> 3)显示在线用户,可以强制任意用户下线 <br> 4)可...
这样,当页面加载时,用户上传的头像就能即时显示出来。 为了优化用户体验,可能还需要考虑图片的缩放或裁剪,以适应不同的展示需求。这可能需要借助第三方库如ImageMagick或Java的ImageIO类进行处理。 此外,考虑...
"15套论坛在线、用户组图标"是一个集合,专门针对论坛社区设计,旨在增强交互性和视觉吸引力。这些图标通常用于表示论坛用户的在线状态、权限级别或者用户组,使论坛更加生动有趣,易于理解和导航。 首先,我们来...
一般情况下windows的服务程序运行权限时system,不能显示可以与用户交互的界面,本文讲述了一个用vc2008创建ATL的service,并在服务启动时启动一个可以显示出来,并且可以与用户交互的notepad窗口,同理你可以用此...
获取到用户注册信息后,我们可以在第二个JSP页面上显示这些信息。这可以通过直接输出或者使用HTML元素来完成,例如: ```jsp 用户名:${username} ``` 使用EL(Expression Language)表达式可以方便地访问请求...
0.96寸OLED显示屏用户资料,包含程序和技术资料。
总之,`pb graph显示数值`涉及到了图形用户界面设计中的数据可视化原理,以及如何在PowerBuilder中利用其图形和事件处理机制来提升用户体验。熟练掌握这些技巧,可以帮助你创建出更加直观、用户友好的数据分析应用。
4. **picture.pbl**:这是一个PowerBuilder库文件,可能包含了用于处理图片显示的用户对象或者定制的DataWindow对象。PBL(PowerBuilder Library)是PB中的类库,包含了一系列可重用的对象,如窗口、菜单、按钮等。 ...
程序功能是:当在第一个用户控件文本框里输入信息后会及时的把信息显示到第二个用户控件的DataGridView数据显示控件指定的列上,在第二个用户控件上的文本框中输入信息也及时显示到本用户控件的DataGridView指定的列...
在Android系统中,有时开发者需要在用户设备锁屏的状态下显示特定的Activity,以提供更为直接的用户交互体验。比如来电提醒、紧急通知或者闹钟等。这些功能的实现涉及到了Android系统的电源管理、窗口管理和通知策略...
在用户将鼠标指针悬停在图表的特定数据点上时,会弹出一个ToolTip,显示该点对应的数据信息,同时游标会自动对准该点,方便用户查看和分析。 1. **游标跟随(Cursor Follow)**: 游标跟随功能允许图表的游标...
总之,“Matlab Simulink三维图形显示模块”涵盖了Simulink中的自定义S函数开发、三维可视化、混沌系统建模等多个核心概念,为用户提供了一种强大且灵活的方式来展示和理解复杂系统的动态特性。通过深入学习和实践...
在本主题中,我们将深入探讨如何使用Duilib显示GIF动态图片,这在创建交互式用户界面时非常有用,特别是在游戏、动画或者需要动态反馈的软件中。 首先,我们要知道GIF是一种支持动画的图像格式,它可以存储多帧图像...
在Android开发中,有时我们可能需要创建具有独特设计和功能的对话框,以满足特定的用户界面需求。这里我们将深入探讨两种实现自定义显示内容的Dialog的方法:继承Dialog和继承PopupWindow。 首先,我们来看继承...
`main.cpp`是项目的主入口点,它创建并显示对话框,使得用户可以观察到滚动文本的效果。`TestLabelRolling.pro`是项目配置文件,包含了编译和链接所需的Qt模块和编译选项。`TestLabelRolling.pro.user`可能存储了...