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>