session监听器(可用于统计在线人数,了解系统当前的使用客户)
来源:互联网 发布:诺基亚n9价格淘宝 编辑:程序博客网 时间:2024/05/01 13:41
★★★ 本篇为原创,需要引用转载的朋友请注明:《 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 SessionListenerimplements HttpSessionAttributeListener {
- /**
- * 定义监听的session属性名.
- */
- public finalstatic 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.java1.002009/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配置)
- <?xmlversion="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()));
注意在上面的代码中使用了新的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 finalclass 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.java1.002009/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()方法来取得所有在线的用户。
- <%@ pagecontentType="text/html;charset=UTF-8"%>
- <%@ pageimport="java.util.List"%>
- <%@ pageimport="java.util.Iterator"%>
- <%@ pageimport="com.stephen.filter.SessionListener"%>
- <%@ pageimport="com.stephen.filter.OnlineSession"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html><head><title>Online session Query</title>
- <metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">
- </head><bodybgcolor="#e5ecf9"topmargin="5px"leftmargin="5px"rightmargin="5px">
- <%
- List sessions =SessionListener.getSessions();
- String pageErrorInfo =null;
- try{
- %>
- <h5>Online Employee</h5>
- <tablewidth="100%"align="center"cellspacing="1"cellpadding="4"border="0">
- <trid="listTitle">
- <td>No.</td>
- <td>登录Id</td>
- <td>登录时间</td>
- <td>ip</td>
- </tr>
- <%
- StringBuffer datas =new StringBuffer();
- if(sessions!=null){
- OnlineSession onlineSession =null;
- Iterator it =sessions.iterator();
- int count=0;
- while(it.hasNext()){
- count++;
- onlineSession=(OnlineSession)it.next();
- datas.append("<tr><td>");
- datas.append(count);
- datas.append("</td><td>");
- datas.append(onlineSession.getLoginId());
- datas.append("</td><td>");
- datas.append(onlineSession.getOnlineTime());
- datas.append("</td><td>");
- datas.append(onlineSession.getIp());
- datas.append("</td></tr>");
- }
- }
- out.print(datas.toString());
- %>
- </table>
- <%
- }catch(Exception e){
- pageErrorInfo = e.toString();
- }finally{
- if(pageErrorInfo!=null){
- %>
- <fontcolor="red">Error:<%=pageErrorInfo%></font>
- <%
- }
- %>
- </body></html>
- <%
- }
- %>
<%@ 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"><tr id="listTitle"><td>No.</td><td>登录Id</td><td>登录时间</td><td>ip</td></tr><%StringBuffer datas = new StringBuffer();if(sessions!=null){OnlineSession onlineSession = null;Iterator it = sessions.iterator();int count=0;while(it.hasNext()){count++;onlineSession=(OnlineSession)it.next();datas.append("<tr><td>");datas.append(count);datas.append("</td><td>");datas.append(onlineSession.getLoginId());datas.append("</td><td>");datas.append(onlineSession.getOnlineTime());datas.append("</td><td>");datas.append(onlineSession.getIp());datas.append("</td></tr>");} } out.print(datas.toString());%></table><%}catch(Exception e){pageErrorInfo = e.toString();}finally{if(pageErrorInfo!=null){%><font color="red">Error:<%=pageErrorInfo%></font><%}%></body></html><%}%>
最后的说明:
如果你的系统中有注销(或者退出登录)类似的功能(功能中调用了 session.invalidate() 方法),那么用户的信息就会自动从上面的列表中删除。如果没有使用注销功能,则只能等到session超时候才能从列表中自动删除。
- session监听器(可用于统计在线人数,了解系统当前的使用客户)
- session监听器(可用于统计在线人数,了解系统当前的使用客户)
- session监听器(可用于统计在线人数,了解系统当前的使用客户)
- session监听器(可用于统计在线人数,了解系统当前的使用客户 ...
- session监听器(可用于统计在线人数,了解系统当前已经登录的使用客户)
- session监听器(可用于统计在线人数,当前客户)
- Java监听器学习 统计当前在线人数
- Java监听器学习 统计当前在线人数
- session监听器,用于统计在线人数
- 使用监听器统计当前的在线用户数
- 使用监听器实现一个统计网站在线人数的示例
- 使用监听器实现一个统计网站在线人数的示例
- Servlet监听器的简单使用实现统计在线人数
- 通过session统计当前在线人数
- 监听器统计在线人数
- 使用java 监听器实现在线人数统计
- SpringMVC的在线人数统计监听器
- 用session监听器统计在线人数和在线人列表
- 梦的开始
- mvc 1.0 SourceCode 源代码 调试
- 网络加密如何协商密钥
- HTTP的头部协议
- 监听器原理与案例分析
- session监听器(可用于统计在线人数,了解系统当前的使用客户)
- Step by step configure ASP.net SQL connection to use Membership providers
- CSS图片垂直居中方法整理集合
- qriority_queue应用
- poj2010-Moo University-Financial Aid
- Uva OnlineJudge 网站汇总
- uva 11026
- 各种网络错误代码的含义
- 计算机常用端口一览表