文章目录
什么是监听器监听器的用途监听器的术语监听器的执行过程Servlet中的监听器监听三个域对象的创建和销毁的监听器监听三个域对象属性变更的监听器监听HttpSession中Java类状态改变的监听器
什么是监听器
监听器就是一个实现了特定接口的java类,这个java类用于监听另一个java类的方法调用或者属性的改变。当被监听对象发生上述事件后,监听器某个方法将会立即执行。
监听器的用途
用来监听其他对象的变化,主要应用在图形界面的开发上。
监听器的术语
事件源:被监听的对象。(汽车)监听器:监听的对象。(报警器)事件源和监听器绑定:在汽车上安装报警器事件:指的是事件源对象的改变(踹了汽车一脚)——主要功能获得事件源对象。
监听器的执行过程
Servlet中的监听器
在Servlet中定义了多种类型的监听器,他们用于监听的事件源分别是ServletContext、HttpSession、ServletRequest这三个域对象。Servlet中的监听器的分类
一类:监听三个域对象的创建和销毁的监听器(三个);二类:监听三个域对象属性变更的监听器(三个);三类:监听HttpSession中JavaBean的状态的改变(钝化、活化、绑定、解除绑定)的监听器(两个)。
监听三个域对象的创建和销毁的监听器
ServletContextListener监听器的使用
新建一个类实现ServletContextListener接口,重写contextInitialized()(监听ServletContext对象的创建)、contextDestroyed()(监听ServletContext对象的销毁)方法分析:事件源:ServletContext;监听器:新建的监听类;事件源和监听器的绑定:配置: ServletContextListener的企业用途:加载框架的配置文件;定时任务调度。 HttpSessionListener监听器的使用
用来监听HttpSession对象的创建和销毁。新建一个类实现HttpSessionListener接口,重写sessionCreated()(监听HttpSession对象的创建)、sessionDestroyed()(监听HttpSession对象的销毁)方法,配置同上。访问html页面和Servlet不会创建Session对象,访问JSP页面会创建,因为JSP在被编译成Servlet时会默认调用getSession()方法,即Session对象被创建了,监听器的sessionCreated()方法执行了。Session对象销毁:①过期(默认30分钟);②手动销毁;③服务器非正常关闭(正常关闭时Session会被系列化)。 ServletRequestListener监听器的使用
用来监听ServletRequest对象的创建和销毁。新建一个类实现ServletRequestListener接口,重写requestInitialized()(监听ServletRequest对象的创建)、requuestDestroyed()(监听ServletRequest对象的销毁)方法,配置同上。访问html、JSP、Servlet都会创建ServletRequest对象,即监听器的requestInitialized()方法执行了。
监听三个域对象属性变更的监听器
ServletContextAttributeListener监听器、HttpSessionAttributeListener监听器、ServletRequestAttributeListener监听器方法:attributeAdded()、attributeRemoved()、attributeReplaced()
监听HttpSession中Java类状态改变的监听器
状态:保存在Session域中的java类可以有多种状态:绑定到Session中;从Session中解除绑定;随Session对象持久化到一个存储设备中(钝化);随session对象从一个存储设备中恢复(活化)。 Servlet规范中定义了两个特殊的监听接口,帮助java类了解自己在Session域中的状态:
HttpSessionBindingListener接口HttpSessionActivationListener接口
实现这两个接口的类不需要在web.xml中进行配置。
HttpSessionBindingListener监听器
监听Java类在HttpSession中的绑定和解除绑定的状态的监听器(javabean setAttribute即绑定,rempoveAttribute即解绑)。方法:valueBound()、valueUnbound()使用方式:javabean直接实现HttpSessionBindingListener接口,重写方法即可。 HttpSessionActivationListener监听器 监听Java类在HttpSession中的钝化和活化的监听器(序列化与反序列化)。
方法:sessionDidActivate()、sessionWillPassivate()使用方式:javabean直接实现HttpSessionActivationListener接口,序列化还需实现Serializable接口,重写方法即可。作用:假设一个购物网站同时有30万人访问,那么服务器需要开辟30万个Session空间,假如30分钟内都没有操作,那空间就被浪费掉了。可以通过配置短时间无操作使Session序列化,达到节约资源的目的。配置完成Session的序列化与反序列化 新建context.xml进行配置。Context标签可以配置在: tomcat/conf/context.xml:所有tomcat下虚拟主机和虚拟目录下的工程都会序列化session;tomcat/config/catalina/localhost/context.xml:localhost虚拟主机下的所有项目会序列化session;工程/META-INF/context.xml:当前工程才会序列化session。