the5fire

关注Python、Django、Vim、Linux、Web开发、团队管理和互联网--Life is short, we need Python.


HttpSessionListener:统计在线人数

作者:the5fire | 标签:     | 发布:2011-01-06 11:11 a.m. | 阅读量: 11048, 10666

上文 一样,这个接口也是用于监听服务器端变化的,不过它监听的是HttpSession的变化。那么这个HttpSession是干嘛的呢?大家可以参看这里: 深入理解HTTP Session http://lavasoft.blog.51cto.com/62575/275589

从我链接的那篇文章里可以知道每当有一个用户访问JSP页面,服务器端便可创建一个Session,而这个Session的消失时间一般都用户不进行任何动作20分钟之后,或者是你服务器端直接关闭,不过这种可能性很小。 所以基于上述原理我们就可以写一个统计在线人数的小Demo: 首先建一个实体类Counter.java来记录在线人数:

.. code:: java

package com.listener;

/**
 * 当前在线人数实体类
 * @author 胡阳
 *
 */
public class Counter {

    private static long online = 0;

    public static long getOnline() {
        return online;
    }

    public static void raise(){
        online++;
    }

    public static void reduce(){
        online--;
    }

}

接着就是HttpSessionListener接口的实现OnlineCounterListener.java:

.. code:: java

package com.listener;

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

/**
 * 统计在线人数
 * @author 胡阳
 *
 */
public class OnlineCounterListener implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent arg0) {
        //增加一个
        Counter.raise();
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent arg0) {
        //减少一个
        Counter.reduce();
    }

}

其实在这段代码里面,你可以对当前登录人数进行判断,也就是判断Session中的值是否是已注册成员。这里只是简单的统计在线人数。

然后还是配置web.xml文件:

::

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <listener>
        <listener-class>com.listener.OnlineCounterListener</listener-class>
    </listener>
</web-app>

接着是index.jsp:

::

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ page import="com.listener.*" %>
<%
    long num = Counter.getOnline();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
我是打酱油的,当前在线人数为:<%=num %>
<body>
</body>
</html>

这样就完成了当前在线人数的统计,你可以测试一下,用chrome访问一个这个index.jsp,然后用ie在访问一下看看结果。

- from the5fire.com
----EOF-----

微信公众号:Python程序员杂谈


其他分类: