利用session监听程序统计在线人数的一点心得.
这几天在作一个聊天室人数统计的功能.这段时间得到csdn上很多朋友的帮助,现在把这几天遇到的问题和一点心得与大家分享.我是个菜鸟,如果有什么观点不对请尽管批评和指正!
servlet2.3
session监听程序:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class listener extends HttpServlet implements HttpSessionListener, HttpSessionAttributeListener {
private static int sessionCounter=0;
private static int attributeCounter=0;
public void sessionCreated(HttpSessionEvent se) {
sessionCounter++;
System.out.println("session created ok!");
}
public void sessionDestroyed(HttpSessionEvent se) {
sessionCounter--;
System.out.println("session is lost!!");
}
public void attributeAdded(HttpSessionBindingEvent se) {
attributeCounter++;
}
public void attributeRemoved(HttpSessionBindingEvent se) {
attributeCounter--;
}
public void attributeReplaced(HttpSessionBindingEvent se) {
//System.out.println(se.getName()+":is replaced");
}
public static int getSessionCount(){
//System.out.println(sessionCounter);
return sessionCounter;
}
}
统计人数页面:
<%@ page contentType="text/html; charset=GB2312" %>
<%@ page import="cn.sports.control.*"%>
<html>
<head>
<meta http-equiv =refresh content= "10">
<title>在线人数</title>
<style type="text/css">
<!--
body,td,th {
font-size: 9pt;
color: #000000;
}
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
-->
</style>
</head>
<%
int count=listener.getSessionCount();
%>
<body bgcolor="#ffffff">
<table width="100%" height="24" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>当前在线人数:<%=count%></td>
</tr>
</table>
</body>
</html>
以上程序就能根据session的创建或者销毁统计到在线人数.
还有就是要判断当用户非正常退出的时候session的判断.
当用户关闭浏览器窗口是需要触发session.invalidate()事件.
///////////////
<script language=javascript>
function onUnload()
{
if (event.clientX <0 && event.clientY < 0){
window.open('remove.jsp');
}
}
</script>
<body bgcolor="#ffffff" onunload="onUnload()">
///////////////
removesession.jsp
<%@ page contentType="text/html; charset=GB2312" %>
<html>
<head>
<title>
remove
</title>
</head>
<body bgcolor="#ffffff">
<%
session.invalidate();
%>
</body>
</html>