在网站中经常需要进行在线人数的统计。过去的一般做法是结合登录和退出功能,即当用户输入用户名密码进行登录的时候计数器加1,然后当用户点击退出按钮退出系统的时候计数器减1。这种处理方式存在一些缺点,例如:用户正常登录后,可能会忘记点击退出按钮,而直接关闭浏览器,导致计数器减1的操作没有及时执行;网站上还经常有一些内容是不需要登录就可以访问的,在这种情况下也无法使用上面的方法进行在线人数统计。
我们可以利用Servlet规范中定义的事件监听器(Listener)来解决这个问题,实现更准确的在线人数统计功能。对每一个正在访问的用户,J2EE应用服务器会为其建立一个对应的HttpSession对象。当一个浏览器第一次访问网站的时候,J2EE应用服务器会新建一个HttpSession对象,并触发HttpSession创建事件,如果注册了HttpSessionListener事件监听器,则会调用HttpSessionListener事件监听器的sessionCreated方法。相反,当这个浏览器访问结束超时的时候,J2EE应用服务器会销毁相应的HttpSession对象,触发HttpSession销毁事件,同时调用所注册HttpSessionListener事件监听器的sessionDestroyed方法。
可见,对应于一个用户访问的开始和结束,相应的有sessionCreated方法和sessionDestroyed方法执行。这样,我们只需要在HttpSessionListener实现类的sessionCreated方法中让计数器加1,在sessionDestroyed方法中让计数器减1,就轻松实现了网站在线人数的统计功能。
下面就是利用HttpSessionListener实现在线人数统计的一个例子,这个例子已经在中创软件的J2EE应用服务器InforWeb中测试通过。
首先,编写一个简单的计数器,代码如下:<o:p></o:p>
1. package accp.onlinecounter; <o:p></o:p>
2. public class OnlineCounter { <o:p></o:p>
3. private static long online = 0; <o:p></o:p>
4. public static long getOnline() { <o:p></o:p>
5. return online; <o:p></o:p>
6. } <o:p></o:p>
7. public static void raise(){ <o:p></o:p>
8. online++; <o:p></o:p>
9. } <o:p></o:p>
10. public static void reduce(){ <o:p></o:p>
11. online--; <o:p></o:p>
12. } <o:p></o:p>
13. } <o:p></o:p>
然后,编写HttpSessionListener实现类,在这个实现类的sessionCreated方法中调用OnlineCounter的raise方法,在sessionDestroyed方法中调用OnlineCounter的reduce方法,代码如下:<o:p></o:p>
1. package accp.onlinecounter; <o:p></o:p>
2. import javax.servlet.http.HttpSessionEvent; <o:p></o:p>
3. import javax.servlet.http.HttpSessionListener; <o:p></o:p>
4. public class OnlineCounterListener implements HttpSessionListener { <o:p></o:p>
5. public void sessionCreated(HttpSessionEvent hse) { <o:p></o:p>
6. OnlineCounter.raise(); <o:p></o:p>
7. } <o:p></o:p>
8. public void sessionDestroyed(HttpSessionEvent hse) { <o:p></o:p>
9. OnlineCounter.reduce(); <o:p></o:p>
10. } <o:p></o:p>
11. } <o:p></o:p>
再然后,把这个HttpSessionListener实现类注册到网站应用中,也就是在网站应用的web.xml中加入如下内容:<o:p></o:p>
1. <web-app> <o:p></o:p>
2. …… <o:p></o:p>
3. <listener> <o:p></o:p>
4. <listener-class> <o:p></o:p>
5. accp.OnlineCounterListener <o:p></o:p>
6. </listener-class> <o:p></o:p>
7. </listener> <o:p></o:p>
8. …… <o:p></o:p>
9. </web-app> <o:p></o:p>
OK,在线人数统计功能已经实现,只要在JSP页面中加入下面这样的脚本就能显示但前在线人数了:<o:p></o:p>
1. <%@ page language="java" pageEncoding="GB2312" %> <o:p></o:p>
2. <%@ page import="accp.OnlineCounter" %> <o:p></o:p>
3. <html> <o:p></o:p>
4. <head><title>On Line Counert</title></head> <o:p></o:p>
5. <body bgcolor="#FFFFFF"> <o:p></o:p>
6. On line:<%=OnlineCounter.getOnline()%> <o:p></o:p>
7. </body> <o:p></o:p>
8. </html> <o:p></o:p>
(转载文章请保留出处:北天JAVA技术网(www.java114.com))
分享到:
相关推荐
Servlet监听器是实现了Java Servlet API中特定接口的Java类,这些接口定义了对不同类型的Servlet事件的监听方法。例如,`ServletContextListener`用于监听ServletContext的生命周期事件,而`HttpSessionListener`则...
在本文中,我们将深入探讨Java EE(J2EE)中的Servlet监听器以及它们在Web应用程序中的作用,特别是在访问人数统计和引入MVC模式方面。首先,让我们了解什么是Servlet监听器。 Servlet监听器是Java Servlet规范的一...
以上就是使用JSP实现在线人数统计的基本方法和关键点,具体实现可能需要根据项目需求和环境进行调整。在实际开发中,还要考虑到性能、可扩展性和用户体验等因素,确保统计的准确性和系统的稳定性。
总的来说,"ex.zip_JSP在线人数统计_ex"项目提供了从监听器到JSP页面的完整解决方案,展示了如何利用Java Web技术来实时统计并展示网站的在线用户数。这对于开发者来说是一个实用的示例,有助于理解Web应用中的用户...
总结来说,通过使用Java监听器实现在线人数统计,开发者可以利用servlet规范提供的接口来实时追踪和显示当前网站的活跃用户数量。这种方法不仅特别,而且对于理解Java Web开发中的事件驱动模型也非常有帮助。希望...
Servlet监听器是Java Web开发中的一个重要概念,它属于Java Servlet规范的一部分,主要应用于JSP/Servlet环境。在Java Web应用程序中,监听器(Listeners)扮演着观察者(Observer)的角色,能够监听特定事件的发生...
为了实现在线人数统计,我们首先需要创建一个监听器类`OnLineDemo.java`,该类实现了`ServletContextListener`、`HttpSessionListener`和`HttpSessionAttributeListener`接口。 1. **监听器类`OnLineDemo.java`**:...
本文将深入探讨`HttpSessionBindingListener`的原理及其在实现在线人员统计中的应用。 `HttpSessionBindingListener`是Java Servlet API的一部分,位于`javax.servlet.http`包中。它定义了两个方法: 1. `...
2. Servlet监听器的编写:创建实现特定监听器接口的类,重写对应的方法。 3. Servlet监听器的注册:在`web.xml`中配置监听器,使得服务器启动时能自动加载。 4. 使用静态变量进行全局状态管理:`OnlineCounter`类的`...
在本主题“day18 监听器”中,我们将探讨如何利用监听器来统计在线人数、定时销毁超时session、实现session的钝化与活化,以及如何在系统中显示在线用户列表和实现踢人功能,从而防止用户自动登录。同时,还会涉及...
- **实时显示:** 为了让用户看到实时的在线人数,可以创建一个Servlet或JSP页面,从监听器中获取并显示当前的在线人数。 4. **优化与注意事项** - **并发问题:** 当大量用户同时进行登录或登出操作时,需要注意...
在Java JSP(JavaServer Pages)环境中,统计在线人数是一项常见的需求,这通常涉及到服务器端的会话管理、数据持久化以及实时性处理。这里我们将深入探讨如何利用JSP技术来实现这一功能。 首先,我们需要理解JSP的...
### JSP实现在线人数统计的知识点解析 #### 一、项目背景与目标 在Web应用开发中,了解网站的实时在线用户数量对于优化资源分配、提高用户体验等方面具有重要意义。本项目的目标是通过JSP(JavaServer Pages)技术...
在开发Java Web应用程序时...总之,通过JSP、Servlet和session监听器,我们可以有效地统计和展示Java Web应用的实时在线人数。然而,实际应用中还需要考虑更多因素,如性能优化、用户体验以及更准确的在线状态判断等。
监听器使得开发者能够自动化处理某些任务,如在线人数统计、资源初始化等,而无需在每个处理请求的Servlet或JSP中重复编写相同的代码。 综上所述,Servlet过滤器和监听器是Java Web开发中两个关键的工具,它们扩展...
本文实例讲述了JSP监听器用法。分享给大家供大家参考,具体如下: 监听器也叫Listener,是servlet服务的监听器。它可以监听客户端的请求,服务端的操作等。比如统计在线用户数量。每当增加一个HttpSession时,就会...
- Servlet监听器:如`ServletContextListener`、`ServletRequestListener`和`HttpSessionListener`,分别监听Servlet上下文的创建和销毁、请求的创建和结束以及Session的创建、销毁和活动状态变化。 8. **监听器...
在线人数统计是网站运营中常见的需求,用于了解网站的...总之,这个案例提供了一个简单的在线人数统计方法,使用了Servlet API中的监听器来跟踪session的状态。在实际应用中,还需要根据项目需求进行相应的优化和扩展。
2. 实现Servlet监听器(Listener),监控会话生命周期以更新计数器。 3. 配置Servlet来处理请求,获取并返回在线人数信息。 4. 在Servlet容器启动和关闭时管理计数器的生命周期。 通过这样的设计,开发者可以实时...
9. 通过监听器实现实现网站所有网页的访问次数累计,在线用户数统计、在线用户列表更新。 三、实验步骤 实验步骤包括: 1. 创建 Web 项目 myWebsite,並将所有文件放在一个包里面。 2. 在配置文件 web.xml 中分别...