Java中监听器Listener详解
作者:Zero摄氏度
1、Listener
- 是由Java编写的WEB组件,主要完成对内置对象状态的变化 (创建、销毁)和属性的变化 进行监听,做进一步的处理
- 作用:主要对session和application内置对象监听。
2、对application监听
package cn.mldn.lxh.listener ; import javax.servlet.* ; public class ServletContextDemo implements ServletContextListener,ServletContextAttributeListener { private ServletContext application = null ; // 实现方法 public void contextInitialized(ServletContextEvent sce) { this.application = sce.getServletContext() ; System.out.println("** 上下文初始化 ...") ; System.out.println("** 当前虚拟目录的绝对路径:"+this.application.getRealPath("/")) ; } public void contextDestroyed(ServletContextEvent sce) { System.out.println("** 上下文销毁 ...") ; } public void attributeAdded(ServletContextAttributeEvent scab) { System.out.println("** 增加属性:"+scab.getName()+" --> "+scab.getValue()) ; } public void attributeRemoved(ServletContextAttributeEvent scab) { System.out.println("** 删除属性:"+scab.getName()+" --> "+scab.getValue()) ; } public void attributeReplaced(ServletContextAttributeEvent scab) { System.out.println("** 替换属性:"+scab.getName()+" --> "+scab.getValue()) ; } }; /* <listener> <listener-class>cn.mldn.lxh.listener.ServletContextDemo</listener-class> </listener> */
1、语法 :
- 是WEB组件,一定要有包声明 package cn.mldn.lxh.listener ;
- 包导入 javax.servlet
- 实现接口 ServletContextListener ,ServletContextAttributeListener
- 实现接口的方法
2、实现方法
实现的两个接口,一个是为了实现对application状态监听的方法,一个是为了实现对applciation属性的变化监听的方法。如下:
- 对applicaiton的状态做监听 implements ServletContextListener ,实现两个方法:
public void contextInitialized(ServletContextEvent sce);
tomcat一启动,先创建出监听器,对application的创建和销毁做监听。当application一创建,被监听器监听到,就调用contextInitialized()方法;
public void contextDestroyed(ServletContextEvent sce);
当application一销毁,监听器就会监听到applicaiton销毁,调用contextDestoryed();
对applicaiton里属性的变化做监听 , implements ServletContextAttributeListener
public void attributeAdded(ServletContextAttributeEvent scab) public void attributeRemoved(ServletContextAttributeEvent scab) public void attributeReplaced(ServletContextAttributeEvent scab)
通过实现ServletContextAttributeListener 的三个方法,对applcation的属性变化做监听。注意:监听到的都是已经完成的变化 。比如往application里设值属性、删除属性、替换属性值等,这些都会被监听器监听到。可以通过方法获得增加的属性名和属性值,获得删除的属性名和属性值,获得替换的属性名和替换前的属性值(是被替换的,而不是替换后的值)
3、Tomcat一启动,创建了哪些内置对象?
- tomcat一启动,首先会创建监听器,去监听内置对象的状态和属性变化。
- 然后会创建Config对象,来收集配置文件中的初始参数,一共有会创建两个Config对象,分别是封装Servlet初始参数的ServletConfig,封装Filter初始参数的FilterConfig。
- 然后会创建applicaiton对象
- 然后创建Filter
- 如果配了loadonstartup,就再创建servlet。
3、对session做监听
package cn.mldn.lxh.listener ; import javax.servlet.http.* ; public class HttpSessionDemo implements HttpSessionListener,HttpSessionAttributeListener { private HttpSession session ; // 实现方法 public void sessionCreated(HttpSessionEvent se) { this.session = se.getSession() ; System.out.println("** Session 创建 ....") ; System.out.println("** SessionID --> "+this.session.getId()) ; } public void sessionDestroyed(HttpSessionEvent se) { System.out.println("** Session 销毁 ....") ; } public void attributeAdded(HttpSessionBindingEvent se) { System.out.println("** Session 增加属性:"+se.getName()+" --> "+se.getValue()) ; System.out.println("** 获得Session "+se.getSession().getId()) ; } public void attributeRemoved(HttpSessionBindingEvent se) { System.out.println("** Session 删除属性:"+se.getName()+" --> "+se.getValue()) ; } public void attributeReplaced(HttpSessionBindingEvent se) { System.out.println("** Session 替换属性:"+se.getName()+" --> "+se.getValue()) ; } }; /* <listener> <listener-class>cn.mldn.lxh.listener.HttpSessionDemo</listener-class> </listener> */
包声明包导入类声明,实现 HttpSessionListener接口,实现对状态监听的方法实现HttpSessionAttributeListener接口,实现对属性变化监听的方法
什么时候创建session?
我们可以通过public void sessionCreated(HttpSessionEvent se) 来监听session的创建
- 访问服务器不会
- 访问静态组件不会(html)
- 只有访问动态组件(jsp),才会创建请求—第一次发送请求
到此这篇关于Java中监听器Listener详解的文章就介绍到这了,更多相关java 监听器Listener内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!