JavaWeb学习笔记之监听器
监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。(摘自这篇博客)
在Javaweb中使用监听器。实现一个监听器的步骤:
编写一个监听器(实现相应的监听器接口,有很多种)
![]()
配置监听器(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;
public class OnlineCountListener implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent httpSessionEvent) { System.out.println("session被创建:"+httpSessionEvent.getSession().getId()); ServletContext servletContext = httpSessionEvent.getSession().getServletContext(); Integer onlineCount = (Integer)servletContext.getAttribute("OnlineCount"); if (onlineCount == null){ onlineCount = new Integer(1); }else{ onlineCount += 1; } servletContext.setAttribute("OnlineCount",onlineCount); } @Override public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { ServletContext servletContext = httpSessionEvent.getSession().getServletContext(); Integer onlineCount = (Integer)servletContext.getAttribute("OnlineCount"); 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个人,是因为还没刷新数据。可以在前端页面中添加一个周期定时器定时刷新在线人数)
![]()