Javaweb之监听器的使用
概念:
监听器,简单理解就是监听观察某个事件的发生情况,当被监听的事件发生,事件发生者(事件源) 就会给注册该事件的监听者(监听器)发送消息,将某些信息传递给监听者,同时监听者也可以获得一份事件对象,根据这个对象可以获得相关属性和执行相关操作。
监听器模型涉及以下三个对象,模型图如下:
(1)事件:用户对组件的一个操作,或者说程序执行某个方法,称之为一个事件。
(2)事件源:发生事件的组件就是事件源,也就是被监听的对象。
(3)事件监听器(处理器):监听并负责处理事件的方法。
监听器的实现:
实现显示网站人数的监听器主要有三个步骤:
-
编写一个监听类,实现的是HttpSessionListener接口;
-
在index.jsp中获取并显示数据;
-
在web.xml中注册监听器。
步骤一:编写一个监听类OnlineCountListener
package listener; import javax.servlet.ServletContext; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; //统计网站在线人数,就是统计session public class OnlineCountListener implements HttpSessionListener { //创建session监听,一旦创建就会触发一次这个事件 public void sessionCreated(HttpSessionEvent httpSessionEvent) { ServletContext context = httpSessionEvent.getSession().getServletContext(); System.out.println(httpSessionEvent.getSession().getId()); Integer OnlineCount = (Integer) context.getAttribute("OnlineCount"); if (OnlineCount==null){ OnlineCount = new Integer(1); }else { int count = OnlineCount.intValue(); OnlineCount = new Integer(count+1); } context.setAttribute("OnlineCount",OnlineCount); } //销毁session监听 public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { ServletContext context = httpSessionEvent.getSession().getServletContext(); Integer OnlineCount = (Integer) context.getAttribute("OnlineCount"); if (OnlineCount==null){ OnlineCount = new Integer(0); }else { int count = OnlineCount.intValue(); OnlineCount = new Integer(count-1); } context.setAttribute("OnlineCount",OnlineCount); } /* * session的销毁: * 手动销毁:getSession().invalidate(); * 自动销毁:设置过期*/ }
在index.jsp中获取并显示数据:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<h1>当前有:<span><%=this.getServletConfig().getServletContext().getAttribute("OnlineCount")%></span>人在线</h1>
</body>
</html>
在web.xml中注册监听器:
<!--注册监听器--> <listener> <listener-class>listener.OnlineCountListener</listener-class> </listener>