Listener监听器(HttpSessionListener,HttpSessionAttributeListener)

HttpSessionListener用于实现session的创建和销毁。


统计在线人数

package com.xxx.listener;

import java.util.Hashtable;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

@WebListener
public class OnlineListener implements HttpSessionListener {

	//当与服务器之间开始session时触发该方法
	@Override
	public void sessionCreated(HttpSessionEvent arg0) {
		HttpSession session=arg0.getSession();
		ServletContext application=session.getServletContext();
		//获取session id
		String sessionId=session.getId();
		//如果是一次新的会话
		if(session.isNew()){
			String user=(String) session.getAttribute("user");
			//未登录用户当做游客
			user=(user==null)?"游客":user;
			Map<String,String> online=(Map<String, String>) application.getAttribute("online");
			if(online==null){
				online=new Hashtable<String, String>();
			}
			online.put(sessionId, user);
			application.setAttribute("online", online);
		}
	}

	//当用户与服务器之间session断开时触发该方法
	@Override
	public void sessionDestroyed(HttpSessionEvent arg0) {
		HttpSession session=arg0.getSession();
		ServletContext application=session.getServletContext();
		//获取session id
		String sessionId=session.getId();
		Map<String,String> online=(Map<String, String>) application.getAttribute("online");
		if(online!=null){
			//删除该用户在线信息
			online.remove(sessionId);
		}
		application.setAttribute("online", online);
	}

}


online.jsp

<body>
    <%
    Map<String,String> online=(Map<String,String>)application.getAttribute("online");
    for(String sessionId:online.keySet()){
    %>
    <tr>
    	<td><%=sessionId %></td>
    	<td><%online.get(sessionId) %></td>
    </tr>
    <%} %>
  </body>




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值