分类: 系统运维
2011-12-12 21:41:25
在这个类的设计上 运用了单例的设计模式
[1] UserList是一个单例类 所谓单例类,是指一个类只有一个实例 而且zixing实例化并向整个系统提供这个实例 单例类的一个最重要的特点就是构造方法是私有的 从而避免了外部利用该类的构造方法直接创建多个实例
UserList类的对象是用于存储和获取在线用户的列表 而这个用户列表对于所有的页面来说都应该是同一个 所有的类访问的就是同一个userList对象了
[2] 第八行 定义一个静态的常量 userList 它表示了UserList类的一个对象 在UserList类加载的时候 这个对象就产生了
[3] 11-14行 声明UserList类的构造方法为private,这个是为了避免在外部使用UserList类的构造方法创建其对象
[4] 16-19行 定义一个静态的方法 getInstance() 这个方法 返回在类加载时创建的UserList类的对象 因为getInstance() 方法本身是静态的 所以直接可以通过类名来调用、
[5] 代码的第九行 定义了一个私有的Vector类型的变量 在UserList的构造方法中 对Vector类型的变量v进行了初始化 用于存放String类型的对象 在这个地方没有使用ArrayList 是因为UserList对象可能会被多个线程进行同时访问 因为ArrayList不是同步的 而Vector是同步的 所以采用Vector来保存用户列表
3 User.java
User类实现了HttpSessionBindingListener接口 表示登录的用户
[1] 第九行 通过UserList类的静态方法 getInstance()得到UserList类的对象
[2] 26-29行 当User对象加入到Session中时 Servlet容器将调用valueBound()方法 我们将用户的名字保存到用户列表中
[3] 30-33行 当User对象从Session中被删除时,Servlet容器将调用valueUnbound()方法 我们从用户列表中删除该用户
4 OnlineUserServlet.java
退出登录"
);用于向用户显示欢迎信息 当前在线人数列表和在线用户数
[1] 代码的第24-29行 首先从Session中获取名为user的属性对象 通过判断它是否为空来判断在此次对话中用户是否已经登录 如果user对象不为null 那么接着判断在同一个会话中 用户是否更换了一个用户名登录 如果user对象为空或者当前登录的用户名和先前登录的用户名不同 则以当前登录的用户名创建一个User对象 将这个对象绑定到Session 这个时候 Servlet容器就会调用User对象的valueBound()方法 将这个用户的名字保存在用户列表中
[2] 35行 得到UserList类的对象
[3] 37行 得到用户列表的枚举对象
[4] 39-47行 循环取出在线用户的名字并输出 一旦输出超过10个用户名 就输出一个换行
[5] 48行 输出当前在线的用户数
5 LogoutServlet.java
代码第16行 调用HttpSession对象的invalidate()方法 使session失效 从而删除绑定到这个Session中的User对象 Servlet容器就会调用这个User对象的valueUnbound()方法 从用户列表中删除该用户