再来看看现在我们怎么得到一个当前在线的用户列表
<body bgcolor=#FFFFFF>
<table cellspacing= cellpadding= width=%>
<tr >
<td style=width:px>SessionId
</td>
<td style=width:px >User
</td>
<td style=width:px >Login Time
</td>
<td style=width:px >Last Access Time
</td>
</tr>
<%
Vector activeSessions = (Vector) applicationgetAttribute(activeSessions);
if (activeSessions == null)
{
activeSessions = new Vector();
applicationsetAttribute(activeSessionsactiveSessions);
}
Iterator it = activeSessionsiterator();
while (ithasNext())
{
HttpSession sess = (HttpSession)itnext();
JDBCUser sessionUser = (JDBCUser)sessgetAttribute(user);
String userId = (sessionUser!=null)?sessionUsergetUserID():None;
%>
<tr>
<td nowrap=><%= sessgetId() %></td>
<td nowrap=><%= userId %></td>
<td nowrap=>
<%= BeaconDategetInstance( new JavautilDate(sessgetCreationTime()))getDateTimeString()%></td>
<td class=<%= stl %> nowrap=>
<%= BeaconDategetInstance( new javautilDate(sessgetLastAccessedTime()))getDateTimeString()%></td>
</tr>
<%
}
%>
</table>
</body>
以上的代码从application中取出activeSessions并且显示出具体的时间其中BeaconDate类假设为格式化时间的类
这样我们得到了一个察看在线用户的列表的框架至于在线用户列表分页等功能与本文无关不予讨论
这是一个非刷新模型的例子依赖于session的超时机制我的同事sonymusic指出很多时候由于各个厂商思想的不同这有可能是不可信赖的考虑到这种需求需要在每个叶面刷新的时候都判断当前用户距离上次使用的时间是否超过某一个预定时间值这实质上就是自己实现session超时如果需要实现刷新模型就必须使用这种每个叶面进行刷新判断的方法
[] [] []