谁有思路,求大神
HttpSession session=arg0.getSession();
ServletContext application=session.getServletContext();
//在application范围有一个HshSet集保存所有的Session
HashSet sessions= (HashSet) application.getAttribute("sessions");
if(sessions != null){
sessions=new HashSet();
application.setAttribute("sessions", sessions);
}
//新创建的session均添加到HashSet集中
sessions.add(session);
System.out.println("当前在线人数:"+sessions.size());
这样报空指针
if(sessions != null){
sessions=new HashSet();
application.setAttribute("sessions", sessions);
}
这个逻辑判断有问题,应该是sessions == null才进行初始化。
所以改成
if(sessions == null){
sessions=new HashSet();
application.setAttribute("sessions", sessions);
}
这样就不会出现空指针了
希望能够帮到你
分配一个session你+1
int sum=0;
if(sessions != null){
sessions=new HashSet();
application.setAttribute("sessions", sessions);
sum++;
}
syso(sum);
我有一个js统计方可人数的,是用cookie写的,地址:http://blog.csdn.net/qq736150416/article/details/51799389可以看下
今天刚好做了这个在线统计用户人数的项目,就在此将思路说一下,献丑了。。。。
理清楚三个问题:
1、用户人数这个变量userNumber应存储在哪?
这个用户人数的变量userNumber应存储到application域对象的属性当中,因为从web应用程序开启时就应该进行用户人数统计直到该web应用停止
或重启
2、什么时候人数加1?
创建一个类继承HttpSessionListener并实现其两个方法sessionCreated()和sessionDestroyed(),当用户访问服务器时,Servlet容器此时会开启一个线程并调用sessionCreate方法,在这个方法中让变量userNumber加1并将其添加到application域对象属性当中
3、什么时候人数减1?
当用户退出访问该web应用程序时,会立即调用和sessionDestroyed(),此时在这个方法中让变量userNumber减1并将其添加到application域对象属性当中
示例代码如下:
@WebListener("统计用户在线人数")
public class MyHttpSessionListener implements HttpSessionListener {
private int userNumber = 0; // 用户在线人数
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
userNumber++; // 人数加1
httpSessionEvent.getSession().getServletContext().setAttribute("userNumber", userNumber); // 将userNumber添加到application域对象属性当中
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
userNumber--; // 人数减1
httpSessionEvent.getSession().getServletContext().setAttribute("userNumber", userNumber); // 再次将userNumber添加到application域对象的属性当中
}
}
统计在线用户及数量这个功能的作用:
1、通过在线用户统计功能,可以知道该网站用户的访问情况和使用情况,进而得知该网站受欢迎的程度和宣传效果好不好。
2、对于应用平台而言,可以考核使用人员的日常使用情况
线程安全么。。。你这个number是共享的啊