监听器
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ServletRequestAttributeEvent:该类表示请求属性事件,当请求中的属性 改变,如增加、删除、覆盖请求中的属性时,触发请求属性事件。
HttpSessionEvent:该类表示会话事件,当会话对象发生改变,如创建或销 毁会话对象,活化或钝化会话对象时,将触发会话事件。 HttpSessionBindingEvent :该类表示会话绑定事件,当会话中的属性发生 变化时,如增加、删除、覆盖会话中的属性时,将触发会话绑定事件。
实现思路:
容器何时启动或关闭是不确定的,但是只要容器关闭或启动,都会自动触发 ServletContextEvent事件,只要能处理这个事件即可。
处理该事件的接口已经定义,是ServletContextListener 因此只要编写上下文监听器,就可以实现。
实现步骤1:创建监听器类
创建监听器类 VisitCountsListener ,在该类的包目录下, 创建文本文件visitcounts.txt,用来保存登录次数 注 意 : 文 本 文 件 存 在 src 目 录 下 , 运 行 时 存 在 于 WEBINF/classes目录下。 VisitCountsListener 类 实 现 接 口 ServletContextListener , 其中有两个方法, contextInitialized 方法在上下文初始 化时自动调用, contextDestroyed 方法在上下文被销毁时 自动调用。 contextInitialized 方法:读 visitcounts.txt 文件,把其 中内容存储在上下文属性中。 contextDestroyed 方法:读取上下文中的 count 属性,保存 到visitcounts.txt文件中
事件与监听器的关系
事件对象是容器创建的,触发的条件也已经定义好。例如, 只要容器关闭,启动,就会触发ServletContextEvent , 容器会创建该类型对象。
当事件发生后,容器会寻找监听器来处理该事件。监听器 需要程序员自定义并配置,然而监听器的类型已经定义好。 例 如 , 当 发 生 了 ServletContextEvent 事 件 后 , 来自百度文库 能 用 ServletContextListener监听器监听。
1.编写实现监听器的类,对事件进行相应处理
2.web.xml 配置监听
监听器应用
记录在线用户列表
实现步骤2:配置监听器
监听器创建后,必须配置方能生效。 <listener> <listener-class> com.chinasofti.listener.VisitCountsListener /listener-class> </listener>
运行效果
登录多次,显示计数器为5。
关闭Tomcat,重新启动,可以见到计数从6开始,不再从1开始。
<listener> com.chinasofti.demo.RequestDemo
</listener-class>
</listener>
实现计数器
计数器直接存储在上下文对象中,所以容器重启,或应用 重新部署后,上下文对象将重新创建,所以计数从 1开始。
修改目标:使用文本文件存储计数器的数值,当容器关闭 时,把当前的数值保存到文本文件中;当容器启动时,从 文本文件中读取数值。
public void contextInitialized(ServletContextEvent sce) {
System.out.println("contextInitialized"); ServletContext context = sce.getServletContext(); String path = context.getRealPath("/WEB-INF/classes"); File file = File(path+"/com/chinasofti/listener/visitcounts.txt"); int count=0; BufferedReader br = null; br = new BufferedReader(new FileReader(file)); String str=br.readLine(); count=Integer.parseInt(str); context.setAttribute("count", count); } new
监听器
事件概念
监听器是为了监听事件并处理的,所以要理解监听器的概念, 首先要理解事件的概念。
事件 就是一个事情
事件源
监听器
产生这个事情的源头
用于监听指定的事件的对象
注册监听 要想让监听器可以监听到事件产生,必须对其进行注册。
某些操作总会触发一种事件发生,如启动或关闭容器、创建或 销毁会话等。当发生了某种事件,容器将创建对应的事件类对 象。也就是说,API中已经定义好了事件的类型,容器进行了实 现,当某些特定操作发生时,会自动触发相应的事件。
BufferedWriter bw = null;
bw = new BufferedWriter(new FileWriter(file)); bw.write(count.toString()); System.out.println(count.toString()); bw.close(); }
public class VisitCountListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent sce) { ServletContext context = sce.getServletContext(); Integer count = (Integer) context.getAttribute("count"); String path = context.getRealPath("/WEB-INF/classes"); F i l e f i l e File(path+"/com/chinasofti/listener/visitcounts.txt"); = n e w
创建一个监听器的步骤
1.创建一个类,实现指定的监听器接口
2.重写接口中的方法 在web.xml文件中对监听器进行注册。
实现步骤
1.自定义监听器类实现监听接口
implements
public class RequestDemo ServletRequestListener{} 2.web.xml配置监听器 <listener-class>
6种事件类型
Servlet API中定义了6种事件类型 ServletContextEvent :该类表示上下文事件,当应用上下文对象发生改变, 如创建或销毁上下文对象时,将触发上下文事件。 ServletContextAttributeEvent:该类表示上下文属性事件,当应用上下文 的属性改变,如增加、删除、覆盖上下文中的属性时,将触发上下文属性事 件。 ServletRequestEvent :该类表示请求事件,当请求对象发生改变,如创建 或销毁请求对象时,触发请求事件。
8种监听器接口
Servlet API中定义了8种监听器接口,用来监听不同的事件类型 ServletContextListener:上下文监听器,监听ServletContextEvent事件。 ServletContextAttributeListener : 上 下 文 属 性 监 听 器 , 用 来 监 听 ServletContextAttribute事件。 ServletRequestListener:请求监听器,监听ServletRequestEvent事件。 ServletRequestAttributeListener : 请 求 属 性 监 听 器 , 用 来 监 听 ServletRequestAttributeEvent事件。 HttpSessionListener:会话监听器,监听HttpSessionEvent。 HttpSessionActivationListener :会话活化监听器,监听 HttpSessionEvent 事 件。 HttpSessionAttributeListener : 会 话 属 性 监 听 器 , 监 听 HttpSessionAttributeEvent事件。 HttpSessionBindingListener : 会 HttpSessionAttributeEvent事件。 话 绑 定 监 听 器 , 监 听