统计在线用户列表:
1,写一个单例类,增加一个类型为ArrayList的属性,用来存储所有在线的用户(也可以用数据库进行操作)
2,利用session绑定的事件监听器对正常退出系统的用户进行监听
3,考虑用户以浏览器的关闭按钮关闭或以Alt+F4进行关闭(这可以用javascript对用户的操作进行捕捉,网上这方面够多)
4,当非正常关闭,如电脑突然断电,用户直接关闭电脑等,这需要等到session失效后,用户列表中的用户才能清除
共用到了7个文件:
简单的登录界面:
login.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户登录</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>
<form action="servlet/UserListServlet" method="POST">
<input type="text" name="userName" >
<input type="submit" name="login" value=" 登 录 ">
</form>
</body>
</html>
显示用户列表:
userlist.jsp
<%@ page language="java" import="java.util.*"
contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ page import="com.session.UserList"%>
<%@ taglib prefix="c" uri=" http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户列表</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">
-->
<script type="text/javascript" src="refresh.js">
</script>
</head>
<body>
<h2>在线用户列表</h2>
<div id="userList">
<%
UserList userList=UserList.getInstance();
List<String> list = userList.getList();
for (int i = 0; i < list.size(); i++)
{
out.println(list.get(i) + "<br>");
}
%>
</div>
<form action="servlet/LogoutServlet" method="GET"><input type="submit" name="logout" value=" 注 销 "></form>
</body>
</html>
最后是实现页面无刷新的javascript代码
refresh.js
/*
页面无刷新的javascript代码
*/
window.onload=initAll;
var httpReq=false;
var url="userlist.jsp";
function initAll()
{
makeRequest(url);
}
function makeRequest(url)
{
if(window.XMLHttpRequest)// Mozilla, Safari,...
{
httpReq=new XMLHttpRequest();
}
else
{
if(window.ActiveXObject)//IE
{
try
{
httpReq=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){}
}
}
if(httpReq)
{
httpReq.onreadystatechange=tillRefresh;
httpReq.open("GET",url,true);//异步
httpReq.send(null);
}
else
{
alert("不能创建一个XMLHTTPRequest实例");
}
}
function tillRefresh()
{
var tempDiv=document.createElement("div");
var userList=document.getElementById("userList");
if(httpReq.readyState==4)
{
if(httpReq.status==200)
{
tempDiv.innerHTML=httpReq.responseText;
var required=tempDiv.getElementsByTagName("div");
userList.innerHTML=required[0].innerHTML;
setTimeout("makeRequest(url)",5000);
}
else
{
alert("对不起,出现了一些问题 :"+httpReq.status);
}
}
}
对用户以浏览器的关闭按钮关闭或以Alt+F4进行关闭的情况没有写出,因为对javascript不太懂,COME ON!!!
<meta http-equiv="pragma" content="no-cache">
本文介绍了一个基于Java的在线用户列表管理系统,通过单例模式维护一个全局用户列表,并使用HttpSessionBindingListener来监听用户登录和登出事件。同时,还提供了一个无刷新更新用户列表的JavaScript实现。

被折叠的 条评论
为什么被折叠?



