我们客户也有提出这样需求的。废话少说,既然有需求,咱就暂且实现,反正不难:
实现HttpSessionListener接口:
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class LocalSessionListener implements HttpSessionListener{
public void sessionCreated(HttpSessionEvent event) {
HttpSession session = event.getSession();
if(session != null) {
Constants.addCountOnLine();
System.out.println("在线人数:"+Constants.getCountOnLine());
}
}
public void sessionDestroyed(HttpSessionEvent arg0) {
Constants.addCountOnLine();
System.out.println(Constants.getCountOnLine());
}
}
据说这种方式会有点问题,比如用户可能已经登出系统,或者session超时等等,这些方面都不足畏惧。我们用一个静态的对象属性关联:
public class Constants {
public static int countOnLine = 0;
public static int getCountOnLine() {
return countOnLine;
}
public synchronized static void addCountOnLine() {
countOnLine++;
}
public static synchronized void subtractCountOnLine(){
countOnLine--;
}
}
现在看到的仅仅是通过这个监听进行处理,在我们的系统中,可以加上一个退出处理(如:点击退出按钮,或者在用户直接关闭浏览器的时候,我们都可以调用脚本中的onunload事件触发),再通过ajax方式实现对这个这个静态对象属性的处理。
关于这个监听的配置:
在你的application种的web.xml中加上这一段就好了:
<listener>
<listener-class>com.yourcompany.web.listener.LocalSessionListener</listener-class>
</listener>
好了,现在可以测试了,如果你使用tomcat的话,你可以在tomcat的http://localhost:8080/manager/html中看到你的项目中登陆的sessiion数跟我们打印出来的是一样的!!