Servlet-监听器获得当前在线人数

简介: 版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/twilight_karl/article/details/73744940 案例一使用监听器获得当前在线的人数。
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/twilight_karl/article/details/73744940

案例一

使用监听器获得当前在线的人数。用变量count表示当前在线人数。在HttpSessionListener每次调用sessionCreated方法时更新count,并保存在ServletContext中。之后需要使用时从ServletContext中获取即可。

@WebListener
public class MySessionListener implements HttpSessionListener  {
    private int count = 0 ;

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        count++;
        se.getSession().getServletContext().setAttribute("count",  count);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        count--;
        se.getSession().getServletContext().setAttribute("count", count);
    }
}

案例二

下面这个例子,除了获得在线的人数,还可以需要获得一些其他信息

ServletRequestListener监听器,对于每一次请求,获得请求的相关信息,并保存在ArrayList中。

package 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 javax.servlet.http.HttpSession;

import util.SessionUtil;
import entity.User;

@WebListener
public class MyServletRequestListener implements ServletRequestListener {
    ArrayList<User> userList = null ;

    @Override
    public void requestDestroyed(ServletRequestEvent arg0) {

    }

    @Override
    public void requestInitialized(ServletRequestEvent arg0) {
        HttpServletRequest request = (HttpServletRequest)arg0.getServletRequest();
        HttpSession session = request.getSession();

        userList = (ArrayList<User>)arg0.getServletContext().getAttribute("userList");
        if(userList == null){
            userList = new ArrayList();
        }


        String sessionId = session.getId();
        String Ip = request.getLocalAddr();
        String time = new SimpleDateFormat("yy-MM-dd hh:mm:ss").format(new Date());
        User user = new User();
        user.setFirstTime(time);
        user.setIp(Ip);
        user.setSessionID(sessionId);

        if(SessionUtil.getSessionByID(userList, sessionId)==null){
            userList.add(user);
        }

        arg0.getServletContext().setAttribute("userList", userList);
    }

}

HttpSessionListener监听器,更新count的值,并在用户退出时删除ArrayList中的用户数据

package listener;

import java.util.ArrayList;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import util.SessionUtil;
import entity.User;

@WebListener
public class MyHttpSessionListener implements HttpSessionListener {
    private int count = 0 ;

    @Override
    public void sessionCreated(HttpSessionEvent arg0) {
        count++;
        arg0.getSession().getServletContext().setAttribute("count", count);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent arg0) {
        count--;
        arg0.getSession().getServletContext().setAttribute("count", count);

        String id = arg0.getSession().getId();
        ArrayList<User> userList = (ArrayList<User>)arg0.getSession().getServletContext().getAttribute("userList");

        if(SessionUtil.getSessionByID(userList, id) != null){
            User user = SessionUtil.getSessionByID(userList,id);
            userList.remove(user);
        }
    }

}

效果如下:

相关文章
|
11月前
|
存储 Java 数据安全/隐私保护
servlet过滤器与监听器
前言 Servlet 过滤器和监听器是 Java Web 应用程序中常见的两种组件,它们提供了各种扩展 Web 应用程序功能的方式。 总的来说,过滤器和监听器都可以通过 Java Web 应用程序的配置文件或注解进行使用,方便灵活,并可以很好地实现框架与业务逻辑的分离,提高代码可维护性和扩展性。 过滤器(Filter) 1. 参数验证和转换:可以拦截用户提交的数据,并对数据格式进行验证、修正或转换。 2. 访问控制和认证:可以拦截请求并检查用户是否有访问特定资源的权限。 3. 日志记录:可以拦截请求并输出相应的日志信息,用于系统运行时的监测与故障排除。 4. 资源压缩和解密: 可以拦截响应并对
59 0
|
11月前
|
Java 应用服务中间件
如何在个人web项目中使用Servlet监听器?
如何在个人web项目中使用Servlet监听器?
|
存储 Java
【Java Web编程 十一】深入理解Servlet监听器
【Java Web编程 十一】深入理解Servlet监听器
85 0
【Java Web编程 十一】深入理解Servlet监听器
|
XML 设计模式 前端开发
Servlet、过滤器、监听器、拦截器
Servlet是javaEE规范中的一种,javaEE中的规范很多除了Servlet还有很多我们熟悉的JSP、JDBC、RMI、XML、EJB、JTS等等。
141 0
Servlet、过滤器、监听器、拦截器
|
JavaScript
Servlet学习——监听器
Servlet学习——监听器
144 0
|
存储 缓存 监控
servlet中的监听器接口
servlet中的监听器接口
87 0
servlet中的监听器接口
|
Java Spring 容器
【JavaWeb】之Servlet监听器
【JavaWeb】之Servlet监听器
114 0
|
存储 编解码 Java
Java Web之Servlet中过滤器与监听器的解析及使用(附源码)
Java Web之Servlet中过滤器与监听器的解析及使用(附源码)
138 0
Java学习路线-50:Servlet监听器Listener
Java学习路线-50:Servlet监听器Listener
|
Java 应用服务中间件
Java Web——Servlet的监听器接口(ServletContextListener、ServletContextAttributeListener)
Java Web——Servlet的监听器接口(ServletContextListener、ServletContextAttributeListener)
Java Web——Servlet的监听器接口(ServletContextListener、ServletContextAttributeListener)