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);
        }
    }

}

效果如下:

相关文章
|
3月前
|
监控 前端开发 Java
揭秘Web开发神器:Servlet、过滤器、拦截器、监听器如何联手打造无敌博客系统,让你的用户欲罢不能!
【8月更文挑战第24天】在Java Web开发中,Servlet、过滤器(Filter)、拦截器(Interceptor,特指Spring MVC中的)及监听器(Listener)协同工作,实现复杂应用逻辑。以博客系统为例,Servlet处理文章详情请求,过滤器(如LoginFilter)检查登录状态并重定向,Spring MVC拦截器(如LoggingInterceptor)提供细粒度控制(如日志记录),监听器(如SessionListener)监控会话生命周期事件。这些组件共同构建出高效、有序的Web应用程序。
36 0
|
6月前
|
前端开发 Java 程序员
Servlet/过滤器/拦截器/监听器:
Servlet接口在Sun公司有两个默认的实现类:HttpServlet、GenericServlet。Servlet是一种运行服务器端的Java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。
|
存储 Java 数据安全/隐私保护
servlet过滤器与监听器
前言 Servlet 过滤器和监听器是 Java Web 应用程序中常见的两种组件,它们提供了各种扩展 Web 应用程序功能的方式。 总的来说,过滤器和监听器都可以通过 Java Web 应用程序的配置文件或注解进行使用,方便灵活,并可以很好地实现框架与业务逻辑的分离,提高代码可维护性和扩展性。 过滤器(Filter) 1. 参数验证和转换:可以拦截用户提交的数据,并对数据格式进行验证、修正或转换。 2. 访问控制和认证:可以拦截请求并检查用户是否有访问特定资源的权限。 3. 日志记录:可以拦截请求并输出相应的日志信息,用于系统运行时的监测与故障排除。 4. 资源压缩和解密: 可以拦截响应并对
79 0
|
存储 Java
【Java Web编程 十一】深入理解Servlet监听器
【Java Web编程 十一】深入理解Servlet监听器
112 0
【Java Web编程 十一】深入理解Servlet监听器
|
Java 应用服务中间件
如何在个人web项目中使用Servlet监听器?
如何在个人web项目中使用Servlet监听器?
|
XML 设计模式 前端开发
Servlet、过滤器、监听器、拦截器
Servlet是javaEE规范中的一种,javaEE中的规范很多除了Servlet还有很多我们熟悉的JSP、JDBC、RMI、XML、EJB、JTS等等。
166 0
Servlet、过滤器、监听器、拦截器
|
存储 缓存 监控
servlet中的监听器接口
servlet中的监听器接口
104 0
servlet中的监听器接口
|
JavaScript
Servlet学习——监听器
Servlet学习——监听器
161 0
|
3月前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
30 3
|
3月前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
30 1