大家好,欢迎来到IT知识分享网。
一、监听器的概述
在java中我们讨论方法,在javascript中我们讨论事件,今天我们在serlvet技术中讨论一下监听器listener。我们知道javaee技术规范的核心是servlet,而linstener技术就是servlet技术的组成部分。
“监听器”这个词意在“监听”,监听某种事物的变化。要想实现这种效果,就需要在目标事物上安装监听器,当事物的某种变化发生时,监听器就开始工作。就好比家里用的空气净化器一旦监测到周围的空气质量属于严重污染,就会开启最强的那一档来净化空气。因此就可以想象,“监听器”这种技术应该包含事件源、事件本身、响应行为这三部分。
二、监听器的执行原理
“监听器”应该包含以下三个部分:
1)事件源
所谓的事件源指的是被监听的事件的源头,即被监听的对象。
2)事件本身
所谓事件本身指的是被监听对象的哪个事件将会使监听器工作,即监听的具体事件。
3)响应行为
所谓响应行为,指的是当监听的事件发生时,监听器内设置的响应行为就会被执行。这就是监听器的组成部分,这些组成部分也能很好的描述监听器是具体怎么工作的。举个例子,比如我们在家门口安装了一个报警器,当在晚上十一点后有人经过时就会报警,那么监听的事件源就是家的门口,事件本身就是当有人经过时,响应行为就是报警。
三、JavaEE规范中的监听器
在Listener技术中,监听器一共分为两类:
1)针对于Sevlet中的三大域对象
2)针对于自定义的java对象
1.针对于Sevlet中的三大域对象的监听器
对于针对于Servlet中的三大域对象的监听器,可以从两个维度来细分,共有六个。
第一个维度:监听域对象的创建和销毁
第二个维度:监听域对象中属性的变化
上述的两个维度,每个维度都对应着一个监听器,也就是说每个域对象都能配上相应的两个维度的监听器,因此三个域对象共有六个监听器,这六个监听器如下图所示。
拿其中的一个监听器ServletRequestListener来说,如果在项目中使用了这个监听器,那么这个监听器的事件源就是ServletRequest实现类的对象,事件本身即对象的创建或销毁,响应行为即监听器中重写的相应的方法。从该接口提供的两个抽象方法可以看出,ServletRequest监听器监听了两个事件,分别指向了request对象的创建和销毁。同样的,ServletContextListener和HttpSessionListener也分别是监听ServletContext对象和HttpSession对象的创建和销毁。
对于监听域对象中属性变化的监听器来说,监听的事件分别是域对象中存入了值,更新了值和移除了值。以HttpSessionAttributeListener为例,当调用session的setAttribute方法存入或是更新域对象中的键值对,当调用session的removeAttribute方法移除键值对时,都会调用监听器中相应的响应行文。
2.针对于自定义java对象的监听器
除了刚才介绍的六大监听器外,Listener技术中还有两大监听器用于监听自定义的java对象。而这两监听器的监听的事件却只于HttpSession对象有关。这两监听器分别是HttpSessionBindingListener和HttpSessionActivationListener。
1)HttpSessionBindingListener
从名字上就可以看出,该监听器监听的事件与“绑定”有关。而该监听器又是作用在自定义java对象上的,也就是说该监听器的事件源是自定义java对象,事件本身是对象被session绑定和对象被session解绑。即当把一个对象存入到session域中时,相当于是该对象被session绑定,也就会触发对象被session绑定的事件,执行相应的相应行为,同理将对象从session中移除时也就触发了对象从session中解绑的事件。
2)HttpSessionActivationListener
该监听器也是作用在对象上,但该监听器监听的事件是对象的钝化和活化。为什么该监听器也与HttpSession有关呢?因为在HttpSession对象的技术点中,有关于HttpSession对象的钝化和活化技术。所谓的HttpSession对象的钝化和活化当服务器上的钝化和活化,指的是当用户在一段时间内未发生与服务器的交互,那么为了使服务器的性能得到优化,于是对服务器为该用户开辟的Session空间实施钝化,即将服务器上属于该用户的Session空间内的内容保存在服务器的磁盘文件中,待用户再次与服务器产生交互时,被钝化后的session空间中的内容将会从磁盘文件中活化,还原回服务器的内存中。
那么,既然HttpSession对象将会存在钝化和活化的时机,因此,存在于HttpSession域对象中的对象,如果绑定了HttpSessionActivationListener监听器,那么在HttpSession被钝化和活化时,也就意味着该对象也被钝化和活化,于是相应的响应行为就会被执行。
还要注意一点,对象的钝化和活化涉及对象的序列化,因此该对象也必须实现Serializable接口。
四、JavaEE中监听器的创建和部署
关于监听器的创建和部署的步骤并不复杂。
1.首先创建实现了具体某个监听器的接口的类
2.实现相应的抽象方法(即响应行为)
3.在web.xml中配置给监听器
值得注意的是,针对于自定义java对象的监听器不需要在web.xml中配置,也就是说八个监听器中,事件源是域对象的六个监听器都需要在web.xml中进行注册。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/83668.html