一、监听器概述
监听你的web应用,监听许多信息的初始化,销毁,增加,修改,删除值等
Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以做一些必要的处理。
1.Listener是Servlet的监听器
2.可以监听客户端的请求、服务端的操作等。
3.通过监听器,可以自动激发一些操作,如监听在线用户数量,当增加一个HttpSession时,给在线人数加1。
4.编写监听器需要实现相应的接口
5.编写完成后在web.xml文件中配置一下,就可以起作用了
6.可以在不修改现有系统基础上,增加web应用程序生命周期事件的跟踪
servlet规范中为每种事件监听器都定义了相应的接口,在编写事件监听器程序时只需实现这些接口就可以了。一些Servlet事件监听器需要在web应用程序的部署文件描述符文件(web.xml)中进行注册(注册之后才能发布),一个web.xml可以注册多个servlet事件监听器。web服务器按照它们在web.xml中注册顺序来加载和注册这些servlet事件监听器。servlet事件监听器的注册和调用过程都是由web容器自动完成的,当发生被监听对象被创建,修改,销毁等事件时,web容器将调用与之相关的servlet事件监听器对象的相应方法(所监听到的对象如果在创建、修改、销毁事件触发的时候就会调用这些监听器这就相当于面向事件编程的概念),用户在这些方法中编写的事件处理代码(相当于JS中的事件响应)即被执行。由于在一个web应用程序中只会为每个事件监听器类创建一个实例对象,有可能出现多个线程同时调用一个事件监听对象的情况,所以要注意多线程安全问题。
二、监听器类型
按监听的对象划分:servlet2.4规范定义的事件有三种:
1.用于监听应用程序环境对象(ServletContext)的事件监听器
2.用于监听用户会话对象(HttpSession)的事件监听器
3.用于监听请求消息对象(ServletRequest)的事件监听器
按监听的事件类项划分
1.用于监听域对象自身的创建和销毁的事件监听器
2.用于监听域对象中的属性的增加和删除的事件监听器
3.用于监听绑定到HttpSession域中的某个对象的状态的事件监听器
在一个web应用程序的整个运行周期内,web容器会创建和销毁三个重要的对象,ServletContext,HttpSession,ServletRequest。
PS:其中Context为JSP页面包装页面的上下文.由容器创建和初始化,管理对属于JSP中特殊可见部分中已命名对象的访问.该接口用来定义了一个Servlet的环境对象。也可认为这是多个客户端共享的信息,它与session的区别在于应用范围的不同,session只对应于一个用户。
servlet2.4中定义了三个接口:
ServletContextListener,HttpSessionListener,ServletRequestListener。分别实现对应的接口就可以实现对应的监听处理
在ServletContextListener接口中定义了两个事件处理方法,分别是
contextInitialized()和contextDestroyed()
publicvoidcontextInitialized(ServletcontextEventsce)
这个方法接受一个ServletContextEvent类型参数,在contextInitialized可以通过这个参数获得当前被创建的ServletContext对象。
publicvoidcontextDestroyed(ServletContextEventsce)
2.在HttpSessionListneter接口中共定义了两个事件处理方法,分别是sessionCreated()和sessionDestroyed()
publicvoidsessionCreated(HttpSessionEventse)
这个方法接受一个(HttpSessionEvent类型参数,在sessionCreated可以通过这个参数获得当前被创建的HttpSession对象。
publicvoidsessionDestroyed(HttpSessionEventse)
3.在ServletRequestListener接口中定义了两个事件处理方法,分别是requestInitialized()和requestDestroyed()
publicvoidrequestInitialized(ServletRequestEventsre)
这个方法接受一个(ServletRequestEvent类型参数,在requestInitialized可以通过这个参数获得当前被创建的ServletRequest对象。
publicvoidrequestDestroyed(ServletRequestEventsre)
可以看出三个监听器接口中定义的方法非常相似,执行原理与应用方式也相似,在web应用程序中可以注册一个或者多个实现了某一接口的事件监听器,web容器在创建或销毁某一对象(如ServletContext,HttpSession)时就会产生相应的事件对象
(如ServletcontextEvent,或者HttpSessionEvent),接着依次调用每个事件监听器中的相应处理方法,并将产生的事件对象传递给这些方法。
三、分类及介绍
1.ServletContextListener:用于监听WEB应用启动和销毁的事件,监听器类需要实现javax.servlet.ServletContextListener接口。
2.ServletContextAttributeListener:用于监听WEB应用属性改变的事件,包括:增加属性、删除属性、修改属性,监听器类需要实现javax.servlet.ServletContextAttributeListener接口。
3.HttpSessionListener:用于监听Session对象的创建和销毁,监听器类需要实现javax.servlet.http.HttpSessionListener接口或者javax.servlet.http.HttpSessionActivationListener接口,或者两个都实现。
4.HttpSessionActivationListener:用于监听Session对象的钝化/活化事件,监听器类需要实现javax.servlet.http.HttpSessionListener接口或者javax.servlet.http.HttpSessionActivationListener接口,或者两个都实现。
5.HttpSessionAttributeListener:用于监听Session对象属性的改变事件,监听器类需要实现javax.servlet.http.HttpSessionAttributeListener接口。
四、部署
监听器的部署在web.xml文件中配置,在配置文件中,它的位置应该在过滤器的后面Servle的前面
五、示例
第一步:编写监听器类
第二步:布置安装
<listener>
<listener-class>cn.listen.MyListener</listener-class>
</listener>
运行服务器会出现
[20:42:38.406]{main}WebApp[http://default]active
init
[20:42:38.437]{main}WebApp[http://default/MyProj]active
监听到了应用启动。
|
相关推荐
JAVA程序员 从笨鸟到菜鸟
java程序员-从笨鸟到菜鸟.pdf
自学道路上的迷惑,所以从2012 年2 月份开始着手《java 程序员从笨鸟 到菜鸟》的编写。真心希望可以帮助刚起步学习java 开发的兄弟姐妹们。 没参与过中大型项目的开发,没有高的学历。所以此人之书只能供参考。
java程序员由菜鸟到笨鸟 作者:曹胜欢
java比较好的一篇文档,作者写的比较细,主要是一些基础概念说的比较细。
资源名称:《Java程序员-从笨鸟到菜鸟》PDF 下载资源目录:作者简介:..........................................................................................................................................
本电子书涵盖了从java基础到javaweb开放框架的大部分内容。在编写的过程中,难免会出现一些错误,希望大家能多多提些意见。
java程序员由菜鸟到笨鸟 一本值得java程序员看的书籍 给大家分享一下 喜欢的评个好评 谢谢
java程序员由菜鸟到笨鸟 作者:曹胜欢
java程序员由菜鸟到笨鸟 作者:曹胜欢
1.背景02. Netty 高性能之道0第 4 章第 4 章Java 数据库和网络Java 数据库和网络00Java 数据库操作0java 程序员从笨鸟到菜鸟之
摘要视图订阅曹胜欢欢迎关注微信账号:java那些事:csh624366188.每天一篇java相关的文章登录 | 注册Java程序员从笨鸟到菜鸟(81)3054