java监听器记录访问量,javaweb监听器记录应用的在线人数[从学习到工作(四)]

1.web.xml的配置

com.test.listener.MySessionListener

1

      2.java代码

package com.test.listener;

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

import javax.servlet.ServletContext;

import javax.servlet.ServletRequest;

import javax.servlet.ServletRequestEvent;

import javax.servlet.ServletRequestListener;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

/**

* 记录访问应用的在线人数

* @author zenglx

*

*/

public class MySessionListener implements HttpSessionListener,ServletRequestListener{

private static String ip = null;

private static Map hm = new HashMap();

private static int activeNumber = 1;

public void sessionCreated(HttpSessionEvent event) {

HttpSession session = event.getSession();

ServletContext context = session.getServletContext();

activeNumber = (Integer) (context.getAttribute(ip)==null?1:context.getAttribute(ip));

if(hm.isEmpty()) {

hm.put(ip, activeNumber);

} else {

Set keys = hm.keySet();

//判断ip是否在map中

boolean isContans = keys.contains(ip);

if(isContans) {

activeNumber++;

//将ip和session连接数放入map中,在key相同的情况下,Map中只有一个键值对

hm.put(ip, activeNumber);

} else {

hm.put(ip, activeNumber);

}

}

context.setAttribute(ip, activeNumber);

context.setAttribute(session.getId(),ip);

System.out.println("sessionCreated:"+"在线人数:"+hm.size()+"---"+ip+"的session连接数:"+activeNumber+":"+session.getId());

//将在线人数放入context中

context.setAttribute("onLineNumber", hm.size());

}

public void sessionDestroyed(HttpSessionEvent event) {

HttpSession session = event.getSession();

ServletContext context = session.getServletContext();

int active = (Integer) context.getAttribute((String) context.getAttribute(session.getId()));

if(active == 1) {

context.setAttribute((String) context.getAttribute(session.getId()), active);

//map中移除session失效的ip

hm.remove((String) context.getAttribute(session.getId()));

System.out.println("sessionDestroy:"+"在线人数:"+hm.size()+"---"+(String) context.getAttribute(session.getId())+"的session连接数:0:"+session.getId());

//context中移除放入其中的ip地址和 sessionid

context.removeAttribute((String) context.getAttribute(session.getId()));

context.removeAttribute(session.getId());

} else {

context.setAttribute((String) context.getAttribute(session.getId()), active-1);

System.out.println("sessionDestroy:"+"在线人数:"+hm.size()+"---"+(String) context.getAttribute(session.getId())+"的session连接数:"+(active-1)+":"+session.getId());

//context中移除放入其中的 sessionid

context.removeAttribute(session.getId());

}

//将在线人数放入context中

context.setAttribute("onLineNumber", hm.size());

}

public void requestDestroyed(ServletRequestEvent arg0) {

}

public void requestInitialized(ServletRequestEvent event) {

ServletRequest request = event.getServletRequest();

HttpServletRequest req = (HttpServletRequest) request;

ip = req.getRemoteAddr();

}

}

总结:记录在某一时间应用访问的在线人数,可以看到同一IP下有多少session连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值