java web监听器统计在线用户及人数

在线用户使用HttpSessionListener监听器统计 

每当一个session会话建立  在线用户人数+1

每当一个session会话销毁 在线用户人数-1

使用ServletRequestListener监听器统计用户信息

每当一个request建立  将当前用户放入集合

每当session会话销毁  将当前用户移出集合

我使用的是Servlet3.0  监听器直接使用注解@webListener即可 不用在web.xml中布局

在web.xml中配置session-timeout标签  标志session过期时间为1分钟  0为不过期

<session-config>
  <session-timeout>1</session-timeout>
</session-config> 

servlet3.0使用条件

运行结果:

由于session对话关闭时间并不一定以设置的1分钟为准 所以 gif图像中最后等待时间较长

User 实体类

package com.scx.entity;
/**
 * 用户实体类
 *
 */
public class User {
  //当前用户的session id
  private String sessionId;
  //当前用户的ip地址
  private String ip;
  //当前用户第一次访问的时间
  private String firstTime;
  public User() {
    super();
  }
  public String getIp() {
    return ip;
  }
  public void setIp(String ip) {
    this.ip = ip;
  }
  public String getFirstTime() {
    return firstTime;
  }
  public void setFirstTime(String firstTime) {
    this.firstTime = firstTime;
  }
  public String getSessionId() {
    return sessionId;
  }
  public void setSessionId(String sessionId) {
    this.sessionId = sessionId;
  }
}

HttpSessionListener监听器

package com.scx.listener;
import java.util.ArrayList;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import com.scx.entity.User;
import com.scx.util.SessionUtil;
/**
 * HttpSessionListener 监听器
 *
 */
@WebListener
public class MyHttpSessionListener implements HttpSessionListener{
  //当前用户数
  private int userCounts=0;
  @Override
  public void sessionCreated(HttpSessionEvent se) {
    //sessionCreated 用户数+1
    userCounts++;
    //重新在servletContext中保存userCounts
    se.getSession().getServletContext().setAttribute("userCounts", userCounts);
  }
  @Override
  public void sessionDestroyed(HttpSessionEvent se) {
    //sessionDestroyed 用户数-1
    userCounts--;
    //重新在servletContext中保存userCounts
    se.getSession().getServletContext().setAttribute("userCounts", userCounts);
    @SuppressWarnings("unchecked")
    ArrayList<User> userList=(ArrayList<User>) se.getSession().getServletContext().getAttribute("userList");
    String sessionId=se.getSession().getId();
    //如果当前用户在userList中 在session销毁时 将当前用户移出userList
    if(SessionUtil.getUserBySessionId(userList, sessionId)!=null){
      userList.remove(SessionUtil.getUserBySessionId(userList, sessionId));
    }
    //将userList集合 重新保存到servletContext
    se.getSession().getServletContext().setAttribute("userList", userList);
  }
}

ServletRequestListener监听器

package com.scx.listener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpServletRequest;
import com.scx.entity.User;
import com.scx.util.SessionUtil; 

/**
 * ServletRequestListener 监听器
 *
 */
@WebListener
public class MyServletRequestListener implements ServletRequestListener {
  //用户集合
  private ArrayList<User> userList;
  @Override
  public void requestDestroyed(ServletRequestEvent arg0) {
  }
  @SuppressWarnings("unchecked")
  @Override
  public void requestInitialized(ServletRequestEvent arg0) {
    //从servletContext中获的userList
    userList=(ArrayList<User>) arg0.getServletContext().getAttribute("userList");
    //如果servletContext中没有userList对象 初始化userList
    if(userList==null){
      userList=new ArrayList<User>();
    }
    HttpServletRequest request=(HttpServletRequest) arg0.getServletRequest();
    //sessionId
    String sessionId=request.getSession().getId();
    //如果当前sessionId不存在集合中 创建当前user对象
    if(SessionUtil.getUserBySessionId(userList,sessionId)==null){
      User user=new User();
      user.setSessionId(sessionId);
      user.setIp(request.getRemoteAddr());
      SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:MM:ss");
      user.setFirstTime(sdf.format(new Date()));
      userList.add(user);
    }
    //将userList集合 保存到ServletContext
    arg0.getServletContext().setAttribute("userList", userList);
  }
}

工具类

package com.scx.util;
import java.util.ArrayList;
import com.scx.entity.User;
public class SessionUtil {
  //根据sessionId判断当前用户是否存在在集合中 如果存在 返回当前用户 否则返回null
  public static User getUserBySessionId(ArrayList<User> userList,String sessionId) {
    for (User user : userList) {
      if(sessionId.equals(user.getSessionId())){
        return user;
      }
    }
    return null;
  }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!

(0)

相关推荐

  • 快速学习JavaWeb中监听器(Listener)的使用方法

    一.监听器介绍 1.1.监听器的概念 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行. 1.2.监听器案例--监听window窗口的事件监听器 package me.gacl.listener.demo; import java.awt.Frame; imp

  • 浅析JAVA中过滤器、监听器、拦截器的区别

    1.过滤器:所谓过滤器顾名思义是用来过滤的,在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者struts的action前统一设置字符集,或者去除掉一些非法字符(聊天室经常用到的,一些骂人的话).filter 流程是线性的, url传来之后,检查之后,可保持原来的流程

  • 浅谈java监听器的作用

    监听器是JAVA Web开发中很重要的内容,其中涉及到的知识,可以参考下面导图: Web监听器 1 什么是web监听器? web监听器是一种Servlet中的特殊的类,它们能帮助开发者监听web中的特定事件,比如ServletContext,HttpSession,ServletRequest的创建和销毁:变量的创建.销毁和修改等.可以在某些动作前后增加处理,实现监控. 2 监听器常用的用途 通常使用Web监听器做以下的内容: 统计在线人数,利用HttpSessionLisener 加载初始化信

  • Java基础 Servlet监听器详解

    Java基础 Servlet监听器详解 1 概念:Servlet监听器,用来监听web容器的一些对象状态的变化,主要是ServletContext.HttpSession.HttpServletRequestl三类对象状态.Servlet的监听器 2  Servlet2.4和JSP2.0规范中一共定义了有八个接口类和六种事件. 3 web.xml中定义Servlet的url-pattern时如果url-pattern的值的"/",则说明该Servlet是该项目的默认Servlet,当请

  • java使用监听器实现一个统计网站在线人数的示例

    本文主要介绍了java使用监听器实现一个统计网站在线人数的示例,具有一定的参考价值,有需要的朋友可以了解一下. (1)创建一个监听器实现类 要大致统计一个网站的在线人数,首先,可以通过ServletContextListener监听,当Web应用上下文启动时,在ServletContext中添加一个List,用来准备存放在线的用户名:然后,可以通过HttpSessionAttributeListener监听,当用户登录成功把用户名设置到Session中时同时将用户名存放到ServletConte

  • 利用java监听器实现在线人数统计

    1.在工程中创建监听类SessionListener 并且实现HttpSessionListener接口,代码如下 import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class SessionListener implements HttpSessionListener { private static int count = 0; public vo

  • Java中的拦截器、过滤器、监听器用法详解

    本文实例讲述了Java中的拦截器.过滤器.监听器用法.分享给大家供大家参考,具体如下: 一.拦截器 :是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方 法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作. 1.Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,

  • 深入学习JavaWeb中监听器(Listener)的使用方法

    一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器. 这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener 和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换

  • JavaWeb监听器Listener实例解析

    首先来介绍一下什么是监听器: 监听器-就是一个实现待定接口的普通Java程序,此程序专门用于监听另外一个类的方法调用. 这是使用观察者模式的. 什么是观察者模式: 定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新. 示例: GUI编程中的addXxxxListener都是观察者模式. 比如为按钮点击添加监听事件,为键盘添加监听等等- 观察者模式的三个重要类: 被监听的事件源,也就是我们在使用的对象. 注册的那个监听器,是专门用来监听当前使用的对象的.

  • servlet监听器的学习使用(三)

    本文为大家分享了servlet监听器的具体学习内容,供大家参考,具体内容如下 1.什么是servlet监听器? servlet监听器也叫web监听器.是servlet中一种特殊类.能够帮助开发者监听web应用中的特定事件.比如ServletContext,ServletSession,ServletRequest的创建和销毁,变量的创建和销毁等. 2 监听器常用的用途 通常使用Web监听器做以下的内容: 统计在线人数,利用HttpSessionLisener 加载初始化信息:利用ServletC

随机推荐