Listener 监听器
1、Listener的定义与作用
监听器Listener就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。
Listener是Servlet的监听器,可以监听客户端的请求,服务端的操作等。
2、Listener的分类与使用
主要有以下三类:
2.1、ServletContext监听
- ServletContextListener:用于对Servlet整个上下文进行监听(创建、销毁)。
|
|
- ServletContextAttributeListener:对Servlet上下文属性的监听(增删改属性)。
|
|
2.2、Session监听
Session属于http协议下的内容,接口位于javax.servlet.http.*包下。
- HttpSessionListener接口:对Session的整体状态的监听。
|
|
- HttpSessionAttributeListener接口:对session的属性监听。
|
|
session的销毁有两种情况:
- session超时,web.xml配置:
|
|
- 手工使session失效
|
|
2.3、Request监听
- ServletRequestListener:用于对Request请求进行监听(创建、销毁)。
|
|
- ServletRequestAttributeListener:对Request属性的监听(增删改属性)。
|
|
3、在web.xml中配置
Listener配置信息必须在Filter和Servlet配置之前,Listener的初始化(ServletContentListener初始化)比Servlet和Filter都优先,而销毁比Servlet和Filter都慢。
|
|
4、Listener应用实例
4.1、Spring使用ContextLoaderListener加载ApplicationContext配置信息
ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。
ContextLoaderListener如何查找ApplicationContext.xml的配置位置以及配置多个xml:如果在web.xml中不写任何参数配置信息,默认的路径是”/WEB-INF/applicationContext.xml”,在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml(在MyEclipse中把xml文件放置在src目录下)。如果是要自定义文件名可以在web.xml里加入contextConfigLocation这个context参数。
|
|
4.2、Spring使用Log4jConfigListener配置Log4j日志
Spring使用Log4jConfigListener(实现了ServletContextListener接口)的好处:
- 动态的改变记录级别和策略,不需要重启Web应用。
- 把log文件定在 /WEB-INF/logs/ 而不需要写绝对路径。因为系统把web目录的路径压入一个叫webapp.root的系统变量。这样写log文件路径时不用写绝对路径了。
- 可以把log4j.properties和其他properties一起放在/WEB-INF/ ,而不是Class-Path。
- 设置log4jRefreshInterval时间,开一条watchdog线程每隔段时间扫描一下配置文件的变化。
|
|