(一)监听器的概述
1、什么是监听器
监听器就是一个实现了特定接口的Java类,这个Java类用于监听另一个Java类的方法调用,或者属性的改变。当被监听对象发生上述事件后,监听器某个方法将会立即被执行
2、监听器的用途
用来监听其他对象的变化的,主要应用在图形化界面的开发上
例如Java中的GUI、Android等,都有大量的监听器的使用
3、监听器的术语
事件源:指的是被监听对象(汽车)
监听器:指的是监听的对象(报警器)
事件源和监听器绑定:在汽车上安装报警器
事件:指的是事件源对象的改变(踹了汽车一脚),主要功能是获得事件源对象
(二)监听器的入门
1、监听器的入门程序
(三)Servlet中的监听器
一、Servlet中的监听器简介
在Servlet中定义了多种类型的监听器,它们用于监听的事件源分别是ServletContext、HttpSession和ServletRequest这三个域对象
二、Servlet中的监听器的分类
1、一类:监听三个域对象的创建和销毁的监听器(三个)
2、二类:监听三个域对象的属性变更(属性添加、移除、替换)的监听器(三个)
3、三类:监听HttpSession中JavaBean的状态改变(钝化、活化、绑定、解除绑定)的监听(两个)
(四)ServletContextListener监听器的使用
一、ServletContextListener监听器的作用
用来监听ServletContext域对象的创建和销毁的监听器
二、ServletContext创建和销毁
1、创建:在服务器启动的时候,为每个Web应用创建单独的ServletContext对象
2、销毁:在服务器关闭的时候,或者项目从Web服务器中移除的时候
三、ServletContextListener监听器的方法
1、监听ServletContext对象的创建
contextInitialized(ServletContextEvent sce)
2、监听ServletContext对象的销毁
contextDestroyed(ServletContextEvent sce)
四、编写监听器
1、监听器的代码
2、监听器的配置
五、ServletContextListener的企业用途
1、加载框架的配置文件
Spring框架提供了一个核心监听器叫ContextLoaderListener
2、定时任务调度
(五)HttpSessionListener监听器的使用
一、HttpSessionListener监听器作用
用来监听HttpSession对象的创建和销毁
二、HttpSession创建和销毁
创建:
服务器端第一次调用getSession()方法的时候
销毁:
非正常关闭服务器(正常关闭服务器Session会被序列化)
Session过期(默认过期时间30分钟)
手动调用session.invalidate()方法
三、HttpSessionListener监听器的方法
1、监听HttpSession对象创建
sessionCreated(HttpSessionEvent se)
2、监听HttpSession对象销毁
sessionDestroyed(HttpSessionEvent se)
四、编写监听器监听HttpSession对象创建和销毁
1、监听器的代码
2、监听器的配置
3、问题:
访问HTML是否会创建Session?
访问JSP是否会创建Session?
访问Servlet是否会创建Session?
(六)ServletRequestListener监听器的使用
一、ServletRequestListener监听器的作用
用于监听ServletRequest对象的创建和销毁
二、ServletRequest对象的创建和销毁
创建:从客户端向服务器发送一次请求,服务器就会创建Request对象
销毁:服务器对这次请求作出了响应之后,Request对象就销毁了
三、ServletRequestListener监听器的方法
1、监听ServletRequest对象的创建
requestInitialized(ServletRequestEvent sre)
2、监听ServletRequest对象的销毁
requestDestroyed(ServletRequestEvent sre)
四、编写监听器代码
1、监听器代码
2、监听器配置
3、问题:
访问HTML页面是否创建请求对象?会
访问JSP页面是否创建请求对象?会
访问Servlet是否创建请求对象?会
(七)统计当前在线人数的案例
此时获取初始值,进行+1操作。
如果Session销毁了,获取该值进行-1操作
二、代码实现
1、创建ServletContextListener进行初始化
2、创建HttpSessionListener
3、配置监听器
4、创建JSP页面
(八)监听三个域对象的属性变更的监听器
一、三类监听器
1、ServletContextAttributeListener
监听ServletContext对象中的属性变更(属性添加、移除、替换)的监听器
attributeAdded(ServletContextAttributeEvent event)
attributeRemoved(ServletContextAttributeEvent event)
attributeReplaced(ServletContextAttributeEvent event)
2、HttpSessionAttributeListener
监听HttpSession对象中的属性变更(属性添加、移除、替换)的监听器
attributeAdded(HttpSessionBindingEvent event)
attributeRemoved(HttpSessionBindingEvent event)
attributeReplaced(HttpSessionBindingEvent event)
3、ServletRequestAttributeListener
监听ServletRequest对象中的属性变更(属性添加、移除、替换)的监听器
attributeAdded(ServletRequestAttributeEvent srae)
attributeRemoved(ServletRequestAttributeEvent srae)
attributeReplaced(ServletRequestAttributeEvent srae)
二、演示第二类监听器
1、演示HttpSessionAttributeListener
2、配置监听器
3、编写测试的JSP
(九)监听HttpSession中Java类状态改变的监听器
一、第三类监听器概述
1、保存在Session域中的Java类可以有多种状态:绑定到Session中、从Session中解除绑定、随Session对象持久化到一个存储设备中(钝化)、随Session对象从一个存储设备中恢复(活化)
2、Servlet规范中中定义了两个特殊的监听的接口,来帮助Java类了解自己在Session域中的状态,分别是:
HttpSessionBindingListener接口
HttpSessionActivationListener接口
实现了这两个接口的类,是不需要在web.xml中进行配置的
二、HttpSessionBindingListener监听器
1、监听Java类在HttpSession中的绑定和解除绑定的状态的监听器
valueBound(HttpSessionBindingEvent event)
valueUnbound(HttpSessionBindingEvent event)
2、测试代码
三、HttpSessionActivationListener监听器
1、监听HttpSession中Java类的钝化和活化的监听器
sessionDidActivate(HttpSessionEvent se)
sessionWillPassivate(HttpSessionEvent se)
2、测试代码
3、配置完成Session的序列化和反序列化
Context标签可以配置在:
Tomcat/conf/context.xml:所有Tomcat下虚拟主机和虚拟目录下的工程都会序列化Session
Tomcat/conf/Catalina/localhost/context.xml:只有localhost虚拟主机下的所有项目会序列化Session
工程/META-INF/context.xml:只有当前工程才会序列化Session