1.Servlet监听器的概念
Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext、HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件。
监听对象:
1、ServletContext:application,整个应用只存在一个
2、HttpSession:session,针对每一个对话
3、ServletRequest:request,针对每一个客户请求
监听内容:创建、销毁、属性改变事件
监听作用:可以在事件发生前、发生后进行一些处理,一般可以用来统计在线人数和在线用户、统计网站访问量、系统启动时初始化信息等。
2.监听器的基本使用
创建步骤:
1、创建一个实现监听器接口的类
2、配置web.xml文件,注册监听器
<listener> <listener-class>完整类名</listener-class> </listener>
监听器的启动顺序:按照web.xml的配置顺序来启动
加载顺序:监听器>过滤器>Servlet
3、监听器的分类
3.1 按照监听的对象划分
1、用于监听应用程序环境对象(ServletContext)的事件监听器,实现ServletContextListener、ServletContextAttributeListener接口
2、用于监听用户会话对象(HttpSeesion)的事件监听器,实现HttpSessionListener、HttpSessionAttributeListener接口
3、用于监听请求消息对象(ServletRequest)的事件监听器,实现ServletRequestListener、ServletRequestAttributeListener接口
3.2按照监听事件划分
1、监听域对象自身的创建和销毁的事件监听器
根据监听对象不同分别实现ServletContextListener、HttpSessionListener、ServletRequestListener接口。
①ServletContext的创建和销毁:contextInitialized方法和contextDestroyed方法
public class ServletContext implements ServletContextListener{ @Override public void contextInitialized(ServletContextEvent sce) { // TODO Auto-generated method stub } @Override public void contextDestroyed(ServletContextEvent sce) { // TODO Auto-generated method stub } }
主要用途:作为定时器、加载全局属性对象、创建全局数据库连接、加载缓存信息等
实例:
在web.xml中可以配置项目初始化信息,在contextInitialized方法中进行启动<context-param> <param-name>属性名</param-name> <param-value>属性值</param-value> </context-param>②HttpSession的创建和销毁: sessionCreated 和 sessionDestroyed 方法
public class HttpSession implements HttpSessionListener{ @Override public void sessionCreated(HttpSessionEvent se) { // TODO Auto-generated method stub } @Override public void sessionDestroyed(HttpSessionEvent se) { // TODO Auto-generated method stub } }主要用途:统计在线人数、记录访问日志等
【注】
web.xml配置session超时参数,单位:分,session超时的时间并不是精确的
<session-config> <session-timeout>10</session-timeout> </session-config>③ServletRequest的创建和销毁: requestInitialized 和 requestDestroyed 方法
public class ServletRequest implements ServletRequestListener{ @Override public void requestDestroyed(ServletRequestEvent sre) { // TODO Auto-generated method stub } @Override public void requestInitialized(ServletRequestEvent sre) { // TODO Auto-generated method stub } }主要用途:读取request参数,记录访问历史
2、监听域对象中的属性的增加和删除的事件监听器
根据监听对象不同分别实现ServletContextAttributeListener、HttpSessionAttributeListener、ServletRequestAttributeListener接口。
实现方法:attributeAdded、attributeRemoved、attributeReplaced
3、监听绑定到HttpSeesion域中的某个对象的状态的事件监听器(创建普通JavaBean)
HttpSession中的对象状态:绑定→解除绑定;钝化→活化
实现接口及方法:HttpSessionBindingListener接口(valueBound和valueUnbound方法)、HttpSessionActivationListener接口(sessionWillPassivate和sessionDidActivate方法)