监听器Listener

Posted 康星悦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了监听器Listener相关的知识,希望对你有一定的参考价值。

[1]监听器简介

> Listener是JavaWeb中三大组件之一。Servlet、Filter、Listener(均由服务器管理)
> 三大组件都有的共同特点,都需要实现一个接口,并在web.xml文件配置。
监听器:朝阳群众
监听对象:明星
监听的事件:干坏事
调用方法:报警

> JavaWeb中的监听器的监听对象是谁?(3个域对象)
  ServletContext
  HttpSession
  ServletRequest

[2]监听器分类(监听的内容)
  > JavaWeb中的监听器共有三种,共8个监听器
  - 生命周期监听器,监听三个对象的创建和销毁的事件。(3个)

  - 属性监听器,监听三个对象中属性的变化。(3个)

  - session对象监听器,监听它session中的属性,以及session的活化和钝化。(2个)

[3]生命周期监听器

ServletContextListener(监听整个项目)
  - ServletContext生命周期监听器
  - void contextDestroyed(ServletContextEvent sce)
  - 该方法在ServletContext对象销毁前调用(监听项目即将卸载(服务器关闭))

  - void contextInitialized(ServletContextEvent sce)
  - 该方法在ServletContext对象创建之后调用。(监听项目开始启动(服务器启动))

  - ServletContextEvent 对象可以获取到ServletContext对象
  ServletContextEvent.getServletContext();

  HttpSessionListener(监听调用getSession()方法)
  - HttpSession生命周期监听器
  - void sessionCreated(HttpSessionEvent se)
  - 该方法在Session创建时调用

  - void sessionDestroyed(HttpSessionEvent se)
  - 在session销毁时调用

  - HttpSessionEvent
  - 可以获取HttpSession对象

ServletRequestListener(监听一次请求)
(ServletRequestListener监听到一个请求(一次服务器与浏览器通信):
访问jsp\servlet均算一个请求(从浏览器发送请求,服务器响应请求,整个过程算一个监听请求))

    - void requestDestroyed(ServletRequestEvent sre)
    - 在request对象销毁时调用(服务器刚启动,浏览器显示)

    - void requestInitialized(ServletRequestEvent sre)
    - 在request对象创建时调用(服务器刚启动)

    - ServletRequestEvent
    可以获取ServletContext对象和ServletRequest

编写一个监听器的步骤:
  1.创建一个类并实现一个接口。
  2.在web.xml文件中注册监听器。

[4]属性监听器
  > 属性监听器,监听三个域中的属性的变化:添加一个属性,替换一个属性,移除一个属性
  > ServletContextAttributeListener
  - 监听ServletContext中的属性的变化

  void attributeAdded(ServletContextAttributeEvent scab)
  - 当向ServletContext中添加属性时调用

  attributeRemoved(ServletContextAttributeEvent scab)
  - 移除属性时调用

  attributeReplaced(ServletContextAttributeEvent scab)
  - 替换一个属性时调用

  > HttpSessionAttributeListener
    void attributeAdded(HttpSessionBindingEvent se)
    void attributeRemoved(HttpSessionBindingEvent se)
    void attributeReplaced(HttpSessionBindingEvent se)

  - HttpSessionBindingEvent
    1.可以获取到属性名 getName()
    2.可以获取属性的旧值 getValue()
    3.可以获取到HttpSession对象 getSession();

  > ServletRequestAttributeListener
    void attributeAdded(ServletRequestAttributeEvent srae)
    void attributeRemoved(ServletRequestAttributeEvent srae)
    void attributeReplaced(ServletRequestAttributeEvent srae)

> 以下两个监听器监听session域中的属性的。
[5]HttpSessionBindingListener
  > 监听session域中某一个类的实例的添加和移除。
  > 该接口由JavaBean来实现,不需要再web.xml文件配置
    valueBound(HttpSessionBindingEvent event)
      - 当该类的实例,作为属性设置进session域中时调用
    valueUnbound(HttpSessionBindingEvent event)
      - 当该类的实例,从session域中被移除时调用

[6]HttpSessionActivationListener
  > 监听session域中的某类属性,和session一起活化和钝化的事件。
  > 该接口由JavaBean来实现,同样不需要再web.xml中配置,但是该JavaBean需要实现Serializable接口!
    void sessionDidActivate(HttpSessionEvent se)
      - 当前对象和session一起被活化到内存时调用

    void sessionWillPassivate(HttpSessionEvent se)
      - 当前对象和session一起钝化到硬盘时调用

以上是关于监听器Listener的主要内容,如果未能解决你的问题,请参考以下文章

web.xml监听器 - listener

第7章 监听器Listener

Listener 监听器

监听器Listener

Java中的Listener 监听器

Servlet——Listener监听器