`

Java监听器学习 统计当前在线人数

    博客分类:
  • JEE
阅读更多
javax.servlet.http.HttpSession 这个类是很常用的,每当我们浏览网站,不论有没有登陆,都会产生1个session,它记录了和浏览者相关的数据;

下面介绍session的2个监听器接口:

1)javax.servlet.http.HttpSessionBindingListener;

实现这个接口的类,每当被存放到session或从session中移除都会出发接口中相应的方法,从而实现监听的效果;

2)javax.servlet.http.HttpSessionListener;

实现这个接口的类,本身就是1个监听器,每当有session生成或消亡时,都触发接口中相应的方法,从而实现监听器的效果;

HttpSessionListener 的实现类本身就是一个监听器,要使用它需要在 web.xml 中启动这个监听器,例如
 <listener>
  <listener-class>packname.classname</listener-class>
 </listener>


3)这2个监听器是有区别的

前者的触发取决于 session 中加入的属性;

后者的触发取决于 session 本身的产生和消亡;



与shangshu 之类似的还有
对ServletContext的监听和对Request监听

应用:当前在线人数列表
在线人数列表是对所有人起作用,数据应放到application中。即ServletContext对象

OnLineDemo.java
package demo;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/*
 * <listener> <listener-class>demo.OnLineDemo</listener-class>
 * </listener>
 */

public class OnlineDemo implements ServletContextListener, HttpSessionListener,
		HttpSessionAttributeListener {
	// 声明一个ServletContext对象
	private ServletContext application = null;

	public void contextInitialized(ServletContextEvent sce) {
		// 容器初始化时,向application中存放一个空的容器
		this.application = sce.getServletContext();
		this.application.setAttribute("alluser", new ArrayList());
	}

	public void contextDestroyed(ServletContextEvent sce) {
	}

	public void sessionCreated(HttpSessionEvent se) {
	}

	public void sessionDestroyed(HttpSessionEvent se) {
		// 将用户名称从列表中删除
		List l = (List) this.application.getAttribute("alluser");
		String value = (String) se.getSession().getAttribute("uname");
		l.remove(value);
		this.application.setAttribute("alluser", l);
	}

	public void attributeAdded(HttpSessionBindingEvent se) {
		// 如果登陆成功,则将用户名保存在列表之中
		List l = (List) this.application.getAttribute("alluser");
		l.add(se.getValue());
		this.application.setAttribute("alluser", l);
	}

	public void attributeRemoved(HttpSessionBindingEvent se) {
	}

	public void attributeReplaced(HttpSessionBindingEvent se) {
	}
}



online.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
<form action="online.jsp" method="post">
用户名:
<input type="text" name="name">
<input type="submit" value="登陆">
<a href="logout.jsp">注销</a>
</form>
<!-- 向session接收输入的用户名 -->
<%
	if(request.getParameter("name")!=null)
		session.setAttribute("uname",request.getParameter("name")) ;
%>
<h2>在线人员</h2>
<hr>
<%
	List l = (List)application.getAttribute("allUser");
	for(Object o : l)
		out.println(o);
%>


logout.jsp
<%
	session.invalidate() ;
%>
分享到:
评论
3 楼 526428032 2012-04-02  
[color=indigo][/color]                                     
2 楼 lijing521 2009-10-31  
我研究了一下,发现上面的代码加上一句可能更清楚,更容易让人理解。

OnLineDemo.java 中的attributeAdded这个方法

    public void attributeAdded(HttpSessionBindingEvent se) {  
        // 如果登陆成功,则将用户名保存在列表之中  
        List l = (List) this.application.getAttribute("alluser");  
        l.add(se.getValue());  
       this.application.setAttribute("alluser", l);  
    }  

修改为如下可能更清楚一点:

    public void attributeAdded(HttpSessionBindingEvent se) {  
         List l = (List) this.application.getAttribute("alluser");  
        if(se.getName().equals("user")){ //过滤掉不是存user的属性
        l.add(se.getValue());  
        this.application.setAttribute("alluser", l);  
       }
    }  

 
1 楼 lijing521 2009-10-29  
public void sessionDestroyed(HttpSessionEvent se) {  
37.        // 将用户名称从列表中删除  
38.        List l = (List) this.application.getAttribute("alluser");  
39.        String value = (String) se.getSession().getAttribute("uname");  
40.        l.remove(value);  
41.        this.application.setAttribute("alluser", l);  
42.    }  
43. 
44.    public void attributeAdded(HttpSessionBindingEvent se) {  
45.        // 如果登陆成功,则将用户名保存在列表之中  
46.        List l = (List) this.application.getAttribute("alluser");  
47.        l.add(se.getValue());  
48.        this.application.setAttribute("alluser", l);  
49.    }  

为什么要用这两个方法?登陆成功为什么不用sessionCreated方法?
HttpSessionListener, HttpSessionAttributeListener 区别是什么?还是没搞明白

相关推荐

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

    在Spring boot中通过HttpSessionListener监听器统计在线人数是一种常见的技术实现方式,适用于需要跟踪和管理用户会话状态的Web应用程序。以下是从给定文件中提炼的关键知识点。 首先,了解HttpSessionListener接口...

    监听器实现在线人数统计

    在这个场景下,我们关注的是如何利用监听器来实现在线人数的统计。在线人数统计是一项重要的功能,特别是在构建实时交互的Web应用或者聊天室时,能够提供实时的用户活跃度信息。 首先,我们需要理解业务需求。当...

    java web在线人数统计/监听

    - **实时显示:** 为了让用户看到实时的在线人数,可以创建一个Servlet或JSP页面,从监听器中获取并显示当前的在线人数。 4. **优化与注意事项** - **并发问题:** 当大量用户同时进行登录或登出操作时,需要注意...

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

    【Java Web 监听器统计在线用户及人数详解】 在Java Web开发中,实时统计在线用户数量是一项重要的功能,这通常涉及到对用户会话(Session)的管理。本篇文章将详细解析如何使用Java Web监听器来实现这一目标。 ...

    springboot 用监听器统计在线人数案例分析

    本文通过对Spring Boot用监听器统计在线人数案例的分析,详细介绍了实现该功能的步骤和注意事项。 首先,要实现该功能,我们需要创建一个实现了HttpSessionListener接口的监听器类。在Spring Boot中,可以通过在...

    java统计在线人数

    在Java Web开发中,统计在线人数是一项常见的需求,它能够帮助我们了解系统当前的活跃用户量。本项目通过实现`HttpSessionListener`接口,每隔一分钟动态更新在线人数,提供了高效且可靠的解决方案。以下是对这个...

    Javaweb监听器实例之统计在线人数

    本文将详细介绍如何使用监听器来统计在线用户人数,包括实现的基本思路、具体代码实现以及相关类的结构。 首先,我们要明确监听器的种类,本案例中将使用HttpSessionListener来监听会话的创建和销毁事件,以及...

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

    【Java Web应用开发 53 课堂案例-应用监听器统计在线人数】 在Java Web开发中,统计在线用户数量是一项常见的需求,这通常涉及到监听器(Listeners)的使用。在这个课堂案例中,我们将学习如何利用`...

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

    总结来说,通过使用Java监听器实现在线人数统计,开发者可以利用servlet规范提供的接口来实时追踪和显示当前网站的活跃用户数量。这种方法不仅特别,而且对于理解Java Web开发中的事件驱动模型也非常有帮助。希望...

    jsp中监听器实现在线用户统计

    在"jsp中监听器实现在线用户统计"这个场景下,我们需要关注的是如何利用监听器来跟踪和管理在线用户。 首先,我们要理解Servlet监听器的概念。Servlet监听器是实现了Java Servlet API中特定接口的Java类,这些接口...

    JAVA jsp统计在线人数

    在Java JSP(JavaServer Pages)环境中,统计在线人数是一项常见的需求,这通常涉及到服务器端的会话管理、数据持久化以及实时性处理。这里我们将深入探讨如何利用JSP技术来实现这一功能。 首先,我们需要理解JSP的...

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

    1. **创建会话监听器**:在Java Web应用中,可以创建一个实现了javax.servlet.HttpSessionListener的监听器类,用于在session创建和销毁时执行相应的操作。当新session创建时,增加在线人数;当session失效时,减少...

    java web用servlet监听器实现显示在线人数

    通过结合监听器和servlet,我们可以在Java Web应用中实现用户会话的实时跟踪和在线人数的统计显示。这对于网站运营者来说是一个非常有用的功能,可以帮助了解网站的实时访问情况,并为用户规模的分析提供数据支持。

    servlet 监听器范例

    通过这个“servlet 监听器范例”,我们不仅学习了如何使用Servlet监听器来统计在线用户,还了解了如何跟踪用户登录状态。这个示例对于理解和实现在Java Web应用程序中进行用户管理、监控系统活动具有很大的价值。

    HttpSessionBindingListener实现在线人员查看即人数统计

    1. **创建监听器类**:创建一个实现了`HttpSessionBindingListener`接口的类。在这个类中,你需要重写上述两个方法来记录用户在线状态。 2. **用户登录**:当用户成功登录时,将用户信息(如用户名或用户ID)作为一...

    j2ee20:servlet04监听器(监听四大web域)(用于访问人数的统计)、mvc模式的引入

    在本文中,我们将深入探讨Java EE(J2EE)中的Servlet监听器以及它们在Web应用程序中的作用,特别是在访问人数统计和引入MVC模式方面。首先,让我们了解什么是Servlet监听器。 Servlet监听器是Java Servlet规范的一...

    判断用户是否在线和实时统计在线人数

    在IT行业中,尤其是在Web开发领域,判断用户是否在线和实时统计在线人数是常见的需求,这有助于提供更好的用户体验和服务。这两个概念通常与Java Web和JSP技术密切相关,涉及到HTTP会话管理和数据结构的运用。 首先...

    day18 监听器 统计在线人数,定时销毁超时session,钝化活化session,在线列表显示和踢人功能防止用户自动登录,在线支付

    在本主题“day18 监听器 统计在线人数,定时销毁超时session,钝化活化session,在线列表显示和踢人功能防止用户自动登录,在线支付”中,我们将深入探讨这些关键知识点。 首先,让我们了解监听器的作用。监听器是...

    JSP 在线人数统计的实现

    在Web开发中,实时在线人数统计是一项常见的需求,它可以帮助网站管理员了解当前有多少用户正在访问网站,以便优化资源分配和服务质量。JSP(JavaServer Pages)作为Java Web开发的重要组成部分,可以方便地实现这一...

Global site tag (gtag.js) - Google Analytics