基础的在线人数的统计. (监听器)

本文介绍了一种基于Servlet监听器的在线人数统计方法,通过监听servlet上下文和session的变化,实现在登录和注销时更新在线用户列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                             基础的在线人数的统计.  
   
工具:Myeclipselomboz-eclipse
   
环境:xp,

服务器:tomcat6.0. 本机
   
使用技术: 监听器(对servlet上下文的监听和对session的监听)
-----------------------------------------------------------------------
首先介绍下监听器。

-)监听器主要对三个事件的动作监听:

1 servletContext的监听

2 session的监听

3 request的监听

注:今天只讨论第一和第二种监听,利用这两种监听来完成我们的在线人数统计的程序。

(二) 要想实现监听, 必须实现了一个或多个servlet事件监听器接口的类型。

(三)需要注意的是必须在部署描述符中配置实现类。

今天所使用的类和接口主要有:

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;

统计当前在线人员:

1)思路:1.首先就是我们要实现几个类,哪几个类。首先在线人员,那就必须打开多个浏览器。那就要监听servlet上下文,把所以数据必须保存在application中,必须有一个servletContext对象。

2.针对session变化进行操作。如果登录成功,则将user保存到session中,session.setAttribute(“”);

如果用户注销,则从application中删除此记录。

2)下面给出登录页面:

--------------------------------------------------login.jsp-----------------------------------

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.util.*"%>

<form action="" method="post">

用户名: <input type="text" name="name" />

<input type="submit" value="登录" />

<a href="logout.jsp">注销</a>

</form>

<%

    request.setCharacterEncoding("gb2312");

    if (request.getParameter("name") != null) {

       session.setAttribute("uname",request.getParameter("name"));

    }

%>

<h2>在线人员</h2>

<hr>

<%

    List l = (List)application.getAttribute("alluser");

       Iterator iter = l.iterator();

       while (iter.hasNext()) {

             

%>

           <li><%=iter.next()%></li>

<%

    }

%>

2注销页面:这个就好简单了,直接调用session中的invalidate ()

------------------------------------------logout.jsp-----------------------------------

<%

    session.invalidate();

%>

3监听类:

------------------------OnLineDemo.java----------------

package com.zhangkai.servlet;

 

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;

 

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) {

       // 将用户名称从列表中删除,首先拿到所以的在线人员,然后找到当前的用户,remove移除掉。

然后再把当前的所以人员保存到session中。

       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) {

    }

Ok了,大体的通过监听sessionservlet上下文实现了简单了在线人员的统计。

如果您有好的建议和写的有不对的地方,给我提出来。谢谢。。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值