统计在线人数
2013-05-02 17:39
190 查看
HttpSessionListener有2个接口需要实现
sessionCreated //新建一个会话时候触发也可以说是客户端第一次和服务器交互时候触发
sessionDestroyed //销毁会话的时候 一般来说只有某个按钮触发进行销毁 或者配置定时销毁 ( 很多文献中提到说浏览器关闭时候会销毁 但是楼主通过各种现行主流浏览器测试效果不尽如人意)
HttpSessionAttributeListener有3个接口需要实现
attributeAdded //在session中添加对象时触发此操作 笼统的说就是调用setAttribute这个方法时候会触发的
attributeRemoved //修改、删除session中添加对象时触发此操作 笼统的说就是调用 removeAttribute这个方法时候会触发的
attributeReplaced //在Session属性被重新设置时
以下是一个统计在线会话数的功能,并且让超时的自动销毁
web.xml
[html]
view plaincopyprint?
<?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">
<listener>
<listener-class>
org.xiosu.listener.onlineListener
</listener-class>
</listener>
<!--默认的会话超时时间间隔,以分钟为单位 -->
<session-config>
<session-timeout>1</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
[html]
view plaincopyprint?
onlineListener.java
[java] view plaincopyprint?package org.xiosu.listener; import java.util.ArrayList; import javax.servlet.ServletContext; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class onlineListener implements HttpSessionListener, HttpSessionAttributeListener { // 参数 ServletContext sc; ArrayList list = new ArrayList(); // 新建一个session时触发此操作 public void sessionCreated(HttpSessionEvent se) { sc = se.getSession().getServletContext(); System.out.println("新建一个session"); } // 销毁一个session时触发此操作 public void sessionDestroyed(HttpSessionEvent se) { System.out.println("销毁一个session"); if (!list.isEmpty()) { list.remove((String) se.getSession().getAttribute("userName")); sc.setAttribute("list", list); } } // 在session中添加对象时触发此操作,在list中添加一个对象 public void attributeAdded(HttpSessionBindingEvent sbe) { list.add((String) sbe.getValue()); System.out.println(sbe.getValue()); sc.setAttribute("list", list); } // 修改、删除session中添加对象时触发此操作 public void attributeRemoved(HttpSessionBindingEvent arg0) { System.out.println("5555555"); } public void attributeReplaced(HttpSessionBindingEvent arg0) { System.out.println("77777777"); } }
index.jsp
[html]
view plaincopyprint?
<%@ page language="java"
import="java.util.*"
pageEncoding="UTF-8"%>
<%
String path =
request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base
href="<%=basePath%>">
<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>
<%
session =
request.getSession(false);
if (session != null)
session.invalidate();
%>
<form
action="isOnline.jsp"
method="post">
用户名:
<input
type="text"
name="uName"
/>
<input
type="submit"
value="上线">
</body>
</html>
isOnline.jsp
[html]
view plaincopyprint?
<%@ page language="java"
import="java.util.*"
pageEncoding="UTF-8"%>
<%
String path =
request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base
href="<%=basePath%>">
<title>My JSP 'isOnline.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>
<%
session=request.getSession();
session.setAttribute("userName",request.getParameter("uName"));
response.sendRedirect("showOnline.jsp");
%>
</body>
</html>
showOnline.jsp
[html]
view plaincopyprint?
<%@ page language="java"
import="java.util.*"
pageEncoding="UTF-8"%>
<%
String path =
request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base
href="<%=basePath%>">
<title>My JSP 'showOnline.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>
<%
ArrayList showList=(ArrayList)(getServletContext().getAttribute("list"));
out.print("在线人数 "+showList.size()+"<br>");
for(int i=0;i<showList.size();i++){
out.print(showList.get(i)+"在线"+"<br>");
}
%>
<br>
<a
href="index.jsp">退出</a>
</body>
</html>
sessionCreated //新建一个会话时候触发也可以说是客户端第一次和服务器交互时候触发
sessionDestroyed //销毁会话的时候 一般来说只有某个按钮触发进行销毁 或者配置定时销毁 ( 很多文献中提到说浏览器关闭时候会销毁 但是楼主通过各种现行主流浏览器测试效果不尽如人意)
HttpSessionAttributeListener有3个接口需要实现
attributeAdded //在session中添加对象时触发此操作 笼统的说就是调用setAttribute这个方法时候会触发的
attributeRemoved //修改、删除session中添加对象时触发此操作 笼统的说就是调用 removeAttribute这个方法时候会触发的
attributeReplaced //在Session属性被重新设置时
以下是一个统计在线会话数的功能,并且让超时的自动销毁
web.xml
[html]
view plaincopyprint?
<?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">
<listener>
<listener-class>
org.xiosu.listener.onlineListener
</listener-class>
</listener>
<!--默认的会话超时时间间隔,以分钟为单位 -->
<session-config>
<session-timeout>1</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
<?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"> <listener> <listener-class> org.xiosu.listener.onlineListener </listener-class> </listener> <!--默认的会话超时时间间隔,以分钟为单位 --> <session-config> <session-timeout>1</session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
[html]
view plaincopyprint?
onlineListener.java
[java] view plaincopyprint?package org.xiosu.listener; import java.util.ArrayList; import javax.servlet.ServletContext; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class onlineListener implements HttpSessionListener, HttpSessionAttributeListener { // 参数 ServletContext sc; ArrayList list = new ArrayList(); // 新建一个session时触发此操作 public void sessionCreated(HttpSessionEvent se) { sc = se.getSession().getServletContext(); System.out.println("新建一个session"); } // 销毁一个session时触发此操作 public void sessionDestroyed(HttpSessionEvent se) { System.out.println("销毁一个session"); if (!list.isEmpty()) { list.remove((String) se.getSession().getAttribute("userName")); sc.setAttribute("list", list); } } // 在session中添加对象时触发此操作,在list中添加一个对象 public void attributeAdded(HttpSessionBindingEvent sbe) { list.add((String) sbe.getValue()); System.out.println(sbe.getValue()); sc.setAttribute("list", list); } // 修改、删除session中添加对象时触发此操作 public void attributeRemoved(HttpSessionBindingEvent arg0) { System.out.println("5555555"); } public void attributeReplaced(HttpSessionBindingEvent arg0) { System.out.println("77777777"); } }
package org.xiosu.listener; import java.util.ArrayList; import javax.servlet.ServletContext; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class onlineListener implements HttpSessionListener, HttpSessionAttributeListener { // 参数 ServletContext sc; ArrayList list = new ArrayList(); // 新建一个session时触发此操作 public void sessionCreated(HttpSessionEvent se) { sc = se.getSession().getServletContext(); System.out.println("新建一个session"); } // 销毁一个session时触发此操作 public void sessionDestroyed(HttpSessionEvent se) { System.out.println("销毁一个session"); if (!list.isEmpty()) { list.remove((String) se.getSession().getAttribute("userName")); sc.setAttribute("list", list); } } // 在session中添加对象时触发此操作,在list中添加一个对象 public void attributeAdded(HttpSessionBindingEvent sbe) { list.add((String) sbe.getValue()); System.out.println(sbe.getValue()); sc.setAttribute("list", list); } // 修改、删除session中添加对象时触发此操作 public void attributeRemoved(HttpSessionBindingEvent arg0) { System.out.println("5555555"); } public void attributeReplaced(HttpSessionBindingEvent arg0) { System.out.println("77777777"); } }
index.jsp
[html]
view plaincopyprint?
<%@ page language="java"
import="java.util.*"
pageEncoding="UTF-8"%>
<%
String path =
request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base
href="<%=basePath%>">
<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>
<%
session =
request.getSession(false);
if (session != null)
session.invalidate();
%>
<form
action="isOnline.jsp"
method="post">
用户名:
<input
type="text"
name="uName"
/>
<input
type="submit"
value="上线">
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <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> <% session = request.getSession(false); if (session != null) session.invalidate(); %> <form action="isOnline.jsp" method="post"> 用户名: <input type="text" name="uName" /> <input type="submit" value="上线"> </body> </html>
isOnline.jsp
[html]
view plaincopyprint?
<%@ page language="java"
import="java.util.*"
pageEncoding="UTF-8"%>
<%
String path =
request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base
href="<%=basePath%>">
<title>My JSP 'isOnline.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>
<%
session=request.getSession();
session.setAttribute("userName",request.getParameter("uName"));
response.sendRedirect("showOnline.jsp");
%>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'isOnline.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> <% session=request.getSession(); session.setAttribute("userName",request.getParameter("uName")); response.sendRedirect("showOnline.jsp"); %> </body> </html>
showOnline.jsp
[html]
view plaincopyprint?
<%@ page language="java"
import="java.util.*"
pageEncoding="UTF-8"%>
<%
String path =
request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base
href="<%=basePath%>">
<title>My JSP 'showOnline.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>
<%
ArrayList showList=(ArrayList)(getServletContext().getAttribute("list"));
out.print("在线人数 "+showList.size()+"<br>");
for(int i=0;i<showList.size();i++){
out.print(showList.get(i)+"在线"+"<br>");
}
%>
<br>
<a
href="index.jsp">退出</a>
</body>
</html>
相关文章推荐
- asp论坛在线人数统计研究
- HttpSessionListener统计在线人数 [转]
- 通过监听器实现在线人数统计
- 如何统计在线人数
- 用Servlet监听器实现对在线人数的统计
- 统计网站在线人数
- 实现HttpSessionListener统计用户在线人数
- javaWeb 在线人数统计
- ASP.NET中使用Application对象实现简单在线人数统计功能
- jsp简单实现统计在线人数(未测试)
- JavaWeb学习记录(二十六)——在线人数统计HttpSessionListener监听实现
- Session监听统计网站的在线人数HashSet
- java 在线人数的统计
- 用java统计网站在线人数
- 有关在线统计人数
- 简单的java web 统计在线人数实现方法
- 一个实用的FSO-实时统计在线人数
- 统计网站在线人数
- Asp.net统计在线人数和总人数
- 统计在线人数是实时的吗?