方法一:
用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 命令显示在线用户
C#用户信息显示并注册C#用户信息显示并注册C#用户信息显示并注册C#用户信息显示并注册C#用户信息显示并注册C#用户信息显示并注册C#用户信息显示并注册C#用户信息显示并注册C#用户信息显示并注册C#用户信息显示并注册...
Java聊天室是一个基于Java编程语言实现的实时通讯应用,它具备完整的用户界面,支持群聊和私聊功能,并且能够显示在线用户列表。这个项目利用了Socket编程来实现实时的数据传输,为用户提供了一个交互性强、功能丰富...
利用select函数在linux环境下实现的一个聊天程序,满足要求: (1)用户默认出于广播模式,一个客户在其客户端发送消息,... /who:显示在线用户; /send 户名 消息:向指定用户发送点到点消息。 代码验证通过,保证能运行
这样,当页面加载时,用户上传的头像就能即时显示出来。 为了优化用户体验,可能还需要考虑图片的缩放或裁剪,以适应不同的展示需求。这可能需要借助第三方库如ImageMagick或Java的ImageIO类进行处理。 此外,考虑...
ASP.NET实现在线人员实时统计显示 做了一个简单的在线人员显示的功能,总结了一下,思路如下: 1、定义一个全局的内存来作为在线人员列表 2、通过实时判断用户Session值,来判断某个用户的登录或离线 3、对于用户的...
一般情况下windows的服务程序运行权限时system,不能显示可以与用户交互的界面,本文讲述了一个用vc2008创建ATL的service,并在服务启动时启动一个可以显示出来,并且可以与用户交互的notepad窗口,同理你可以用此...
读取移动端存入数据库的坐标位置信息显示在百度地图上并连线显示用户轨迹。 程序为mysql数据库,location.sql为数据库导出文件 数据库连接信息见BaiduMap\src\com\pandora\db\SqlConnection.java 运行环境:...
0.96寸OLED显示屏用户资料,包含程序和技术资料。
当用户点击“更多”后,按钮可能变为加载状态,显示一个加载图标或文字提示,让用户知道系统正在处理请求。加载完成后,按钮可以恢复原状,或者显示已加载的数据总数。同时,为了防止用户反复点击导致多次请求,可以...
总之,`pb graph显示数值`涉及到了图形用户界面设计中的数据可视化原理,以及如何在PowerBuilder中利用其图形和事件处理机制来提升用户体验。熟练掌握这些技巧,可以帮助你创建出更加直观、用户友好的数据分析应用。
9. UI设计:为了提升用户体验,可以考虑添加进度条控件,显示图片加载进度;还可以设置排序和过滤功能,方便用户按日期、大小等属性查看图片。 10. 最后,`GetPictureList`这个文件可能包含了实现上述功能的代码...
在线购物网站,实现了用户类型登陆,动态显示商品
4. **picture.pbl**:这是一个PowerBuilder库文件,可能包含了用于处理图片显示的用户对象或者定制的DataWindow对象。PBL(PowerBuilder Library)是PB中的类库,包含了一系列可重用的对象,如窗口、菜单、按钮等。 ...
程序功能是:当在第一个用户控件文本框里输入信息后会及时的把信息显示到第二个用户控件的DataGridView数据显示控件指定的列上,在第二个用户控件上的文本框中输入信息也及时显示到本用户控件的DataGridView指定的列...
在Android系统中,有时开发者需要在用户设备锁屏的状态下显示特定的Activity,以提供更为直接的用户交互体验。比如来电提醒、紧急通知或者闹钟等。这些功能的实现涉及到了Android系统的电源管理、窗口管理和通知策略...
总之,“Matlab Simulink三维图形显示模块”涵盖了Simulink中的自定义S函数开发、三维可视化、混沌系统建模等多个核心概念,为用户提供了一种强大且灵活的方式来展示和理解复杂系统的动态特性。通过深入学习和实践...
在用户将鼠标指针悬停在图表的特定数据点上时,会弹出一个ToolTip,显示该点对应的数据信息,同时游标会自动对准该点,方便用户查看和分析。 1. **游标跟随(Cursor Follow)**: 游标跟随功能允许图表的游标...
在Windows编程中,`CToolTipCtrl`是一个非常实用的控件,用于向用户显示简短的提示信息,通常在鼠标悬停在其他控件上时出现。标题“toolTip多行显示示例”和描述指出,我们将探讨如何扩展`CToolTipCtrl`的功能,使其...
`main.cpp`是项目的主入口点,它创建并显示对话框,使得用户可以观察到滚动文本的效果。`TestLabelRolling.pro`是项目配置文件,包含了编译和链接所需的Qt模块和编译选项。`TestLabelRolling.pro.user`可能存储了...