作者:孙鑫 来源:程序员之家 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
.
}
转载于:https://blog.51cto.com/sunxin/169135