易网时代-编程资源站
Welcome
微信登录
首页
/
操作系统
/
Linux
/
Java实现在线用户显示
OnlineUser
package
com.www.bjjssc.util;
import
java.util.Collection;
import
java.util.HashMap;
import
java.util.Map;
import
javax.servlet.http.HttpSession;
import
javax.servlet.http.HttpSessionBindingEvent;
import
javax.servlet.http.HttpSessionBindingListener;
/**
* 在线用户统计
*/
public
class
OnlineUsers
implements
HttpSessionBindingListener {
private
Map<String, OnlineUser> users =
new
HashMap<String, OnlineUser>();
private
static
OnlineUsers onlineUsers =
new
OnlineUsers();
public
static
OnlineUsers getInstance() {
return
onlineUsers;
}
/**
* @return
*/
public
Collection getUsers() {
return
users.values();
}
public
void
addUser(OnlineUser user) {
users.put(user.getId(), user);
}
public
void
removeUser(String userId) {
users.remove(userId);
}
/**
* 对象实例(即OnlineUserListener的实例)作为一个属性被设置到session的
* 时候,会调用本方法,这种情况一般发生在点击登录按钮以后的处理过程中 设置
*
* @see javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent)
*/
public
void
valueBound(HttpSessionBindingEvent event) {
// 现在暂时不需要额外处理,你可以在这里记录日志等
}
/**
* 当Session超时,或本实例被从session中移除的时候被调用,这种情况一般 发生在注销方法的处理过程中
*
* @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent)
*/
public
void
valueUnbound(HttpSessionBindingEvent event) {
try
{
HttpSession session = event.getSession();
OnlineUser u = (OnlineUser) session.getAttribute(
"currentUser"
);
System.out.println(
"删除用户:"
+u.getName());
this
.removeUser(u.getId());
}
catch
(RuntimeException e) {
e.printStackTrace();
// throw e;
}
}
}
OnlineUserListener
package
com.www.bjjssc.util;
import
javax.servlet.http.HttpSessionEvent;
import
javax.servlet.http.HttpSessionListener;
/**
* 在线用户监听
*/
public
class
OnlineUserListener
implements
HttpSessionListener {
public
void
sessionCreated(HttpSessionEvent event) {
OnlineUser u =
new
OnlineUser();
System.out.println(
"你登录网站========="
+u.getId());
u.setName(
"---"
);
u.setId(event.getSession().getId());
event.getSession().setAttribute(
"currentUser"
,u);
OnlineUsers.getInstance().addUser(u);
}
public
void
sessionDestroyed(HttpSessionEvent event) {
System.out.println(
"删除用户:"
+event.getSession().getAttribute(
"currentUser"
));
OnlineUsers.getInstance().removeUser(event.getSession().getId());
}
}
OnlineUsers
package
com.www.bjjssc.util;
import
java.util.Collection;
import
java.util.HashMap;
import
java.util.Map;
import
javax.servlet.http.HttpSession;
import
javax.servlet.http.HttpSessionBindingEvent;
import
javax.servlet.http.HttpSessionBindingListener;
/**
* 在线用户统计
* author:
*/
public
class
OnlineUsers
implements
HttpSessionBindingListener {
private
Map<String, OnlineUser> users =
new
HashMap<String, OnlineUser>();
private
static
OnlineUsers onlineUsers =
new
OnlineUsers();
public
static
OnlineUsers getInstance() {
return
onlineUsers;
}
/**
* @return
*/
public
Collection getUsers() {
return
users.values();
}
public
void
addUser(OnlineUser user) {
users.put(user.getId(), user);
}
public
void
removeUser(String userId) {
users.remove(userId);
}
/**
* 对象实例(即OnlineUserListener的实例)作为一个属性被设置到session的
* 时候,会调用本方法,这种情况一般发生在点击登录按钮以后的处理过程中 设置
*
* @see javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent)
*/
public
void
valueBound(HttpSessionBindingEvent event) {
// 现在暂时不需要额外处理,你可以在这里记录日志等
}
/**
* 当Session超时,或本实例被从session中移除的时候被调用,这种情况一般 发生在注销方法的处理过程中
*
* @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent)
*/
public
void
valueUnbound(HttpSessionBindingEvent event) {
try
{
HttpSession session = event.getSession();
OnlineUser u = (OnlineUser) session.getAttribute(
"currentUser"
);
System.out.println(
"删除用户:"
+u.getName());
this
.removeUser(u.getId());
}
catch
(RuntimeException e) {
e.printStackTrace();
// throw e;
}
}
}
web.xml配置
<!-- 设置网站访问监听器 -->
<listener>
<listener-class>
com.estone.www.aqjgws.util.bean.OnlineUserListener
</listener-class>
</listener>
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图