- 浏览: 746056 次
- 性别:
- 来自: 湖北
-
文章分类
最新评论
-
SE_XiaoFeng:
用mysqldump命令行导出。这个报错唉。错误提示信息如下: ...
linux下如何导入导出MySQL数据库 -
SE_XiaoFeng:
文章写的干脆了当,我喜欢!
linux下如何导入导出MySQL数据库 -
niky6688:
网站咋打不开呢
beckham herms birki ...
【原创】上周给公司新做了一个网站,请大家审阅! -
niky6688:
哈哈
new chanel bags 2012
burbe ...
今天我抢了一个咪咪??? -
ydsakyclguozi:
...
jsp资源管理器也可能是木马
转自: http://stephen830.iteye.com/blog/338291
在系统运行中,有时候我们想了解下当前使用系统的用户,有多少人在使用系统?具体是哪些人在使用系统?
这时候,就可以通过session监听器(javax.servlet.http.HttpSessionAttributeListener 接口)的功能来实现。当用户登录系统的时候,通过特定的session属性记录下用户的登录情况。
整个过程可以分为以下4步:
第1步 准备session监听器处理类。
(如下面的SessionListener.java)
- /*
- * @(#)SessionListener.java 1.00 2009/02/20
- * CopyRight(C) stephen(zhoujianqiang AT gmail DOT com) 2009-2014, All rights reserved.
- */
- package com.stephen.filter;
- import java.util.ArrayList;
- import java.util.List;
- import javax.servlet.http.HttpSessionAttributeListener;
- import javax.servlet.http.HttpSessionBindingEvent;
- /**
- * session监听器. <br>
- * 在WEB容器的web.xml中添加本监听器的调用,具体格式如下:(其中的"[","]"分别用" <",">"替换) <br>
- *
- * <pre>
- *
- * [web-app]
- * [filter]
- * ...
- * [/filter]
- * [filter-mapping]
- * ...
- * [/filter-mapping]
- * ...
- * [listener][listener-class]com.stephen.filter.SessionListener[/listener-class][/listener]
- * ...
- * [servlet]
- * ...
- * [/servlet]
- * ...
- * [/web-app]
- *
- * </pre>
- *
- * 注意在web.xml中配置的位置. <br>
- *
- * @author stephen
- * @version 1.00
- * @see javax.servlet.http.HttpSessionAttributeListener
- */
- public class SessionListener implements HttpSessionAttributeListener {
- /**
- * 定义监听的session属性名.
- */
- public final static String LISTENER_NAME = "_login";
- /**
- * 定义存储客户登录session的集合.
- */
- private static List sessions = new ArrayList();
- /**
- * 加入session时的监听方法.
- *
- * @param HttpSessionBindingEvent
- * session事件
- */
- public void attributeAdded(HttpSessionBindingEvent sbe) {
- if (LISTENER_NAME.equals(sbe.getName())) {
- sessions.add(sbe.getValue());
- }
- }
- /**
- * session失效时的监听方法.
- *
- * @param HttpSessionBindingEvent
- * session事件
- */
- public void attributeRemoved(HttpSessionBindingEvent sbe) {
- if (LISTENER_NAME.equals(sbe.getName())) {
- sessions.remove(sbe.getValue());
- }
- }
- /**
- * session覆盖时的监听方法.
- *
- * @param HttpSessionBindingEvent
- * session事件
- */
- public void attributeReplaced(HttpSessionBindingEvent sbe) {
- }
- /**
- * 返回客户登录session的集合.
- *
- * @return
- */
- public static List getSessions() {
- return sessions;
- }
- }
- /*
- * @(#)SessionListener.java 1.00 2009/02/20
- * CopyRight(C) stephen(zhoujianqiang AT gmail DOT com) 2009-2014, All rights reserved.
- */
- package com.stephen.filter;
- import java.util.ArrayList;
- import java.util.List;
- import javax.servlet.http.HttpSessionAttributeListener;
- import javax.servlet.http.HttpSessionBindingEvent;
- /**
- * session监听器. <br>
- * 在WEB容器的web.xml中添加本监听器的调用,具体格式如下:(其中的"[","]"分别用" <",">"替换) <br>
- *
- * <pre>
- *
- * [web-app]
- * [filter]
- * ...
- * [/filter]
- * [filter-mapping]
- * ...
- * [/filter-mapping]
- * ...
- * [listener][listener-class]com.stephen.filter.SessionListener[/listener-class][/listener]
- * ...
- * [servlet]
- * ...
- * [/servlet]
- * ...
- * [/web-app]
- *
- * </pre>
- *
- * 注意在web.xml中配置的位置. <br>
- *
- * @author stephen
- * @version 1.00
- * @see javax.servlet.http.HttpSessionAttributeListener
- */
- public class SessionListener implements HttpSessionAttributeListener {
- /**
- * 定义监听的session属性名.
- */
- public final static String LISTENER_NAME = "_login";
- /**
- * 定义存储客户登录session的集合.
- */
- private static List sessions = new ArrayList();
- /**
- * 加入session时的监听方法.
- *
- * @param HttpSessionBindingEvent
- * session事件
- */
- public void attributeAdded(HttpSessionBindingEvent sbe) {
- if (LISTENER_NAME.equals(sbe.getName())) {
- sessions.add(sbe.getValue());
- }
- }
- /**
- * session失效时的监听方法.
- *
- * @param HttpSessionBindingEvent
- * session事件
- */
- public void attributeRemoved(HttpSessionBindingEvent sbe) {
- if (LISTENER_NAME.equals(sbe.getName())) {
- sessions.remove(sbe.getValue());
- }
- }
- /**
- * session覆盖时的监听方法.
- *
- * @param HttpSessionBindingEvent
- * session事件
- */
- public void attributeReplaced(HttpSessionBindingEvent sbe) {
- }
- /**
- * 返回客户登录session的集合.
- *
- * @return
- */
- public static List getSessions() {
- return sessions;
- }
- }
/* * @(#)SessionListener.java 1.00 2009/02/20 * CopyRight(C) stephen(zhoujianqiang AT gmail DOT com) 2009-2014, All rights reserved. */ package com.stephen.filter; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; /** * session监听器. <br> * 在WEB容器的web.xml中添加本监听器的调用,具体格式如下:(其中的"[","]"分别用" <",">"替换) <br> * * <pre> * * [web-app] * [filter] * ... * [/filter] * [filter-mapping] * ... * [/filter-mapping] * ... * [listener][listener-class]com.stephen.filter.SessionListener[/listener-class][/listener] * ... * [servlet] * ... * [/servlet] * ... * [/web-app] * * </pre> * * 注意在web.xml中配置的位置. <br> * * @author stephen * @version 1.00 * @see javax.servlet.http.HttpSessionAttributeListener */ public class SessionListener implements HttpSessionAttributeListener { /** * 定义监听的session属性名. */ public final static String LISTENER_NAME = "_login"; /** * 定义存储客户登录session的集合. */ private static List sessions = new ArrayList(); /** * 加入session时的监听方法. * * @param HttpSessionBindingEvent * session事件 */ public void attributeAdded(HttpSessionBindingEvent sbe) { if (LISTENER_NAME.equals(sbe.getName())) { sessions.add(sbe.getValue()); } } /** * session失效时的监听方法. * * @param HttpSessionBindingEvent * session事件 */ public void attributeRemoved(HttpSessionBindingEvent sbe) { if (LISTENER_NAME.equals(sbe.getName())) { sessions.remove(sbe.getValue()); } } /** * session覆盖时的监听方法. * * @param HttpSessionBindingEvent * session事件 */ public void attributeReplaced(HttpSessionBindingEvent sbe) { } /** * 返回客户登录session的集合. * * @return */ public static List getSessions() { return sessions; } }
注意其中的_login就是设定的特殊session属性,当然你可以改成别的名字。
第2步 将session监听器配置到web.xml中.(参考如下的web.xml配置)
- <?xml version="1.0" ?>
- <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
- <web-app>
- <listener><listener-class>com.stephen.filter.SessionListener</listener-class></listener>
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- </welcome-file-list>
- </web-app>
- <?xml version="1.0" ?>
- <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
- <web-app>
- <listener><listener-class>com.stephen.filter.SessionListener</listener-class></listener>
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- </welcome-file-list>
- </web-app>
<?xml version="1.0" ?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <listener><listener-class>com.stephen.filter.SessionListener</listener-class></listener> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>
上面的 <listener><listener-class>com.stephen.filter.SessionListener</listener-class></listener> 就是配置session监听器的。
在你的web.xml配置文件中添加上这一行就可以了(要注意添加的位置)。
第3步 当用户登录时监听用户。
当用户成功登录后执行下面的代码。
- //记入session监听器
- session.setAttribute(com.stephen.filter.SessionListener.LISTENER_NAME,new OnlineSession(request.getRemoteAddr(),userName,new Date().toString()));
- //记入session监听器
- session.setAttribute(com.stephen.filter.SessionListener.LISTENER_NAME,new OnlineSession(request.getRemoteAddr(),userName,new Date().toString()));
//记入session监听器 session.setAttribute(com.stephen.filter.SessionListener.LISTENER_NAME,new OnlineSession(request.getRemoteAddr(),userName,new Date().toString()));
注意在上面的代码中使用了新的OnlineSession类,OnlineSession类封装了登录用户的信息(如用户ip,用户名,登录时间).
OnlineSession具体的内容如下:
- /*
- * @(#)OnlineSession.java 1.00 2009/02/20
- * CopyRight(C) stephen(zhoujianqiang AT gmail DOT com) 2009-2014, All rights reserved.
- */
- package com.stephen.filter;
- /**
- * 客户session信息.
- *
- * @author stephen
- * @version 1.0.0
- */
- public final class OnlineSession {
- /**
- * 客户计算机的ip.
- */
- private String ip = null;
- /**
- * 客户登录名.
- */
- private String loginId = null;
- /**
- * 客户登录系统时间.
- */
- private String onlineTime = null;
- /**
- * 构造器.
- * @param ip
- * @param loginId
- * @param onlineTime
- */
- public OnlineSession(String ip,String loginId,String onlineTime){
- this.ip=ip;
- this.loginId=loginId;
- this.onlineTime=onlineTime;
- }
- /**
- * @return Returns the ip.
- */
- public String getIp() {
- return ip;
- }
- /**
- * @param ip The ip to set.
- */
- public void setIp(String ip) {
- this.ip = ip;
- }
- /**
- * @return Returns the loginId.
- */
- public String getLoginId() {
- return loginId;
- }
- /**
- * @param loginId The loginId to set.
- */
- public void setLoginId(String loginId) {
- this.loginId = loginId;
- }
- /**
- * @return Returns the onlineTime.
- */
- public String getOnlineTime() {
- return onlineTime;
- }
- /**
- * @param onlineTime The onlineTime to set.
- */
- public void setOnlineTime(String onlineTime) {
- this.onlineTime = onlineTime;
- }
- }
- /*
- * @(#)OnlineSession.java 1.00 2009/02/20
- * CopyRight(C) stephen(zhoujianqiang AT gmail DOT com) 2009-2014, All rights reserved.
- */
- package com.stephen.filter;
- /**
- * 客户session信息.
- *
- * @author stephen
- * @version 1.0.0
- */
- public final class OnlineSession {
- /**
- * 客户计算机的ip.
- */
- private String ip = null;
- /**
- * 客户登录名.
- */
- private String loginId = null;
- /**
- * 客户登录系统时间.
- */
- private String onlineTime = null;
- /**
- * 构造器.
- * @param ip
- * @param loginId
- * @param onlineTime
- */
- public OnlineSession(String ip,String loginId,String onlineTime){
- this.ip=ip;
- this.loginId=loginId;
- this.onlineTime=onlineTime;
- }
- /**
- * @return Returns the ip.
- */
- public String getIp() {
- return ip;
- }
- /**
- * @param ip The ip to set.
- */
- public void setIp(String ip) {
- this.ip = ip;
- }
- /**
- * @return Returns the loginId.
- */
- public String getLoginId() {
- return loginId;
- }
- /**
- * @param loginId The loginId to set.
- */
- public void setLoginId(String loginId) {
- this.loginId = loginId;
- }
- /**
- * @return Returns the onlineTime.
- */
- public String getOnlineTime() {
- return onlineTime;
- }
- /**
- * @param onlineTime The onlineTime to set.
- */
- public void setOnlineTime(String onlineTime) {
- this.onlineTime = onlineTime;
- }
- }
/* * @(#)OnlineSession.java 1.00 2009/02/20 * CopyRight(C) stephen(zhoujianqiang AT gmail DOT com) 2009-2014, All rights reserved. */ package com.stephen.filter; /** * 客户session信息. * * @author stephen * @version 1.0.0 */ public final class OnlineSession { /** * 客户计算机的ip. */ private String ip = null; /** * 客户登录名. */ private String loginId = null; /** * 客户登录系统时间. */ private String onlineTime = null; /** * 构造器. * @param ip * @param loginId * @param onlineTime */ public OnlineSession(String ip,String loginId,String onlineTime){ this.ip=ip; this.loginId=loginId; this.onlineTime=onlineTime; } /** * @return Returns the ip. */ public String getIp() { return ip; } /** * @param ip The ip to set. */ public void setIp(String ip) { this.ip = ip; } /** * @return Returns the loginId. */ public String getLoginId() { return loginId; } /** * @param loginId The loginId to set. */ public void setLoginId(String loginId) { this.loginId = loginId; } /** * @return Returns the onlineTime. */ public String getOnlineTime() { return onlineTime; } /** * @param onlineTime The onlineTime to set. */ public void setOnlineTime(String onlineTime) { this.onlineTime = onlineTime; } }
第4步 显示在线用户的情况。
可以直接通过 SessionListener.getSessions()方法来取得所有在线的用户。
- <%@ page contentType="text/html;charset=UTF-8"%>
- <%@ page import="java.util.List"%>
- <%@ page import="java.util.Iterator"%>
- <%@ page import="com.stephen.filter.SessionListener"%>
- <%@ page import="com.stephen.filter.OnlineSession"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html><head><title>Online session Query</title>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- </head><body bgcolor="#e5ecf9" topmargin="5px" leftmargin="5px" rightmargin="5px">
- <%
- List sessions = SessionListener.getSessions();
- String pageErrorInfo = null;
- try{
- %>
- <h5>Online Employee</h5>
- <table width="100%" align="center" cellspacing="1" cellpadding="4" border="0"></str
发表评论
-
属性文件的读取 Java
2010-12-11 08:51 1214import java.util.ResourceBu ... -
【精华】Java项目生成静态页面
2010-12-11 08:47 1269需转载,请注明转载出处!本文地址: http://blog. ... -
【珍藏版】微软等数据结构+算法面试100题全部出炉[100题首次完整亮相]
2010-12-06 16:33 2918转至: http://blog.csdn.net/v_JULY ... -
【原创】Log4j 日志文件 使用
2010-12-02 11:37 1250log4j.properties 代码 log4j.ro ... -
【精华】保护自己的网站资源
2010-11-19 08:03 1217禁止用“另存为”保存页面 <head> < ... -
【精华】Window.Open()网页弹出窗口大全
2010-11-16 18:01 1609【1、最基本的弹出窗口代码】 <!--<br ... -
【精华】页面右下角弹出类似QQ或MSN的消息提示
2010-11-05 16:36 1076具体实现见 附件 主要是 针对 在框架中 如何实现 后下 ... -
【原创】苦恼了1个星期的DIV 滚动条置底, 今天终于实现了!!!
2010-11-05 10:58 3454<script type="text/ja ... -
【急救......】Could not find the main class.program will exit
2010-11-01 17:23 1647Java中Could not find the main cl ... -
屏蔽 F5 刷新键
2010-10-28 11:09 826<script language="JavaS ... -
web页面中按ESC关闭窗口
2010-10-28 11:04 1455<script language="jav ... -
web页面中如果想让用户复制页面内容粘贴时加入一些自定义信息
2010-10-28 11:04 874如果让用户复制你网站上的信息到别处粘贴时,附加自定义信息可以采 ... -
防止页面被多次提交
2010-10-28 11:03 19201. javascript ,设置一个变量,只允许提交一 ... -
Javascript打印代码
2010-10-18 14:38 928Javascript打印代码 实现打印功能的javasc ... -
【原创】struts+mysql+jsp 分页源码
2010-09-16 10:42 961具体代码见附件 一起学习,xf.zhouwenjun@163 ... -
【原创】struts 动态 设置radio 与 select 的默认值
2010-08-06 13:10 1664运行效果见 附件,有好的解决方法请分享xf.zhouwenju ... -
【原创】平时编码中积累的,非常好用,且很全的【时间工具类】
2010-07-21 17:42 934具体java类 请下载附件!烦请大家一起完善完善,请给我也分享 ... -
【原创】苦苦寻找的: ajax 定时读取数据,无刷新在页面显示
2010-07-19 17:17 1069demo 见附件 -
【绝】在web工程下 调用js 日历控件 报错【missing ( before function parameters)
2010-07-09 11:28 1162报错代码 function document.onclick( ... -
【精髓】非常好用的日历控件,可以自由的选择日期 时分秒
2010-07-09 10:57 17681、Calendar.js代码如下 省略! 具体内容 ...
相关推荐
在Spring boot中通过HttpSessionListener监听器统计在线人数是一种常见的技术实现方式,适用于需要跟踪和管理用户会话状态的Web应用程序。以下是从给定文件中提炼的关键知识点。 首先,了解HttpSessionListener接口...
在Java编程中,监听器(Listener)是一种关键的机制,它允许程序对特定事件的发生做出反应。本主题将深入探讨如何使用...理解Java监听器的概念,并结合适当的工具和技术,能帮助你构建出稳定且高效的在线人数统计系统。
在Servlet中,可以利用HttpSession的事件监听器,记录每次session的创建和销毁,以此推算出在线用户和总访问量。例如,每当sessionCreated()被调用时,增加访问计数;当sessionDestroyed()被调用时,表明用户离开,...
在Java Web开发中,我们可以使用Servlet API中的Session监听器来实现这一功能。Session监听器是实现了`javax.servlet.http.HttpSessionListener`接口的类,它可以监听到Session的创建和销毁事件,从而判断用户的登录...
本文通过对Spring Boot用监听器统计在线人数案例的分析,详细介绍了实现该功能的步骤和注意事项。 首先,要实现该功能,我们需要创建一个实现了HttpSessionListener接口的监听器类。在Spring Boot中,可以通过在...
在本主题“day18 监听器”中,我们将探讨如何利用监听器来统计在线人数、定时销毁超时session、实现session的钝化与活化,以及如何在系统中显示在线用户列表和实现踢人功能,从而防止用户自动登录。同时,还会涉及...
本教程将深入讲解如何利用Java的监听器机制来统计在线人数,具体涉及到ServletContextListener、HttpSessionListener以及HttpSessionAttributeListener。 首先,`ServletContextListener`是Java Servlet API中的一...
通过以上步骤,我们可以实现一个完整的统计在线用户人数的监听器实例。这个实例对于Web应用来说非常实用,尤其是在需要对网站的用户活跃度和在线情况进行监控的场合。 需要注意的是,文中提到的代码片段可能存在...
6. **优化与注意事项**:为了防止因用户关闭浏览器而未正确注销导致的在线人数计算错误,可以设置一个心跳机制,定期发送请求以保持session活跃。如果一段时间内没有收到心跳请求,可以认为用户已离线并从在线列表中...
- **实时显示:** 为了让用户看到实时的在线人数,可以创建一个Servlet或JSP页面,从监听器中获取并显示当前的在线人数。 4. **优化与注意事项** - **并发问题:** 当大量用户同时进行登录或登出操作时,需要注意...
【标题】"留言本--用DAO模式设计,servlet,监听器统计在线人数"涉及到的是在Java Web开发中实现一个用户交互系统的核心技术。在这个项目中,DAO(Data Access Object)模式、Servlet以及监听器(Listener)是三个...
`HttpSessionListener`是Servlet API的一部分,属于监听器(Listener)类型,它可以监听会话(Session)的创建和销毁事件。当用户访问网站并创建了session时,`sessionCreated`方法会被调用;用户离开或者session...
这就需要我们在Session监听器中实现逻辑,当Session失效时触发事件并更新计数。 3. **分布式环境**:在分布式系统中,多个服务器可能共享同一个Session存储(例如使用Redis或Memcached)。在这种情况下,Session...
在"jsp中监听器实现在线用户统计"这个场景下,我们需要关注的是如何利用监听器来跟踪和管理在线用户。 首先,我们要理解Servlet监听器的概念。Servlet监听器是实现了Java Servlet API中特定接口的Java类,这些接口...
1. **创建会话监听器**:在Java Web应用中,可以创建一个实现了javax.servlet.HttpSessionListener的监听器类,用于在session创建和销毁时执行相应的操作。当新session创建时,增加在线人数;当session失效时,减少...
【Java Web 监听器统计在线用户及人数详解】 在Java Web开发中,实时统计在线用户数量是一项重要的功能,这通常涉及到对用户会话(Session)的管理。本篇文章将详细解析如何使用Java Web监听器来实现这一目标。 ...
在.NET C#开发中,`Session`是一种常用的技术,用于在服务器端存储用户特定的数据,以便在用户与网站交互期间保持状态。...通过合理设计和实现,我们可以创建一个既能有效控制用户登录,又能准确统计在线人数的系统。
本示例"SessionManager:Java监听器实现在线人数统计Demo"将演示如何利用Java的Servlet监听器来实现这一功能。以下是详细的步骤和相关知识点。 首先,我们需要了解Java Servlet监听器的概念。Servlet监听器是Java ...
在Web开发中,实时在线人数统计是一项常见的需求,它可以帮助网站管理员了解当前有多少用户正在访问网站,以便优化资源分配和服务质量。JSP(JavaServer Pages)作为Java Web开发的重要组成部分,可以方便地实现这一...