import javax.servlet.http.*;
import javax.servlet.*;
import java.util.*;
public class onLineUser implements HttpSessionBindingListener {
public onLineUser(){
}
private Vector users=new Vector();
public int getCount(){
users.trimToSize();
return users.capacity();
}
public boolean existUser(String userName){
users.trimToSize();
boolean existUser=false;
for (int i=0;i <users.capacity();i++ )
{
if (userName.equals((String)users.get(i)))
{
existUser=true;
break;
}
}
return existUser;
}
public boolean deleteUser(String userName) {
users.trimToSize();
if(existUser(userName)){
int currUserIndex=-1;
for(int i=0;i <users.capacity();i++){
if(userName.equals((String)users.get(i))){
currUserIndex=i;
break;
}
}
if (currUserIndex!=-1){
users.remove(currUserIndex);
users.trimToSize();
return true;
}
}
return false;
}
public Vector getOnLineUser()
{
return users;
}
public void valueBound(HttpSessionBindingEvent e) {
users.trimToSize();
if(!existUser(e.getName())){
users.add(e.getName());
System.out.print(e.getName()+ "\t 登入到系统\t "+(new Date()));
System.out.println( " 在线用户数为: "+getCount());
}else
System.out.println(e.getName()+ "已经存在 ");
}
public void valueUnbound(HttpSessionBindingEvent e) {
users.trimToSize();
String userName=e.getName();
deleteUser(userName);
System.out.print(userName+ "\t 退出系统\t "+(new Date()));
System.out.println( " 在线用户数为: "+getCount());
}
}
<%@ page contentType= "text/html;charset=gb2312 " %>
<%@ page import= "onLineUser,java.util.* " %>
<jsp:useBean id= "onlineuser " class= "onLineUser " scope= "application "/>
<html>
<head>
<title> 搞定JSP在线人数 </title>
</head>
<body>
<center>
<p> <h1> 登陆成功,欢迎您访问Java家! </h1> </p>
</center>
<% session = request.getSession(false); %>
<%
String username=request.getParameter( "username ");
if (onlineuser.existUser(username)){
out.println( "用户 <font color=red> "+username+ " </font> 已经登陆! ");
}else{
session.setMaxInactiveInterval(50); //Sesion有效时长,以秒为单位
session.setAttribute(username,onlineuser);
out.println( "欢迎新用户: <font color=red> "+username+ " </font> 登陆到系统! ");
}
out.println( " <br> 当前在线用户人数: <font color=red> "+onlineuser.getCount()+ " </font> <br> ");
Vector vt=onlineuser.getOnLineUser();
Enumeration e = vt.elements();
out.println( "在线用户列表 ");
out.println( " <table border=1> ");
out.println( " <tr> <td> 用户名 </td> </tr> ");
while(e.hasMoreElements()){
out.println( " <tr> <td> ");
out.println((String)e.nextElement()+ " <br> ");
out.println( " </td> </tr> ");
}
out.println( " </table> ");
%>
<center>
<p> yuking制作 </p>
<p> </p>
<%
out.println( " <p> <a href=logout.jsp?username= "+username+ "> 退出系统 </a> </p> ");
%>
</center>
</body>
</html>
<%@ page contentType= "text/html;charset=gb2312 " %>
<%@ page import= "onLineUser,java.util.* " %>
<jsp:useBean id= "onlineuser " class= "onLineUser " scope= "application "/>
<html>
<head>
<title> 搞定JSP在线人数 </title>
</head>
<body>
<center>
<p> <h1> 登陆成功,欢迎您访问Java家! </h1> </p>
</center>
<%
String username=request.getParameter( "username ");
if(onlineuser.deleteUser(username))
out.println(username+ "已经退出系统! ");
else
out.println(username+ "没有登陆到系统! ");
%>
<center>
<p> yuking制作 </p>
<p> </p>
<p> <a href= "logout.jsp "> 退出系统 </a> </p>
</center>
</body>
</html>
两个问题:
1. 线程同步。
2. 并不是每个人浏览网站时,都早早注册了,并登陆后,再浏览。