【JavaWeb】(8)监听器

1. 定义

是指专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生变化时,立即采取相应的行动。

Web监听器:

是Servlet规范中定义的一种特殊类,用于监听ServletContext、HttpSession和ServletRequest等域对象的创建与销毁事件,用于监听域对象的属性发生修改的事件,可以在事件发生前、发生后做一些必要的处理。

 Web监听器的用途:

(1). 统计在线人数和在线用户

(2). 系统启动时加载初始化信息

(3). 统计网站访问量

(4). 跟Spring结合


2. 创建监听器

(1). 创建一类实现监听器接口(ServletContextListener)

(2). 配置web.xml进行注册

监听器的启动顺序:



3. 监听器的分类

按监听对象:

(1). 用于监听应用程序愿景对象(ServletContext)的事件监听器

(2). 用于监听用户会话对象(HttpSession)的事件监听器

(3). 用于监听请求消息对象(ServletRequest)的事件监听器

按监听的事件划分:

(1). 监听域对象自身的创建和销毁的事件监听器

1). ServletContext--->ServletContextListener

一个ServletContext可以注册多个ServletContextListener

contextInitialized(ServletContextEven sce)t方法:ServletContext创建时调用

contextDestroyed(ServletContextEven sce)方法:ServletContext销毁时调用

使用ServletContextEvent还可以获取一些初始化参数的信息:在<context-param>标签内配置<param-name>和<param-value>值。

主要用途:定时器、全局属性对象

2). HttpSession--->HttpSessionListener

一个HttpSession可以注册多个HttpSessionListener

sessionCreate方法:session创建时调用

sessionDestroyed方法:session销毁时调用

主要用途:统计在线人数、记录访问日志

在web.xml中可以配置<session-config>标签内的<session-timeout>来设置session超时时间(分钟)

3). ServletRequest--->ServletRequestListener

一个ServletRequest可以对应多个ServletRequestListener

requestInitialized方法:request创建时调用

requestDestroyed方法:request销毁时调用

主要用途:读取参数、记录访问历史

(2). 监听域对象中的属性的增加和删除的事件监听器

1). ServletContext--->ServletContextAttributeListener

2). HttpSession--->HttpSessionAttributeListener

3). ServletRequest--->ServletRequestAttributeListener

(3). 监听绑定到HttpSession域中的某个对象的状态的事件监听器

Session钝化机制:

本质就在于把服务器中不经常使用的Session对象暂时序列化到系统文件系统或是数据库系统中,当被使用时反序列化到内存中,整个过程由服务器自动完成。

Tomcat中两种session钝化管理器,Session钝化机制由SessionManager管理:

1). org.apache.catalina.session.StandardManager

当Tomcat服务器被关闭或重启时,tomcat服务器会将当前内存中的Session对象钝化到服务器文件系统中;另一种情况是Web应用程序被重新加载时,内存中的Session对象也会被钝化到服务器的文件系统中。钝化后的文件被保存在:Tomcat安装路径/work/Catalina/hostname/applicationname/SESSION.ser

2). org.apache.catalina.session.Persistentmanager

首先在钝化的基础上进行了扩张。第一种情况如1)的第一个,第二种如1)的第二个,第三种情况,可以配置主流内存的Session对象数目,将不长使用的Session对象保存到文件系统或数据库,当用时再重新加载。默认情况下,Tomcat提供两个钝化驱动类:org.apache.Catalina.FileStore和org.apache.Catalina.JDBCStore。

HttpSessionBindingListener接口:

绑定:valueBound方法

解除绑定:valueUnbound方法

HttpSessionActivationListener接口:

钝化:sessionWillPassivate方法

活化:sessionDidActivate方法

这些都不需要在web.xml中注册。


4. 监听器在Servle3.0下的应用

使用Servlet3.0的前提条件:

(1). 使用Servlet3.0新标准jar包

(2). JDK必须在1.6以上版本

(3). 编译器的编译级别为6.0

(4). 在web.xml文件中,使用3.0规范

(5). 使用支持Servlet3.0特性的web容器,比如tomcat7

用法:

加注解:@WebListener

该注解用于将类声明为监听器,被@WebListener标注的类必须实现以下至少一个接口:

ServletContextListener、ServletContextAttributeListener、ServletRequestListener、ServletRequestAttributeListener、HttpSessionListener、HttpSessionAttributeListener

@WebListener的常用属性:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值