1.什么是监听器
javaweb有三大组件,分别是servlet,listener 和过滤器.
其中listener就是监听器.
监听器下面主要介绍两种情况的监听器.
2.情况一,
监听器其实主要解决一个问题,那就是谁监听谁?换句话说,就是要实现一个监听接口,并且还需要注册这个监听器.
情况一的监听器是针对三大域对象来进行监听的,分别是servletContext 和request以及session.
监听分为两种情况,一种是监听域对象的生命周期,另外一种则是监听域对象的存储,替换和删除属性的变化.
两种情况的实现接口也不一样,
假如是监听生命周期的,那就需要实现一个类,继承接口ServletContextListener(只针对监听servletContext情况,不过其他两个域对象类似),要实现两个方法,分别表示ServletContext的创建和销毁
假如是监听属性变化的,实现一个类继承于ServletContextAttributeListener接口即可.
实现了接口之后,还需要注册.
在项目的web.xml文件里面定义listener标签,该标签下面有一个子标签,子标签就是填写实现接口的那个类的全名称.
3.情况二
这种类型的监听器是针对javabean的,不是针对域对象的.
而且也不需要在web.xml文件里面注册
实现方法很简单,就是在javabean的类继承接口,接口有两种,分别代表两种监听器,一种是sessionBindingListener,另外一种就是sessionAvtivationListener.下面分别介绍两种监听器
①sessionBindingListener的作用是可以使得javabean对象知道自己有没有被添加到session里面去.无论添加还是删除都会触发相对应的回调方法.
至于回调方法则是继承这个接口必须要实现的两个方法.
②sessionAvtivationListener,的作用就是可以使得javabean对象知道自己是不是跟session一起钝化或者活化.无论是钝化还是活化,都会触发对应的回调方法.
注意:
要想实现该类型的监听,不仅需要javabean继承这个接口.
另外还需要两个步骤,
1.进行相关配置,如何配置自行百度
2.javabean必须要继承持久化的接口
补充, 什么是钝化以及活化?
首先我们要知道,一个session是有最大生命周期的,到了时间就会被清除,但是还有另外一种情况
假如一个session长时间没有被使用,而且还没有到达这个最大生命周期.
我们可以有两种做法,一种是调用session的相关api,使得它失效.
另外一种就是可以将这个session做持久化操作.所谓的持久化操作就是将这个session暂时保存到硬盘里面,到了需要的时候,在调回内存里面.
其实,当tomcat关闭的时候,servletContext会被销毁,但是所有的session都会被持久化,然后重新打开tomcat’的时候就会将这些session都取回内存.
其实,我们的这个sessionAvtivationListener实现的监听效果也是类似的,只不过我们这个是不需要关闭服务器的.我们可以设置每隔一段时间就让session实现钝化以及活化.