- 这个文件用来记录用户 用户在线个数 以及用户名密码
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Set;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- /**
- * @author heli
- *
- */
- public class OnlineUser {
- private static long online = 0;
- private static Map userNameMap = new HashMap();// 目前只提供在线用户中文名字
- // 以后如果有需求可以考虑扩充
- private static Log log = LogFactory.getLog(OnlineUser.class);
- public static long getOnline() {
- return online;
- }
- public static boolean userOnline(String memEName, String memCName) {
- log.debug("创建用户Session");
- try {
- log.debug("用户名为:" + memEName);
- log.debug("userNameMap" + userNameMap);
- if (userNameMap.containsKey(memEName)) {
- log.debug("用户重复登陆");
- return false;
- } else {
- userNameMap.put(memEName, memCName);
- return true;
- }
- } catch (Exception e) {
- log.error("将用户信息放入userNameMap失败,信息如下:" + e.getMessage());
- }
- log.debug("userNameMap" + userNameMap);
- return false;
- }
- public static void raise() {
- online++;
- log.debug("当前在线用户个数" + online);
- }
- public static void reduce() {
- online--;
- log.debug("当前在线用户个数" + online);
- }
- public static void userOffline(String memEName) {
- // TODO 自动生成方法存根
- log.debug("清除用户信息");
- try {
- log.debug("用户注销 用户名为:" + memEName);
- userNameMap.remove(memEName);
- } catch (Exception e) {
- log.error("清除用户信息失败:" + e.getMessage());
- }
- }
- public static void main(String arge[]) {
- System.out.println("+++++++++++++++==");
- Map map = new HashMap();
- map.put("1", "a");
- map.put("2", "b");
- map.put("3", "c");
- map.put("4", "d");
- map.put("5", "e");
- Set set = map.keySet();
- Iterator ito = set.iterator();
- while (ito.hasNext())
- System.out.println(ito.next());
- }
- /**
- * @return userNameMap
- */
- public static Map getUserNameMap() {
- return userNameMap;
- }
- /**
- * @param userNameMap
- * 要设置的 userNameMap
- */
- public static void setUserNameMap(Map userNameMap) {
- OnlineUser.userNameMap = userNameMap;
- }
- }
- 这个用户用来实现对用户登陆,注销,以及session 过期用户的处理
- package com.yc.ycportal.userutil;
- /**
- * @author heli
- *
- */
- import javax.servlet.http.HttpSessionEvent;
- import javax.servlet.http.HttpSessionListener;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import com.yc.ycportal.user.User;
- import com.yc.ycportal.util.Constants;
- public class OnlineUserListener implements HttpSessionListener {
- private static Log log = LogFactory.getLog(OnlineUserListener.class);
- public void sessionCreated(HttpSessionEvent hse) {
- OnlineUser.raise();
- }
- public void sessionDestroyed(HttpSessionEvent hse) {
- User user = (User) hse.getSession().getAttribute(Constants.LONGIN_USER);
- if (user == null)
- log.debug("捕获用户session注销操作,该用户为未登陆用户!");
- else {
- try {
- OnlineUser.userOffline(user.getMember().getMemname());
- } catch (Exception e) {
- log.error("清除在线用户信息时,捕获用户名出错,错误信息如下:" + e.getMessage());
- }
- }
- OnlineUser.reduce();
- }
- }
- 为了完成整个功能还需要 在用户登陆的时候调用userOnline(String memEName, String memCName)
- 用户注销的时候调用 public static void userOffline(String memEName) 以及session.invalidate()方法
- 为了启动session监听需要在 web.xml中加入
- <listener id="listener_11111111111111">
- <listener-class>com.yc.ycportal.userutil.OnlineUserListener</listener-class>
- </listener>
- 查看当前系统访问用户个数jsp如下:
- <%@ page contentType="text/html;charset=gb2312" %>
- <%@ page import="java.util.*"%>
- <html>
- <head>
- <title>在线用户信息</title>
- <meta http-equiv="refresh" content="20">
- </head>
- <body>
- <%
- Map map=com.yc.ycportal.userutil.OnlineUser.getUserNameMap();
- out.println("目前已经登陆的用户如下:");
- out.println("<BR>");
- Set set=map.keySet();
- Iterator ito = set.iterator();
- while(ito.hasNext()){
- String memName=""+ito.next();
- out.println("用户ID:"+memName);
- out.println(" 用户名:"+map.get(memName));
- out.println("<BR>");
- }
- out.print("当前访问系统的总人数为:");
- out.print(com.yc.ycportal.userutil.OnlineUser.getOnline());
- %>
- </body>
- </html>
转载于:https://blog.51cto.com/lya041/663292