监听器设计模式总结
监听器设计模式,是观察者设计模式的一种实现,它并不是23种设计模式之一。
观察者设计模式
从现实角度来说,我们每一个人都是一个观察者,同时也是一个被观察者。作为被观察
者,我们会发出一些信息,观察者在接收到这些信息后,会做出相应的反映;而作为观察者, .
我们是可以被“被观察者”所发出的信息影响的。一个被观察者,可能存在多个观察者。也
就是说,一个被观察者所发出的信息,可能会影响到多个观察者。
观察者设计模式,定义了一种一对多的关联关系。一个对象A与多个对象B、C、D之
间建立“被观察与观察关系”。当对象A的状态发生改变时,通知所有观察者对象B、C、D。
当观察者对象B、C、D在接收到A的通知后,根据自身实际情况,做出相应改变。
当然,观察者与被观察者指的都是具有某一 类功能的对象,所以这里的观察者与被观察
者都是指的接口,而真正的观察者对象与被观察者对象,是指实现了这些接口的类的对象。
而我们所说的监听器实际对应的就是观察者,而被监听对象,则是指被观察者。
当被监听对象的状态发生改变时也需要通知监听器,监听器在收到通知后会做出相应改变。
与观察者设计模式不同的是,被监听对象的状态改变,被定义为一个对象,称为事件;
被监听对象有了个新的名子,称为事件源,对监听器的通知,称为触发监听器。其实质与观
察者设计模式是相同的。
Servlet规范中的监听器
Servlet规范中已经定义好了八个监听器接口,它们要监听的对象分别是request. session、
servletContext对象,触发监听器的事件是这三个对象的创建与销毁,它们的域属性空间中
属性的添加、删除、修改,及session的钝化与活化操作。
注意 在JavaWeb项目中使用监听器,需要在web.xml文件中对监听器进行注册
-
ServletRequestListener
该监听器用于完成对Request对象的创建及销毁的监听,即当Request对象被创建或被
销毁时,会触发该监听器中相应方法的执行。
Request对象创建和销毁
当客户端浏览器将请求(字符序列)发送到服务器后,服务器会根据 HTTP 请求协议的
格式对请求进行解析。同时,服务器会创建 HttpServletRequest 的实现类 RequestFacade 的对
象,即请求对象。然后再调用相应的 set 方法,将解析出的数据封装到请求对象中。此时
HttpServletRequest 实例就创建并初始化完毕了。也就是说,请求对象是由服务器创建。
当服务器向客户端发送响应结束后,HttpServletRequest 实例对象被服务器销毁 -
ServletRequestAttributeListener
该监听器用于完成对request域属性空间中属性的添加、修改、删除操作的监听。
销毁时,会触发该监听器中相应方法的执行。 -
HttpSessionListener
该监听器用于完成对Session对象的创建及销毁的监听。
Session对象的创建及销毁public HttpSession getSession(boolean create)
该方法用于创建 Session。若参数 create 为 true,则表示若当前没有 Session,则新建一
个 Session,若当前存在 Session 则使用当前的 Session。若参数 create 为 false 表示若当前没
有 Session,则直接返回 null。
在 web.xml 中可以通过标签设置 Session 的超时时间,单位为分钟。默
认 Session 的超时时间为 30 分钟。需要再次强调的是,这个时间并不是从 Session 被创建开
始计时的生命周期时长,而是从最后一次被访问开始计时,在指定的时长内一直未被访问的
时长。若未到超时时限,也可通过HttpSession 中的方法Invalide(),提前使得Session失效。.public void invalidate()
-
HttpSessionAttributeListener
该监听器用于完成对session域属性空间中属性的添加、修改、删除操作的监听。
项目:直接在sessionListener项目.上修改 -
ServletContextListener
该监听器用于完成对ServletContext 对象的创建及销毁的监听。
ServletContext 对象的创建及销毁
由于ServletContext在一 个应用中只有一个,且是在服务器启动时创建。另外,ServletConetxt 的
生命周期与整个应用的相同,所以当项目重新部署,或Tomcat正常关闭( 通过stop service
关闭,不能是terminate关闭)时,可以销毁ServletContext。 -
ServletContextAttribute Listener
注意在.jsp文件中application是Context -
HttpSessionBindingListener
该监听器用于监听指定类型对象与Session 的绑定与解绑,即该类型对象被放入到
Session域中,或从Session 域中删除该类型对象,均会引发该监听器中相应方法的执行。
它与HttpSessionAttributelistener 的不同之处是,该监听器监听的是指定类型的对象在
Session域中的操作,而HttpSessionAttributeListener监听的是Session 域属性空间的变化,无
论是什么类型的对象。.
另外,需要强调两点:
*该监听器是由实体类实现
*该监听器无需在web.xml中注册 -
HttpSessionActivationListener
该监听器用于监听在Session中存放的指定类型对象的钝化与活化。
钝化是指将内存中的数据写入到硬盘中(序列化),而活化是指将硬盘中的数据恢复到内存(反序列化。
当用户正在访问的应用或该应用所在的服务器由于种种原因被停掉,然后在短时间内又重启,此时用户在访问时Session
中的数据是不能丢掉的,在应用关闭之前,需要将数据写入到硬盘,.
在重启后应可以立即重新恢复Session中的数据。这就称为Session的钝化与活化。
那么Session中的哪些数据能够钝化呢?只有存放在JVM堆内存中的实现了 Serializable
类的对象能够被钝化。也就是说,对于字符串常量、基本数据类型常量等存放在JVM方法
区中常量池中的常量,是无法被钝化的。
对于监听Session中对象数据的钝化与活化,需要注意以下几点:
*实体类除了要实现HttpSessionActivationListener接口外,还需要实现Serializable接口。
*钝化指的是Session中对象数据的钝化,并非是Session的钝化。所以Session中有几个
*可以钝化的对象,就会发生几次钝化。
*HttpSessionActivationListener监听器是不需要在web .xml中注册的。总结自动力节点监听器专题课
本文介绍了监听器设计模式,它是观察者模式的一种实现。在Java Web中,Servlet规范定义了八个监听器接口,用于监听request、session和servletContext对象的生命周期及属性变化。监听器的使用需要在web.xml中注册,例如ServletRequestListener监听request对象的创建和销毁,HttpSessionListener关注session的创建和销毁,以及ServletContextListener关注应用上下文的创建和销毁。

2257

被折叠的 条评论
为什么被折叠?



