作者:孙鑫  来源:程序员之家 www.phome.asia
下面,我们利用HttpSessionBindingListener接口,编写一个在线人数统计的程序。当一个用户登录后,显示欢迎信息,同时显示出当前在线的总人数和用户名单。当一个用户退出登录或者Session超时值发生时,从在线用户名单中删除这个用户,同时将在线的总人数减1。这个功能的完成,主要是利用一个实现了HttpSessionBindingListener接口的对象,当这个对象被绑定到Session中或者从Session中被删除时,更新当前在线的用户名单。实例的开发主要有以下步骤。

Step1配置Web应用程序的运行目录

%CATALINA_HOME%\conf\Catalina\localhost\目录下新建ch15.xml文件输入如例15-4所示的内容。

5-4  ch15.xml
<Context docBase="F:\JSPLesson\ch15" reloadable="true"/>

 
Step2:编写login.html

 
将编写好的login.html文件放到F:\JSPLesson\ch15\online目录下。完整的代码如例15-5所示

 
15-5  login.html
<html>


 
    <head>

 
        <title>登录页面</title>

 
    </head>

 
    <body>

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

 
            <table>

 
                <tr>

 
                    <td>请输入用户名:</td>

 
                    <td><input type="text" name="user"></td>

 
                </tr>

 
                <tr>

 
                    <td>请输入密码:</td>

 
                    <td><input type="password" name="password"></td>

 
                </tr>

 
                <tr>

 
                    <td><input type="reset" value="重填"></td>

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

 
                </tr>

 
            </table>

 
        </form>

 
    </body>

 

</html>
Step3编写UserList.javaUser.javaOnlineUserServlet.javaLogoutServlet.java

为了和本章其他例子中的类相区别,本例中的类定义在org.sunxin.ch15.online包中。编写UserList.javaUser.javaOnlineUserServlet.javaLogoutServlet.java源文件,将编写好的源文件放到F:\JSPLesson\ch15\src\online目录下。

UserList.java的完整代码如例15-6所示

15-6  UserList.java

1package org.sunxin.ch15.online;


2

3import java.util.Vector;

4import java.util.Enumeration;

5

6public class UserList

7{

8    private static final UserList userList=new UserList();

9    private Vector<String> v;

10   

11   private UserList()

12   {

13        v=new Vector<String>();

14   }

15

16   public static UserList getInstance()

17   {

18        return userList;

19   }

20   

21   public void addUser(String name)

22   {

23        if(name!=null)

24            v.addElement(name);

25   }

26   

27   public void removeUser(String name)

28   {

29        if(name!=null)

30              v.remove(name);

31   }

32   

33   public Enumeration<String> getUserList()

34   {

35        return v.elements();

36   }

37   

38   public int getUserCount()

39   {

40        return v.size();

41   }


42}