显示在线用户列表

监听器实现在线用户列表

 

需求:显示当前都有哪些用户在线,将用户名显示在页面上。

思路:

1,首先建立JavaBean,例如Manager对象,建立username,password字段,在数据库中添加若干条信息,

2,  做一个登录页面,填写用户名和密码,提交后会找一个servlet,这个servlet会根据用户提交的用户名和密码查询数据库,看是否有相应的用户,有则登陆成功,将用户名和密码封装成manager对象,并存储到session域中,重定向到首页;没有则失败,转发到登录页面重新登陆,并给出友好提示信息。

3,  在主页中从session域中获取用户名,显示在页面上,还有一个<退出>超链接,点击会提交到一个servlet,这个servlet会把用户在session中存的数据清除,并重定向到登陆页面。首页下面还有一个查询所有在线用户的超链接,

4,  这个超链接会连接一个servlet,servlet从维护在线用户列表的工具类中获得当前在线用户集合,存储在request域中,转发到现实页面。

5,  显示页面通过<c:forEach>标签显示所有在线用户名后面有一个<踢出用户>的超链接,点击会提交到一个servlet,这个servlet会调用工具类的移除方法,将相应用户从列表中移除,根据的是用户的用户名。

核心:服务器是如何知道一个用户登录了呢?是通过监听机制,通过JavaBean的监听类HttpSessionBindingListener实现。

具体方法是:将需要监听的javabean实现HttpSessionBindingListener监听器并实现里面的方法。里面的方法有两个:public voidvalueBound(HttpSessionBindingEvent event)public voidvalueUnbound(HttpSessionBindingEvent event),前者是当这个javabean对象被存入session中是调用,所以,在这个方法里调用工具类的添加如列表集合的方法,就可以自动将这个用户添加进在线用户列表了,实现了动态自动获取的能力;后者是在这个javabean对象被从session域中移除的时候被调用的,所以在这个方法里调用工具类的从列表中移除方法,就可以将用户从列表中移除了,即当会话结束时调用,移除用户。

6,踢出用户的功能:因为列表map中维护的是当前用户对象和当前用户的session组成的键值对,所以可以根据username获取出对应的键,再根据相应的键获取当前用户对应的session,再将session中的manager属性移除。所以我们管理员可以帮助用户“退出”,即强制将其踢出会话。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值