listener监听器介绍
listener可以监听服务器相关的状态变化,当服务器端状态发生改变,将调用相应的Listener,这种机制可以称为回调机制,
监听器主要有三类:
1、 ServletContextListener对servlet上下文进行监听
ServletContextAttributeListener对ServletContext属性的操作进行监听。比如增加、删除、修改属性。
2、 HttpSessionListener:对session对象的监听
HttpSessionAttributeListener对HttpSession属性的操作进行监听
3、 HttpRequestListener:对Request对象的监听
在web段实现监听实质:实现一系列的监听接口(实现相应的接口,复写各接口中相应的方法,在相应的事件触发的时候会执行自己的监听器中的复写方法,在各个方法中完成自己想要的操作,从而实现监听)
1、 ServletContextListener
public void contextInitialized(ServletContextEvent event); //这个方法在Web应用服务做好接受请求的时候被调用。如当应用开始的时候它会调用。我们可以在此做一些初始化信息
public void contextDestoryed(ServletContextEvent event); //当程序关闭时调用
2、 HttpSessionListener会话监听,来监听Session创建和销毁的事件
public void sessionCreated(HttpSessionEvent event); //Session创建
public void sessionDestoryed(HttpSessionEvent event); //Session销毁
3、HttpRequestListener 请求监听
public void requestinitialized(ServletRequestEvent event);
public void requestDestoryed(ServletRequestEvent event);
举例说明:统计在线人数
public class TestHttpSessionAttributeListener implements HttpSessionAttributeListener { @Override public void attributeAdded(HttpSessionBindingEvent se) { System.out.println("TestHttpSessionAttributeListener-->>attributeAdded()");; System.out.println("name===="+se.getName()); System.out.println("value===="+se.getValue()); if("user_info".equals(se.getName()))//如果增加的session属性为user_info,则将用户人数加1{ Integer count=(Integer)se.getSession().getServletContext().getAttribute("count"); if(count==null){//如果之前没有人在线,则现在为第一人 count=1; }else{ count++; } se.getSession().getServletContext().setAttribute("count", count); } } @Override public void attributeRemoved(HttpSessionBindingEvent arg0) { System.out.println("TestHttpSessionAttributeListener-->>attributeRemoved()");; } @Override public void attributeReplaced(HttpSessionBindingEvent arg0) { System.out.println("TestHttpSessionAttributeListener-->>attributeReplaced"); } }
web.xml配置
<listener> <listener-class>com.bjpowernode.drp.util.listener.TestHttpSessionAttributeListener</listener-class> </listener>