1.在线用户,包括登录用户和未登录用户。
后台java
public class OnlineUser implements HttpSessionListener{
private static int sessionCount = 0;//在线用户数
//session创建,用户数加1
public void sessionCreated(HttpSessionEvent event) {
System.out.println("==================sessionCreated");
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();
sessionCount++;
application.setAttribute("onlineCount", sessionCount);
}
//session销毁,用户数减1
public void sessionDestroyed(HttpSessionEvent event) {
System.out.println("==================sessionDestroyed");
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();
if (sessionCount >= 1) {
sessionCount = sessionCount - 1;
}
application.setAttribute("onlineCount", sessionCount);
}
}
前台jsp
当前在线用户数:<s:property value="#application.onlineCount"/>人
2.登录用户统计
后台java
import javax.servlet.http.*;
import com.qkj.entity.User;
import java.util.*;
public class OnLineUser implements HttpSessionBindingListener {
private String userName;
public OnLineUser() {
System.out.println("请求:::::OnLineUser::::::");
}
private static Vector users = new Vector();
//获得在线用户数
public int getCount() {
users.trimToSize();// 调整Vector users的容量为Vector users的大小
return users.capacity();// 返回users的容量
}
//用户是否已经在线
public boolean existUser(String userName) {
users.trimToSize();
boolean existUser = false;
for (int i = 0; i < users.capacity(); i++) {
if (userName.equals((String) users.get(i))) {
existUser = true;
break;
}
}
return existUser;
}
//删除用户
public boolean deleteUser(String userName) {
users.trimToSize();
if (existUser(userName)) {
int currUserIndex = -1;
for (int i = 0; i < users.capacity(); i++) {
if (userName.equals((String) users.get(i))) {
currUserIndex = i;
break;
}
}
if (currUserIndex != -1) {
users.remove(currUserIndex);
users.trimToSize();
return true;
}
}
return false;
}
public Vector getOnLineUser() {
return users;
}
public void valueBound(HttpSessionBindingEvent e) {
users.trimToSize();
if (!existUser(e.getName())) {
users.add(e.getName());
System.out.print(e.getName() + " 登入到系统 " + (new Date()));
System.out.println(" 在线用户数为:" + getCount());
} else {
System.out.println(e.getName() + "已经存在");
}
}
public void valueUnbound(HttpSessionBindingEvent e) {
users.trimToSize();
String userName = e.getName();
deleteUser(userName);
System.out.print(userName + " 退出系统 " + (new Date()));
System.out.println(" 在线用户数为:" + getCount());
}
}
注册和登录成功时,开始计数
HttpServletRequest request = ServletActionContext.getRequest();
//监听在线用户
request.getSession().setAttribute(userNew.getUserName(), new OnLineUser());
注销或者session超时,sesssion-1
session.invalidate();
浙公网安备 33010602011771号