當用戶登錄時維護一個會話對象:UserInfo類的實例,同時UserInfo類實現javax.servlet.http.HttpSessionBindingListener接口:
import?JAVA.util.Map;
import?JAVA.util.HashMap;
import?javax.servlet.http.*;
import?javax.servlet.ServletContext;
public?class?UserInfo?implements?HttpSessionBindingListener?{
//?用戶信息
int?userId;
String?userName;
......
/**
?*?當UserInfo類被綁定到session中時觸發這個事件
?*?具體信息請參見Servlet/JSPs的規范
?*/
public?void?valueBound(HttpSessionBindingEvent?event)?{
HttpSession?session?=?event.getSession?();
ServletContext?ctx?=?session.getServletContext?();
Map?map?=?(Map)ctx.getAttribute?("users");
if?(map?==?null)?{?//?如果是服務器啟動后的第一個登錄用戶,新建一個容器
map?=?new?HashMap?();
ctx.setAttribute?("users",?map);
}
map.put?(userName,?this);?//?把自己加入容器中
}
/**
?*?當UserInfo類從session中刪除時觸發這個事件
?*?具體信息請參見Servlet/JSPs的規范
?*/
public?void?valueUnbound(HttpSessionBindingEvent?event)?{
HttpSession?session?=?event.getSession?();
ServletContext?ctx?=?session.getServletContext?();
Map?map?=?(Map)ctx.getAttribute?("users");
map.remove?(this.userName);?//?把自己從容器中刪除
}
......
}
以后在JSP中就可以這樣顯示在線用戶數了:
<%
int?userCount?=?0;
JAVA.util.Map?map?=?(java.util.Map)application.getAttribute?("users");
if?(map?==?0)?userCount?=?0;
else?userCount?=?map.size?();
%>;
import?JAVA.util.Map;
import?JAVA.util.HashMap;
import?javax.servlet.http.*;
import?javax.servlet.ServletContext;
public?class?UserInfo?implements?HttpSessionBindingListener?{
//?用戶信息
int?userId;
String?userName;
......
/**
?*?當UserInfo類被綁定到session中時觸發這個事件
?*?具體信息請參見Servlet/JSPs的規范
?*/
public?void?valueBound(HttpSessionBindingEvent?event)?{
HttpSession?session?=?event.getSession?();
ServletContext?ctx?=?session.getServletContext?();
Map?map?=?(Map)ctx.getAttribute?("users");
if?(map?==?null)?{?//?如果是服務器啟動后的第一個登錄用戶,新建一個容器
map?=?new?HashMap?();
ctx.setAttribute?("users",?map);
}
map.put?(userName,?this);?//?把自己加入容器中
}
/**
?*?當UserInfo類從session中刪除時觸發這個事件
?*?具體信息請參見Servlet/JSPs的規范
?*/
public?void?valueUnbound(HttpSessionBindingEvent?event)?{
HttpSession?session?=?event.getSession?();
ServletContext?ctx?=?session.getServletContext?();
Map?map?=?(Map)ctx.getAttribute?("users");
map.remove?(this.userName);?//?把自己從容器中刪除
}
......
}
以后在JSP中就可以這樣顯示在線用戶數了:
<%
int?userCount?=?0;
JAVA.util.Map?map?=?(java.util.Map)application.getAttribute?("users");
if?(map?==?0)?userCount?=?0;
else?userCount?=?map.size?();
%>;