一、监听器

1、定义

监听web对象的创建与销毁和其与对象属性发生修改的事件

2、作用

  • 统计在线人数和在线用户
  • 系统启动时加载初始化信息
  • 统计网站访问量
  • 和Spring结合

3、创建步骤

  • 创建实现了监听器接口的类
  • 配置web.xml进行注册

(1) 创建一个类实现ServletContextListener接口

(2) web.xml配置

<listener>
	<listener-class>类全名</listener-class>
</listener>

4、监听器分类

按照监听对象划分:

(1)用于监听app环境对象(ServletContext)

获得web.xml中的参数信息并放入ServletContext对象中

web.xml写:

<context-param>
	<param-name>key</param-name>
	<param-value>value</param-value>
</context-param>

listener类写

	servletcontextevent.getServletContext().getInitparameter("key");
	servletcontextevent.getServletContext().setAttribute("","");

(2)用于监听用户会话的对象(HttpSession)

统计在线人数

在web.xml中可以配置session超时时间

<session-config>
	<sessin-timeout>数字单位min</sessin-timeout><!--0表示直接删除 -->
</session-config>

记录访问日志

(3)用于监听请求消息对象(ServletRequest)

记录日志

按照监听事件划分:

  • 监听域对象自身的创建和销毁
  • 监听域对象中的属性的增加与删除(attribute)
    • 实现ServletRequestAttributeListener等
  • 监听绑定到HttpSession域中的某个对象的状态
  • 解决高访问量的对象
    • session钝化:将session序列化
    • session活化:将session从序列化中恢复
  • 某个实体对象实现HttpSessionBindingListener接口,在绑定和解除绑定将触发方法:绑定解除绑定
  • 某个实体对象实现HttpSessionActivationListener接口:钝化活化(必须实现序列化接口)
  • 不需要再web.xml注册

二、webapp启动创建顺序

优先级: > 监听器 > 过滤器 > Servlet

三、Servlet3.0前提

  • 使用Servlet3.0新jar
  • jdk>=1.6
  • 编译级别6.0
  • web.xml使用3.0
  • 使用支持Servlet3.0特性的web容器,如tomcat7

四、Servlet3.0 listener注解

@WebListener 必须实现接口无法定义监听器的顺序