(面向事件编程概念)
<listener> <listener-class>com.kiqi.listener.MyListener</listener-class> </listener>
一、监听器类型
1.Listener是Servlet的监听器
2.可以监听客户端的请求、服务端的操作等。
3.通过监听器,可以自动激发一些操作,如监听在线用户数量,当增加一个HttpSession时,给在线人数加1。
4.编写监听器需要实现相应的接口
5.编写完成后在web.xml文件中配置一下,就可以起作用了
6.可以在不修改现有系统基础上,增加web应用程序生命周期事件的跟踪
二、监听器类型
按监听的对象(环境对象)划分:
1. 用于监听应用程序环境对象(ServletContext的事件监听器 - application
//ServletContextListener:用于对Servlet整个上下文进行监听(创建、销毁)。 public void contextInitialized(ServletContextEvent sce);//上下文初始化 public void contextDestroyed(ServletContextEvent sce);//上下文销毁 public ServletContext getServletContext();//ServletContextEvent事件:取得一个ServletContext(application)对象 //ServletContextAttributeListener:对Servlet上下文属性的监听(增删改属性)。 public void attributeAdded(ServletContextAttributeEvent scab);//增加属性 public void attributeRemoved(ServletContextAttributeEvent scab);//属性删除 public void attributeRepalced(ServletContextAttributeEvent scab);//属性替换(第二次设置同一属性) //ServletContextAttributeEvent事件:能取得设置属性的名称与内容 public String getName();//得到属性名称 public Object getValue();//取得属性的值
2. 用于监听用户会话对象(HttpSession Listener)的事件监听器 - session
//HttpSessionListener接口:对Session的整体状态的监听。 public void sessionCreated(HttpSessionEvent se);//session创建 public void sessionDestroyed(HttpSessionEvent se);//session销毁 //HttpSessionEvent事件: public HttpSession getSession();//取得当前操作的session //HttpSessionAttributeListener接口:对session的属性监听。 public void attributeAdded(HttpSessionBindingEvent se);//增加属性 public void attributeRemoved(HttpSessionBindingEvent se);//删除属性 public void attributeReplaced(HttpSessionBindingEvent se);//替换属性 //HttpSessionBindingEvent事件: public String getName();//取得属性的名称 public Object getValue();//取得属性的值 public HttpSession getSession();//取得当前的session public void invalidate();//使session失效方法 - session.invalidate();
3. 用于监听请求消息对象(ServletRequest Listener)的事件监听器 - request
//ServletRequestListener:用于对Request请求进行监听(创建、销毁) public void requestInitialized(ServletRequestEvent sre);//request初始化 public void requestDestroyed(ServletRequestEvent sre);//request销毁 //ServletRequestEvent事件: public ServletRequest getServletRequest();//取得一个ServletRequest对象 public ServletContext getServletContext();//取得一个ServletContext(application)对象 //ServletRequestAttributeListener:对Request属性的监听(增删改属性)。 public void attributeAdded(ServletRequestAttributeEvent srae);//增加属性 public void attributeRemoved(ServletRequestAttributeEvent srae);//属性删除 public void attributeReplaced(ServletRequestAttributeEvent srae);//属性替换(第二次设置同一属性) //ServletRequestAttributeEvent事件:能取得设置属性的名称与内容 public String getName();//得到属性名称 public Object getValue();//取得属性的值
按监听的事件类项划分
- 用于监听域对象自身的创建和销毁的事件监听器
- 用于监听域对象中的属性的增加和删除的事件监听器
- 用于监听绑定到HttpSession域中的某个对象的状态的事件监听器
1 import javax.servlet.ServletContextEvent; 2 import javax.servlet.ServletContextListener; 3 4 public class MyListener implements ServletContextListener { 5 public void contextDestroyed(ServletContextEvent sce) { 6 System.out.println("die"); 7 } 8 9 public void contextInitialized(ServletContextEvent sce) { 10 System.out.println("init"); 11 } 12 }
1 public class HttpSessionListenerImpl implements HttpSessionListener { 2 public void sessionCreated(HttpSessionEvent event) { 3 ServletContext app = event.getSession().getServletContext(); 4 int count = Integer.parseInt(app.getAttribute("onLineCount").toString()); 5 count++; 6 app.setAttribute("onLineCount", count); 7 int maxOnLineCount = Integer.parseInt(app.getAttribute("maxOnLineCount").toString()); 8 if (count > maxOnLineCount) { 9 //记录最多人数是多少 10 app.setAttribute("maxOnLineCount", count); 11 DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 12 //记录在那个时刻达到上限 13 app.setAttribute("date", df.format(new Date())); 14 } 15 } 16 //session注销、超时时候调用,停止tomcat不会调用 17 public void sessionDestroyed(HttpSessionEvent event) { 18 ServletContext app = event.getSession().getServletContext(); 19 int count = Integer.parseInt(app.getAttribute("onLineCount").toString()); 20 count--; 21 app.setAttribute("onLineCount", count); 22 } 23 }
参考:Listener 监听器
原文地址:https://www.cnblogs.com/kiqi/p/10455344.html
时间: 2024-10-29 04:14:56