监听器
2016-05-03 14:07
232 查看
概述
监听器: 主要是用来监听特定对象的创建或销毁、属性的变化的! 是一个实现特定接口的普通java类! 对象: 自己创建自己用 (不用监听) 别人创建自己用 (需要监听) Servlet中哪些对象需要监听? request / session / servletContext 分别对应的是request监听器、session相关监听器、servletContext监听器 监听器(listener) 监听器接口: 一、监听对象创建/销毁的监听器接口 Interface ServletRequestListener 监听request对象的创建或销毁 Interface HttpSessionListener 监听session对象的创建或销毁 Interface ServletContextListener 监听servletContext对象的创建或销毁 二、监听对象属性的变化 Interface ServletRequestAttributeListener 监听request对象属性变化: 添加、移除、修改 Interface HttpSessionAttributeListener 监听session对象属性变化: 添加、移除、修改 Interface ServletContextAttributeListener 监听servletContext对象属性变化 三、session相关监听器 Interface HttpSessionBindingListener 监听对象绑定到session上的事件 Interface HttpSessionActivationListener(了解) 监听session序列化及反序列化的事件
生命周期监听器
生命周期监听器: 监听对象的创建、销毁的过程! ServletRequestListener HttpSessionListener ServletContextListener 监听器开发步骤: 1. 写一个普通java类,实现相关接口; 2. 配置(web.xml)
/** * 监听request对象的创建或销毁 */ public class MyRequestListener implements ServletRequestListener{ // 对象销毁 @Override public void requestDestroyed(ServletRequestEvent sre) { // 获取request中存放的数据 Object obj = sre.getServletRequest().getAttribute("cn"); System.out.println(obj); System.out.println("MyRequestListener.requestDestroyed()"); } // 对象创建 @Override public void requestInitialized(ServletRequestEvent sre) { System.out.println("MyRequestListener.requestInitialized()"); } }
/** * 监听Session对象创建、销毁 */ public class MySessionListener implements HttpSessionListener{ // 创建 @Override public void sessionCreated(HttpSessionEvent se) { System.out.println("MySessionListener.sessionCreated()"); } // 销毁 @Override public void sessionDestroyed(HttpSessionEvent se) { System.out.println("MySessionListener.sessionDestroyed()"); } }
/** * 监听ServletContext对象创建或销毁 */ public class MyServletContextListener implements ServletContextListener{ @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("MyServletContextListener.contextDestroyed()"); } @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("1..........MyServletContextListener.contextInitialized()"); } }
Web.xml <!-- 监听request对象创建、销毁 --> <listener> <listener-class>cn.itcast.a_life.MyRequestListener</listener-class> </listener> <!-- 监听session对象创建、销毁 --> <listener> <listener-class>cn.itcast.a_life.MySessionListener</listener-class> </listener> <!-- 监听servletContext对象创建、销毁 --> <listener> <listener-class>cn.itcast.a_life.MyServletContextListener</listener-class> </listener>
属性监听器
监听: request/session/servletContext 对象属性的变化! ServletRequestAttributeListener HttpSessionAttributeListener ServletContextAttributeListener 总结:先写类,实现接口; 再配置
/** * 监听session对象属性的变化 */ public class MySessionAttrListener implements HttpSessionAttributeListener { // 属性添加 @Override public void attributeAdded(HttpSessionBindingEvent se) { // 先获取session对象 HttpSession session = se.getSession(); // 获取添加的属性 Object obj = session.getAttribute("userName"); // 测试 System.out.println("添加的属性:" + obj); } // 属性移除 @Override public void attributeRemoved(HttpSessionBindingEvent se) { System.out.println("属性移除"); } // 属性被替换 @Override public void attributeReplaced(HttpSessionBindingEvent se) { // 获取sesison对象 HttpSession session = se.getSession(); // 获取替换前的值 Object old = se.getValue(); System.out.println("原来的值:" + old); // 获取新值 Object obj_new = session.getAttribute("userName"); System.out.println("新值:" + obj_new); } }
web.xml <!-- 属性监听器 --> <listener> <listener-class>cn.itcast.b_attr.MySessionAttrListener</listener-class> </listener>
其他监听器
session相关监听器 HttpSessionBindingListener 监听对象绑定/解除绑定到sesison上的事件! 步骤: 对象实现接口; 再把对象绑定/解除绑定到session上就会触发监听代码。 作用: (上线提醒!)
/** * 监听此对象绑定到session上的过程,需要实现session特定接口 */ public class Admin implements HttpSessionBindingListener { //… 省略get/set // 对象放入session @Override public void valueBound(HttpSessionBindingEvent event) { System.out.println("Admin对象已经放入session"); } // 对象从session中移除 @Override public void valueUnbound(HttpSessionBindingEvent event) { System.out.println("Admin对象从session中移除!"); } }
相关文章推荐
- MongoDB插入文档
- How do I keep my driver from running out of kernel-mode stack
- git clean(转载)
- 红黑树的经典讲解
- SubVersion服务安装设置
- 本周汇总
- SAP HANA中调试存储过程
- MongoDB删除数据库
- 关于web自动化测试的一些自己的思考和总结
- angular.js[2]
- Android Studio 小技巧合集
- MongoDB创建数据库
- Html5 添加class 浏览器不支持问题
- Pycharm显示行号,修改字号大小
- snat的理解和回流的理解(内网可以访问外网地址)
- eclipse编写MapReduce程序依赖的JAR包
- 第十周练习 继承机制阅读程序
- jquery导航切换
- Shader效果算法剖析笔记(一)
- 史上最完整的Android开发工具集合