0%

监听器

JavaWeb学习笔记之监听器

监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。(摘自这篇博客

在Javaweb中使用监听器。实现一个监听器的步骤

  1. 编写一个监听器(实现相应的监听器接口,有很多种)

  2. 配置监听器(web.xml)

代码演示

编写一个监听器类OnlineCountListener,用于统计网站在线人数。通过统计session实现,数据保存在ServletContext中。(下边代码演示部分所使用的开发环境搭建,可以查看这里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package com.qsdbl.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) {
System.out.println("session被创建:"+httpSessionEvent.getSession().getId());
ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
Integer onlineCount = (Integer)servletContext.getAttribute("OnlineCount");//数据保存在servletContext中
if (onlineCount == null){
onlineCount = new Integer(1);
}else{
onlineCount += 1;
}
servletContext.setAttribute("OnlineCount",onlineCount);
}
//监听session销毁
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
Integer onlineCount = (Integer)servletContext.getAttribute("OnlineCount");//数据保存在servletContext中
if (onlineCount == null){
onlineCount = new Integer(0);
}else{
onlineCount -= 1;
}
servletContext.setAttribute("OnlineCount",onlineCount);
}
}

web.xml中注册监听器。(比注册Servlet、注册过滤器Filter要简单)

1
2
3
4
<!--  注册监听器-->
<listener>
<listener-class>com.qsdbl.listener.OnlineCountListener</listener-class>
</listener>

最后,编写一个jsp页面来显示数据。(注意属性名不要写错了)

运行结果

结果有点不如意,多了一个人数。不知道第一个被创建的session用来做什么了,所以在使用的时候还需要减去1。(上边的浏览器还显示2个人,是因为还没刷新数据。可以在前端页面中添加一个周期定时器定时刷新在线人数)

若图片不能正常显示,请在浏览器中打开

欢迎关注我的其它发布渠道