监听器Listener的概念

  监听器的概念很好理解,顾名思义,就是监视目标动作或状态的变化,目标一旦状态发生变化或者有动作,则立马做出反应.

  Servlet中的也有实现监听器的机制,就是Listener,Listener是一个实现特定接口的普通java程序,专门用来监听另一个java对象的方法调用或属性改变,当被监听对象发生变动时,监听器某个方法立即被执行.

监听器Listener的使用场景

  理解了概念,接下来问题就来了,监听器Listener有哪些使用场景呢?

  在使用Spring框架开发javaWeb项目时,我们都会在web.xml中加入一个Listener,叫ContextLoaderListener.

 <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>

  它的作用是,在启动web容器时,自动装配ApplicationContext的配置信息,初始化好Spring的IOC容器,这样就可以在项目启动的时候马上就可以去IOC容器中取到我们需要的对象.

  这个ContextLoaderListener就扮演的是一个监听器的角色,它实现了一个ServletContextListener接口,ServletContextListener中有两个方法:

public interface ServletContextListener extends EventListener {
void contextInitialized(ServletContextEvent var1);
void contextDestroyed(ServletContextEvent var1);
}

  当ServletContext对象创建,即容器启动时,监听器监听到了这一动作,就会调用contextInitialized这个方法,完成ApplicationContext的装配初始化工作.

/**
* Initialize the root web application context.
*/
public void contextInitialized(ServletContextEvent event) {
this.contextLoader = createContextLoader();
if (this.contextLoader == null) {
this.contextLoader = this;
}
this.contextLoader.initWebApplicationContext(event.getServletContext());
}

  initWebApplicationContext就是用来初始化IOC容器的方法.

  大概理通了这个流程,我们来看看更多Listener的使用场景:

  1.在系统启动时加载初始化信息

  2.统计网站的访问量

  3.统计在线人数和在线用户

  4.运用在一些框架(如Spring)中完成特定功能.

使用Listener的步骤

1.新建一个java类实现XXXListener接口,实现代码逻辑

2.在Web.xml注册自己新建的Listener

Listener的启动顺序

  Listener的启动优先级是大于过滤器的,即Listener>Filter>Servlet

  如果有很多Listener类,那么Listener的作用时机是根据你在web.xml中注册的顺序来决定的,即按照从上往下的顺序来加载.

Servlet中常用的Listener接口

1.按照域对象的创建和销毁来分类

public class MyServletContextListener implements ServletContextListener{

//servletContext创建时调动此方法(容器启动)
public void contextInitialized(ServletContextEvent servletContextEvent) {
}
//servletContext销毁时调用此方法(容器关闭)
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}

  相同类型的Listener的还有HttpSessionListener,ServletRequestListener.

2.按照域中属性的增加移除来分类

public class MyApplicationAttributeListener implements ServletContextAttributeListener {
//当Application域中属性增加时调用此方法
public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
}
//当Application域中属性移除的时候调用此方法
public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
}
//当Application域中对象被更新时调用此方法
public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
}
}

  相同类型的Listener还有HttpSessionAttributeListener,ServletRequestAttributeListener

3.监听HttpSession域中某个具体对象状态的Listener

  这种Listener比较特别,以上介绍的几种都需要在web.xml中注册监听器,而这种不需要,为什么呢,看代码比较好理解:

public class User implements HttpSessionBindingListener {
private String username;
private String password;
//当session域中绑定了User对象时调用此方法
@Override
public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
}
//当session域中移除了User对象绑定时调用此方法
@Override
public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
}
}

相同类型的还有还有一种 HttpSessionActivationListener,涉及session域中对象的序列化和反序列化.

Servlet监听器笔记总结的更多相关文章

  1. [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  2. JSP的Servlet监听器

    JSP的Servlet监听器 来源: http://blog.csdn.net/phoenix_17th/article/details/3868670 Servlet 监听器用于监听一些重要事件的发 ...

  3. servlet监听器Listener(理论+例子)

    Listener采用了观察者模式(24种模式之一),Listener是servlet的监听器,他可以监听客户端的请求.服务器端的操作等, 通过监听器,可以自动激发一些操作.比如:监听在线用户数量 当增 ...

  4. Java进阶(十三)servlet监听器

    servlet监听器 Listener是Servlet的监听器,它可以监听客户端的请求.服务端的操作等.通过监听器,可以自动激发一些操作,比如监听在线的用户的数量.当 增加一个HttpSession时 ...

  5. 【Servlet】1、Servlet监听器及相关接口

    Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前.发生后可以做一些必要的处理. 接口: 目前Servlet2.4和JSP2.0总共有8个监听器接口和6个Event类,其中Ht ...

  6. Servlet监听器统计在线人数

    监听器的作用是监听Web容器的有效事件,它由Servlet容器管理,利用Listener接口监听某个执行程序,并根据该程序的需求做出适应的响应. 例1 应用Servlet监听器统计在线人数. (1)创 ...

  7. Servlet监听器的使用

    Servlet监听器的使用 制作人:全心全意 在Servlet技术中已经定义了一些事件,并且可以针对这些事件来编写相关的事件监听器,从而对事件做出相应的处理.例如,想要在Web应用程序启动和关闭时来执 ...

  8. # jsp及servlet学习笔记

    目录 jsp及servlet学习笔记 JSP(Java Server Page Java服务端网页) 指令和动作: servlet(小服务程序) jsp及servlet学习笔记 JSP(Java Se ...

  9. Servlet监听器——实现在线登录人数统计小例子

    一.概念 servlet监听器的主要目的是给web应用增加事件处理机制,以便更好的监视和控制web应用的状态变化,从而在后台调用相应处理程序. 二.监听器的类型 1.根据监听对象的类型和范围,分为3类 ...

随机推荐

  1. NodeJs之pm2

    pm2 pm2是一个进程管理工具,可以用它来管理你的node进程,并查看node进程的状态,当然也支持性能监控,进程守护,负载均衡等功能. 开发过程中建议时不时的参看官方详细命令行使用:命令行 pm2 ...

  2. React在开发中的常用结构以及功能详解

    一.React什么算法,什么虚拟DOM,什么核心内容网上一大堆,请自行google. 但是能把算法说清楚,虚拟DOM说清楚的聊聊无几.对开发又没卵用,还不如来点干货看看咋用. 二.结构如下: impo ...

  3. Spring Enable annotation – writing a custom Enable annotation

    原文地址:https://www.javacodegeeks.com/2015/04/spring-enable-annotation-writing-a-custom-enable-annotati ...

  4. C++随笔:.NET CoreCLR之GC探索(3)

    有几天没写GC相关的文章了哈,今天我讲GC的方式是通过一个小的Sample来讲解,这个小的示例代码只有全部Build成功了才会有.地址为D:\coreclr2\coreclr\bin\obj\Wind ...

  5. wordpress优化之结合prism.js为编辑器自定义按钮转化代码

    原文链接 http://ymblog.net/2016/07/24/wordpress-prism/ 继昨天花了一天一夜的时间匆匆写了主题Jiameil3.0之后,心中一直在想着优化加速,体验更好,插 ...

  6. 使用DeviceOne实现微信小程序功能

    微信小程序即将推出,还没推出就火的不行了.基于微信这个巨大平台,小程序必然能有巨大成功.不过它并不能完全取代App,该开发App还得开发.如果我们自己想实现一个基于自己的APP包含类似微信的小程序功能 ...

  7. 用Kotlin创建第一个Android项目(KAD 01)

    原文标题:Create your first Android project using Kotlin (KAD 01) 作者:Antonio Leiva 时间:Nov 21, 2016 原文链接:h ...

  8. jQuery标准的AJAX模板

    $('#saveInformationTemplate_button').on('click', function(){ if(isEmpty($("#name").val())) ...

  9. Linux C语言解析并显示.bmp格式图片

    /************************* *bmp.h文件 *************************/ #ifndef __BMP_H__ #define __BMP_H__ # ...

  10. Photoshop、Illustrator思维导图笔记

    半年前学习Photoshop时记得的思维导图笔记,可能不是很全,常用的基本都记下了.