Servlet事件监听器

概述


在程序开发中,经常需要对某些事件进行监听,如监听鼠标点击事件、监听键盘按下事件等,此时就需要使用事件监听器。

事件监听器用于对程序中发生的事件进行监听,在监听的过程中会涉及几个重要组成部分:





事件(Event)

用户的一个操作,如点击一个按钮、调用一个方法、创建一个对象等。

事件源

产生事件的对象。





事件监听器(Listener)

负责监听发生在事件源上的事件。





事件处理器

监听器的成员方法,当事件发生的时候会触发对应的处理器(成员方法)。

Servlet事件监听器是一个实现特定接口的Java程序,专门用于监听Web应用程序,根据监听事件的不同可将这些接口分为三类





用于监听域对象创建和销毁的事件监听器

ServletContextListener接口

HttpSessionListener接口

ServletRequestListener接口





用于监听域对象属性增加和删除的事件监听器

ServletContextAttributeListener接口HttpSessionAttributeListener接口ServletRequestAttributeListener接口





用于监听绑定到HttpSession域中某个对象状态的事件监听器

HttpSessionBindingListener接口、HttpSessionActivationListener接口

事件监听器工作步骤


(1)注册监听器

将监听器绑定到事件源,也就是注册监听器。

(2)传递事件对象

事件发生时会触发监听器的成员方法,即事件处理器,传递事件对象。

(3)处理时间源

事件处理器通过事件对象获得事件源,并对事件源进行处理。

监听域对象的生命周期

在Web应用程序的运行期间,Web容器会创建和销毁三个比较重要的对象ServletContext、HttpSession和ServletRequest,这些对象被称为域对象。

为了监听这些域对象的的生命周期,Servlet API中专门提供三个接口ServletContextListener、HttpSessionListener、ServletRequestListener,它们分别用于监听ServletContext对象的生命周期、监听HttpSession对象的生命周期、监听ServletRequest对象的生命周期。





ServletContextListener接口

该接口中共定义了两个事件处理方法

contextInitialized()方法

public void contextInitialized(servletContextEvent sce)

contextDestroyed()方法

public void contextDestroyed(servletContextEvent sce)





HttpSessionListener接口

该接口中共定义了两个事件处理方法

sessionCreated()方法

public void sessionCreated(HttpSessionEvent se)

sessionDestroyed()方法

public void sessionDestroyed(HttpSessionEvent se)





ServletRequestListener接口

该接口中定义了两个事件处理方法

requestInitialized()方法

public void requestInitialized(ServletRequestEvent sre)

requestDestroyed()方法

public void requestDestroyed(ServletRequestEvent sre)

监听域对象中的属性变更


监听域对象中的属性变更


提供的接口ServletContextAttributeListener、HttpSessionAttributeListener和ServletRequestAttributeListener接口。

监听域对象属性变更的接口


在程序开发中,不仅需要对域对象进行监听,有时还需要对某个域对象属性的变更进行监听,监听域对象属性变更的三个接口都定义了相同名称的方法,分别用于处理被监听对象属性的增加、删除和替换。



attributeAdded()方法

当向被监听的域对象中增加一个属性时,Web容器就调用事件监听器的attributeAdded()方法进行响应,该方法接收一个事件类型的参数。

public void attributeAdded(ServletContextAttributeEvent scab)

    上述是ServletContextAttributeListener接口中定义的方法,当向ServletContext对象中增加一个属性时,Web容器就调用这个方法并传递一个ServletContextEvent类型的参数



public void attributeAdded(HttpSessionBindindEvent se)

  上述是HttpSessionAttributeListener接口中定义的方法,当向HttpSession对象中增加一个属性时,Web容器就调用这个方法并传递一个HttpSessionBindindEvent类型的参数。



public void attributeAdded(ServletRequestAttributeEvent srae)

  上述是ServletRequestAttributeListener接口中定义的方法,当向ServletRequest对象中增加一个属性时,Web容器就调用这个方法并传递一个ServletRequestAttributeEvent类型的参数。



attributeRemoved()方法

当删除被监听对象中的一个属性时,Web容器调用事件监听器的attributeRemoved()方法进行响应。

public void attributeRemoved(ServletContextAttributeEvent scab)

public void attributeRemoved(HttpSessionBindindEvent se)

public void attributeRemoved(ServletRequestAttributeEvent srae)

这些方法接收的参数类型与上面讲解的attributeAdded()方法一样,监听器可以通过这个参数来获取正在删除属性的域对象。



attributeReplaced()方法

当被监听器的域对象中的某个属性被替换时,Web容器会调用事件监听器的attributeReplaced ()方法进行响应。

public void attributeReplaced(ServletContextAttributeEvent scab)

public void attributeReplaced(HttpSessionBindindEvent se)

public void attributeReplaced(ServletRequestAttributeEvent srae)

这些方法接收的参数类型与上面讲解的attributeAdded()方法一样,监听器可以通过这个参数来获取正在替换属性的域对象。

感知被HttpSession绑定的事件监听器


程序开发中经常使用Session域来存储对象,每个对象在该域中都有多种状态,如绑定(保存)到Session域中,从Session域中解除绑定、随Session对象持久化到一个存储设备中(钝化),随Session对象从一个存储设备中恢复(活化)。

为了观察Session域中对象的状态,Servlet API还提供了两个特殊的监听器接口 HttpSessionBindingListener和HttpSessionActivationListener,这两个接口专门用于监听JavaBean对象在Session域中的状态。 





HttpSessionBindingListener接口

在使用JavaBean对象时经常会判断该对象是否绑定到Session域中,该接口用于监听JavaBean对象绑定到HttpSession对象和从HttpSession对象解绑的事件。

接口中共定义了两个事件处理方法

valueBound()方法

public void valueBound(HttpSessionBindingEvent event) 

valueUnbound()方法

public void valueUnbound(HttpSessionBindingEvent event) 





HttpSessionActivationListener接口

为了监听HttpSession中对象活化和钝化的过程,Servlet API专门提供了HttpSessionActivationListener接口

该接口定义了两个事件处理方法

sessionWillPassivate()方法

public void sessionWillPassivate(HttpSessionEvent se) 

sessionDidActivate()方法

public void sessionDidActivate(HttpSessionEvent se)

分类

上下文监听器

    ServletContextListener

        contextInitialized(ServletContextEvent)

        contextDestroyed(ServletContextEvent)

    ServletContextAttributeListener

        attributeAdded(ServletContextAttributeEvent)

        attributeRemoved(ServletContextAttributeEvent)

        attributeReplaced(ServletContextAttributeEvent)

会话监听器

    HttpSessionListener

        sessionCreated(HttpSessionEvent)

        sessionDestroyed(HttpSessionEvent)

    HttpSessionAttributeListener

        attributeAdded(HttpSessionBindingEvent)

        attributeRemoved(HttpSessionBindingEvent)

        attributeReplaced(HttpSessionBindingEvent)

    HttpSessionActivationListener

        sessionWillPassivate(HttpSessionEvent)

        sessionDidActivate(HttpSessionEvent)

    HttpSessionBindingListener

        valueBound(HttpSessionBindingEvent)

        valueUnbound(HttpSessionBindingEvent)

请求监听器

    ServletRequestListener

        requestDestroyed(ServletRequestEvent)

        requestInitialized(ServletRequestEvent)

    ServletRequestAttributeListener

        attributeAdded(ServletRequestAttributeEvent)

        attributeRemoved(ServletRequestAttributeEvent)

        attributeReplaced(ServletRequestAttributeEvent)

配置

注解

@WebListener

web.xml

<listener> -> <listener-class>

Java精选笔记_Servlet事件监听器的更多相关文章

  1. Java精选笔记_Servlet技术

    Servlet技术 Servlet开发入门 Servlet接口 针对Servlet技术的开发,SUN公司提供了一系列接口和类,其中最重要的是javax.servlet.Servlet接口. Servl ...

  2. java设计模式--观察者模式和事件监听器模式

    观察者模式 观察者模式又称为订阅—发布模式,在此模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提供的方法来实现.此种模式通常被用来事件 ...

  3. java学习笔记 (5) —— Struts2 监听器配置

    1.创建MyListener.java 实现 PreResultLisener 接口 import com.opensymphony.xwork2.ActionInvocation; import c ...

  4. Java精选笔记_自定义标签

    自定义标签 自定义标签入门 什么是自定义标签 自定义标签可以有效地将HTML代码与Java代码分离,从而使不懂Java编程的HTML设计人员也可以编写出功能强大的JSP页面 JSP规范中定义了多个用于 ...

  5. Java精选笔记_XML基础

    XML基础 XML概述 W3C组织简介 W3C是World Wide Web Consortium(万维网联盟)的缩写,它是对网络标准定制的一个非赢利组织,如HTML.XHTML.CSS.XML的标准 ...

  6. Java精选笔记_JavaBean

    JavaBean组件 初始JavaBean JavaBean是Java开发语言中一个可以重复使用的软件组件,它本质上就是一个Java类. 一个标准的JavaBean组件需要遵循一定的编码规范,具体如下 ...

  7. Java精选笔记_面向对象(多态、异常)

    多态 概述 可以理解为事物存在的多种体现形态.同样的引用调用同样的方法却做了不同的事情 多态的本质是:一个程序中同名的不同方法. 多态的体现 父类的引用指向子类的对象,父类的引用接收子类的对象. 多态 ...

  8. Java精选笔记_国际化

    国际化 什么是国际化 指软件在开发时就应该具备支持多种语言和地区的功能,当应对不同国家和地区的用户访问,针对不同国家和地区的用户,提供相应的.符合来访者阅读习惯的页面和数据. 由于国际化interna ...

  9. Java精选笔记_JSTL(JSP标准标签库)

    JSTL(JSP标准标签库) JSTL入门 JavaServer Pages Standard Tag Library:JSP标准标签库 在JSP中可以通过Java代码来获取信息,但是过多的Java代 ...

随机推荐

  1. c++11特性与cocos2d-x 3.0之std::bind与std::function

    昨天同事让帮忙写一小功能,才发现cocos2d-x 3.0 和 cocos2d-x 3.0rc0 差别还是相当大的. 发现Label这一个控件,3.0就比rc0版本多了一个创建函数,更为关键的是3.0 ...

  2. Python import random报错处理办法

    [转自]http://blog.chinaunix.net/uid-26000296-id-4356738.html python安装失败:make的时候报错: /usr/include/tkDecl ...

  3. js实现类似新闻条目人物简介不间断的滚动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. eclipse偶尔会反映迟钝,直接无视其报错

    比如,你在web.xml中配置了什么东西,在有的时候不一定就会立即被eclipse察觉到,即便你的配置正确了,甚至重启了几次服务器,它仍然给你报错 比如说,刚才我在web.xml中配置了一个tagli ...

  5. eclipse 安装插件的几种方式

        eclipse 安装插件的几种方式   1.使用url在线安装 ,最方便最快捷   help - install new software       接下来就是同意协议之类的,next ne ...

  6. tmpx75 I2C 温度传感器驱动程序添加

    在kernel 内 make menuconfig 加入相关选项 Device Drivers ---> <*> Hardware Monitoring support ---> ...

  7. 制作Windows Server 2008安装启动U盘

    昨天刚下了Windows server 2008因为没有刻录机,所以我就用2G U盘把Windows server 2008光盘镜像做成U盘安装效果和光盘安装一样. 下面就是制作方法: UltraIS ...

  8. Java命令学习系列(三)——Jmap

    Java命令学习系列(三)——Jmap 2015-05-16 分类:Java 阅读(479) 评论(0) Jmap jmap是JDK自带的工具软件,主要用于打印指定Java进程(或核心文件.远程调试服 ...

  9. 单片机小白学步系列(二十) IO口原理

    IO口操作是单片机实践中最基本最重要的一个知识,本篇花了比較长的篇幅介绍IO口的原理. 也是查阅了不少资料,确保内容正确无误,花了非常长时间写的. IO口原理原本须要涉及非常多深入的知识,而这里尽最大 ...

  10. C++ Primer学习笔记(一)

    始终对C++念念不忘,看过 一个32岁入门的70后程序员给我的启示  之后,心情激荡,更是一发不可收拾. 认真地说,我不是一个执着的人,见异思迁,好读书而不求甚解,兼之情绪化(~~ 某些方面),于是怒 ...