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

Step1 配置 Web 应用程序的运行目录 <?XML:NAMESPACE PREFIX = O />


%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.java User.java OnlineUserServlet.java LogoutServlet.java


为了和 本章其他例子中的 类相区别 ,本例中的类定义在 org.<?XML:NAMESPACE PREFIX = ST1 />sunxin.ch15.online 包中 。编写 UserList.java User.java OnlineUserServlet.java LogoutServlet.java 源文件 ,将编写好的源 文件 放到 F:\JSPLesson\ch15\src\online 目录下。

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


15-6  UserList.java


1 package org.sunxin.ch15.online;



2


3 import java.util.Vector;


4 import java.util.Enumeration;


5


6 public 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 }