1 监听器
监测网站在线人数(基于session)
1、编写一个监听器,实现HttpSessionListener
package com.kwok.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
// 统计网站在线人数:统计session数
public class OnlineCountListener implements HttpSessionListener {
// 创建session监听: 看你的一举一动
// 一旦创建Session就会触发一次这个事件
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
ServletContext ctx = httpSessionEvent.getSession().getServletContext();
Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");
if (onlineCount==null){
onlineCount = new Integer(1);
}else {
int count = onlineCount.intValue();
onlineCount = new Integer(count+1);
}
ctx.setAttribute("OnlineCount",onlineCount);
}
// 销毁session监听
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
ServletContext ctx = httpSessionEvent.getSession().getServletContext();
Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");
if (onlineCount==null){
onlineCount = new Integer(0);
}else {
int count = onlineCount.intValue();
onlineCount = new Integer(count-1);
}
ctx.setAttribute("OnlineCount",onlineCount);
}
/*
Session销毁:
1.手动销毁 getSession().invalidate();
2.自动销毁 在web.xml中设置超时时间
*/
}
2、web.xml中注册监听器
<!--注册监听器-->
<listener>
<listener-class>com.kwok.listener.OnlineCountListener</listener-class>
</listener>
放个页面显示下监听数据:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>在线人数</title>
</head>
<body>
<h1>当前有 <span style="color: red"><%=this.getServletConfig().getServletContext().getAttribute("OnlineCount")%></span> 人在线</h1>
</body>
</html>
测试:
再用IE访问下
2 过滤器,监听器常见应用
监听器在javaGUI中常常被使用:
用户登录才能进入主页!注销后就不能进去主页了!
1.用户登录之后,向Session中放用户的数据
2.进入主页的时候要判断用户是否已经登录,要求:在过滤器中实现!