先添加登陆的页面index.jsp
点击登陆后跳转的login.jsp(为了方便,用jsp做servlet,同学们用的时候记得改过来)
登陆成功跳转到显示页面result.jsp
<h3>您好:${username} [<a href="logout.jsp">注销</a>]</h3> 当前在线用户: <table> <% List onlineUserList = (List) application.getAttribute("onlineUserList"); for (int i = 0; i < onlineUserList.size(); i++) { String onlineUsername = (String) onlineUserList.get(i); %> <tr> <td><%=onlineUsername%></td> </tr> <% } %> </table>
点击注销页面logout.jsp页面
OK,登陆、查看、注销页面都有了,下面开始新建监听器
1、HttpSessionListener添加类OnlineUserListener,继承HttpSessionListener,HttpSessionListener中有两个方法sessionCreated(HttpSessionEvent event)与sessionDestroyed(HttpSessionEvent ,前者是监听session的新建,后者是监听session的销毁。
OnlineUserListener代码如下:
web.xml配置:
2、HttpSessionBindingListenerHttpSessionBindingListener虽然叫做监听器,但使用方法与HttpSessionListener完全不同。我们实际看一下它是如何使用的。
新建类OnlineUserBindingListener,实现HttpSessionBindingListener接口,构造方法传入username参数,HttpSessionBindingListener内有两个方法valueBound(HttpSessionBindingEvent event)和valueUnbound(HttpSessionBindingEvent event),前者为数据绑定,后者为取消绑定
所谓对session进行数据绑定,就是调用session.setAttribute()把HttpSessionBindingListener保存进session中。
这就是HttpSessionBindingListener和HttpSessionListener之间的最大区别:HttpSessionListener只需要设置到web.xml中就可以监听整个应用中的所有session。HttpSessionBindingListener必须实例化后放入某一个session中,才可以进行监听。
监听范围上比较,HttpSessionListener设置一次就可以监听所有session,HttpSessionBindingListener通常都是一对一的。
正是这种区别成就了HttpSessionBindingListener的优势,我们可以让每个listener对应一个username,这样就不需要每次再去session中读取username,进一步可以将所有操作在线列表的代码都移入listener,更容易维护。
HttpSessionBindingListener代码如下:
在login.jsp中做这一步:
b.xml配置:
posted on 2011-01-07 19:25 子恩 阅读(583) 评论(1) 编辑 收藏 所属分类: javaSE
关于“实现在线人数统计”功能,可以参考开源论坛JForum的实现。你分析的也不错啊。 回复 更多评论
Powered by: BlogJava Copyright © 子恩