`

HttpSessionListener用法(计数器)

阅读更多

继上次说到Listener的功效,这里就不得不说说另外一个接口HttpSessionListener了。

上次说到了ServletContextListener,它是用来监听Servlet Context的创建和销毁的状态。今天特别有兴趣在

聊聊另一个监听的接口,名字叫做HttpSessionListener。

在理解这个接口之前,先提出一个问题,就是假设我的web应用上想知道到底有多少用户在使用?

首先看一段代码。

package demo.listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class SessionCounter implements HttpSessionListener {
    public void sessionCreated(HttpSessionEvent event) {
        ServletContext ctx = event.getSession( ).getServletContext( );
        Integer numSessions = (Integer) ctx.getAttribute("numSessions");
        if (numSessions == null) {
            numSessions = new Integer(1);
        }
        else {
            int count = numSessions.intValue( );
            numSessions = new Integer(count + 1);
        }
        ctx.setAttribute("numSessions", numSessions);
    }
    public void sessionDestroyed(HttpSessionEvent event) {
        ServletContext ctx = event.getSession( ).getServletContext( );
        Integer numSessions = (Integer) ctx.getAttribute("numSessions");
        if (numSessions == null) {
            numSessions = new Integer(0);
        }
        else {
            int count = numSessions.intValue( );
            numSessions = new Integer(count - 1);
        }
        ctx.setAttribute("numSessions", numSessions);
    }
}

在这个解决方案中,任何一个Session被创建或者销毁时,都会通知SessionCounter 这个类,当然通知的原因是必须在web.xml文件中做相关的配置工作。如下面的配置代码:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE web-app PUBLIC
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd ">
   
<web-app>
  <display-name>Struts Examples</display-name>
 
  <listener>
      <listener-class>demo.listener.SessionCounter
      </listener-class>
  </listener>
  ... rest of web.xml

分享到:
评论

相关推荐

    基于Java的动态站点中计数器的实现与解析.pdf

    例如,使用synchronized关键字来保护成员变量的方法实现,以及实现HttpSessionListener接口的监听器方法等。 文章的核心知识点包括: 1. 计数器在Web应用中的作用:用于追踪页面访问次数、用户活动等统计信息。 2...

    Spring boot通过HttpSessionListener监听器统计在线人数的实现代码

    从以上知识点可以看出,尽管使用HttpSessionListener进行在线人数统计是一个简单易行的方法,但在实际应用中需要考虑各种可能影响统计准确性的因素,并采取相应的措施进行优化。在实际开发中,应根据应用的具体需求...

    J2EE登陆人数统计

    综上所述,J2EE登录人数统计不仅涉及了`HttpSession`与`HttpSessionListener`的基本使用,还牵涉到了并发控制、性能优化等高级话题。合理的设计与实现能够极大地提升用户体验,同时保证系统的稳定性和效率。

    java监听器学习 统计在线人数

    我们可以通过实现这个接口,在应用启动时初始化在线人数计数器,并在应用关闭时清除相关数据。 ```java public class OnlineCounter implements ServletContextListener { @Override public void context...

    JSP实现一个网站流量统计器

    在这里,我们将使用`HttpSessionListener`和`ServletContextListener`来跟踪用户访问。`HttpSessionListener`可以监听会话的创建和销毁,而`ServletContextListener`则能监听Web应用的启动和停止。 ### 3. 注册监听...

    JSP 在线人数统计的实现

    以上就是使用JSP实现在线人数统计的基本方法和关键点,具体实现可能需要根据项目需求和环境进行调整。在实际开发中,还要考虑到性能、可扩展性和用户体验等因素,确保统计的准确性和系统的稳定性。

    Java Web应用开发 53 课堂案例-应用监听器统计在线人数.docx

    在Java Web开发中,统计在线用户数量是一项常见的需求,这通常涉及到监听器(Listeners)的使用。在这个课堂案例中,我们将学习如何利用`HttpSessionListener`接口来实现这一功能。`HttpSessionListener`是Java ...

    网站统计在线人数,当前年、月、日访问量JAVA代码

    可以使用synchronized关键字或者使用线程安全的数据结构(如AtomicInteger)来确保计数器的安全性。 5. **实时展示**:将统计结果实时展示在网站上,可以通过JSP页面显示当前在线人数和累计访问量,数据可以从内存...

    利用HttpSessionListerner实现在线人数统计

    在这些方法中,我们可以维护一个全局的在线人数计数器,以此来跟踪当前在线的用户数量。 ```java import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class ...

    java开始面试的第60天.doc

    在提供的代码示例中,`CountListener`类实现了`HttpSessionListener`接口,当一个session被创建时,`sessionCreated()`方法会被调用,增加计数器;当session被销毁时,`sessionDestroyed()`方法执行,减少计数器。这...

    IDEA 当前在线人数和历史访问量的示例代码

    在`contextInitialized`方法中,我们将计数器`count`设置为0,表示没有用户在线。 ```java @WebListener public class InitServletContexListener implements ServletContextListener { @Override public void ...

    java web在线人数统计/监听

    Java Web提供了一种机制,可以通过实现`HttpSessionListener`接口或者使用`HttpSessionAttributeListener`来监听Session的创建、销毁以及属性的变化。这为我们统计在线人数提供了可能。每当有新的Session创建,表示...

    Java监听器的作用及用法代码示例

    通过实现这两个方法,我们可以在应用启动时进行一些初始化操作,比如初始化计数器或者读取配置信息。 2. ServletContextAttributeListener:这个监听器用来监听Servlet上下文属性的变化。它提供了对属性添加、删除...

    监听器实现在线人数统计

    总结起来,通过监听器实现在线人数统计的核心思路是监听用户登录和登出事件,动态更新一个全局计数器。在实际项目中,可能还需要考虑并发控制、异常处理、数据持久化等复杂情况,以确保统计的准确性和稳定性。

    xmlhttp和xml组件,不需要刷新页面,便可以交互数据

    通过实现 `HttpSessionListener` 接口,可以在用户登录和退出时更新在线用户计数器。以下是一个简单的示例: ```java import javax.servlet.*; import javax.servlet.http.*; public class UserCount implements ...

    java 面试题汇总

    - **JVM内存模型**:堆、栈、方法区、本地方法栈、程序计数器等区域的解析,以及内存溢出和垃圾回收机制。 - **Spring框架**:IoC(控制反转)、AOP(面向切面编程)的核心概念,以及Bean的管理。 这些知识点不仅...

    HttpSessionBindingListener获取在线用户数(转)

    5. 对于大型项目,可能需要考虑线程安全问题,如使用`synchronized`关键字或`ConcurrentHashMap`等数据结构来处理并发访问。 通过这种方式,我们不仅能够实时地统计在线用户数,还可以方便地扩展功能,例如记录用户...

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

    相反,当用户离开网站或者浏览器关闭导致会话结束时,sessionDestroyed事件被触发,监听器的sessionDestroyed方法被调用,计数器减一。 创建监听类的步骤如下: 1. 创建一个名为SessionListener的类,实现...

    session统计在线人数.rar

    它可能包含一个基本的计数器,每次新的session创建(用户登录)时加一,而当session超时或关闭时减一,从而动态更新在线用户数。 **标签解析**: "session Java demo" 标签表明这个压缩包的核心技术是Java,特别是...

    java+bean分页技术

    这可以通过监听器(Listener)来实现,特别是HttpSessionListener接口,它可以监听会话的创建和销毁事件。 总结,Java Bean在JSP分页技术中扮演了关键角色,负责处理数据库查询和数据分页逻辑。通过与JSP页面交互,...

Global site tag (gtag.js) - Google Analytics