您的位置:首页 > 编程语言 > Java开发

Java监听器的使用

2016-05-27 17:21 260 查看

目录

目录
一监听器的简介

二监听器的用途

三创建一个简单监听器的实例步骤

四监听器的启动顺序

五监听器的分类

1按照监听对象划分

2按照监听的事件划分

六servlet30下的监听器的使用

一、监听器的简介

定义:监听器实际上是一个类,这个类实现了特定的接口,然后将这个类在 web.xml 文件中进行描述,这样服务器在启动的时候就可以实例化这个类,启动监听器。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法

1.定义:Servlet规范中定义的一种特殊类

2.用于监听servletContext,HttpSession,ServletRequest等域对象的创建与销毁事件

3.用于监听域对象的属性发生修改的事件

4.可以在事件发生前和发生后做一些必要的处理



二、监听器的用途

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

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

3.统计网站访问量

4.跟spring结合

三、创建一个简单监听器的实例步骤

1.创建一个类并实现监听器的接口

2.在web.xml配置中进行注册

代码块(这里通过实现session监听器接口):

//创建一个类并实现一个监听器的接口
public class MyHttpSessionListener implements HttpSessionListener {
//监听session创建的方法
@Override
public void sessionCreated(HttpSessionEvent arg0) {
System.out.println("session已经创建!!");
}
//监听session销毁的方法
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println("session已经销毁!!");
}
}
----------
//在web.xml中的配置
<!-- 设置HttpSession监听器 -->
<listener>
<listener-class>org.nf.listener.MyHttpSessionListener</listener-class>
</listener>


四、监听器的启动顺序

1.监听器与过滤器、servlet的加载顺序

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

五、监听器的分类

(1).按照监听对象划分

①用于监听应用程序环境对象(servletContext)的事件监听器
②用于监听用户会话对象(HttpSession)的事件监听器
③用于监听请求消息对象(ServletRequest)的事件监听器


(2).按照监听的事件划分

①监听域对象自身的创建和销毁的事件监听器

ServletContext:

1.ServletContext由ServletContextListener接口实现

2.方法由contextInitialized()和contextDestroyed()方法(服务器启动会

调用contextInitialized()方法,关闭服务器会调用contextDestroyed()方法)

3.主要用途:定时器和全局属性对象

HttpSession:

1.HttpSession由HttpSessionListener接口实现

2.方法由sessionCreated方法和sessionDestroyed方法(服务器一启动访问页面时会调

用sessionCreated方法,关闭服务器或关闭浏览器一段时间至session过期或不关闭浏览器,

session超时会调用sessionDestroyed方法)

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

ServletRequest:

1.ServletRequest由ServletRequestListener接口实现

2.方法有requestInitialized方法和requestDestroyed方法(当服务器启动访问页面时调用

requestInitialized()方法,并在访问完页面的同时调用requestDestroyed()方法)

3.主要用途:读取参数和记录访问历史

②监听域对象中的属性的增加和删除的事件监听器

继承接口后需要实现的方法:attributeAdded(新增)、attributeRemoved(删除)、 attributeReplaced(替换)

servletContext:

1.servletContext的属性的新增和删除事件由ServletContextAttributeListener接口实现

HttpSession:

1.HttpSession的属性的新增和删除的事件由HttpSession接口实现

ServletRequest:

1.ServletRequest的属性的新增和删除的事件由ServletRequest

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

1.绑定到解除绑定(就是通过调用setAttribute()和removeAttribute()的方法)

绑定:通过setAttribute保存到session对象当中;

解除绑定:通过调用removeAttribute()方法移除;

实现接口:实现HttpSessionBindingListener接口,注意不需要在web.xml中注册)

继承接口后需要实现方法有:绑定(valueBound()方法),解除绑定(valueUnbound()方法)

2.钝化到活化(钝化就是将session持久化到存储设备上,活化就是将session从存储设备上恢复)

钝化:将session对象持久化到存储设备上;

活化:将session对象从存储设备上进行恢复

实现接口:由HttpSessionActivationListener接口实现(注意:不需要在web.xml中注册)

继承接口后需要实现的方法有:钝化(sessionWillPassivate()方法),活化(sessionDidActivate()方法)

3.session钝化机制

①session正常状态下是放到服务器中, 服务器会对每一个在线用户创建session

②当在线用户很多时(几万以上),就要用到session钝化机制,本质就在于把服务器不经常使用

的session对象暂时序列化到系统文件或数据库系统中,当被使用时反序列化到内存中,整个

过程由服务器自动完成

4.tomcat中由两种session钝化管理器

注意: session钝化机制由SessionManager管理

第一种session钝化管理器:org.apache.catalina.session.StandardManager

①一种情况是当Tomcat服务器被关闭或重启时,tomcat服务器会将当前内存中的Session对象

钝化到服务器文件系统中;

②另一种情况是Web应用程序被重新加载时,内存中的Session对象也会被钝化到服务器的文件

系统中

③钝化后的文件被保存:Tomcat安装路

(/work/Catalina/hostname/applicationname/SESSION.ser)

第二种session钝化管理器:org.apache.catalina.session.Persistentmanager

区别:与第一种的区别:在在第一种的钝化机制的基础上进行了扩张

①一种情况是当Tomcat服务器被关闭或重启时,tomcat服务器会将当前内存中的Session对象

钝化到服务器文件系统中;

②另一种情况是Web应用程序被重新加载时,内存中的Session对象也会被钝化到服务器的文件

系统中

③可以配置主流内存的Session对象数目,将不长使用的Session对象保存到文件系统或数据库 ,

当用时再重新加载

5.默认情况下,tomcat提供两个钝化驱动类

org.apache.Catalina.FileStore和org.apache.Catalina.JDBCStore

(六)、servlet3.0下的监听器的使用

1.前提条件

①使用servlet3.0新标准jar包;

②JDK必须在1.6以上版本

③编译器的编译级别为6.0

④在web.xml文件中,使用3.0规范

⑤使用支持servlet3.0特性的web容器,比如tomcat7

2.监听器的用法

只需要在类中实现一个@WebListener的注解就可以使用,但是该注解用于将类

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

servletContextListener

ServletContextAttributeListener

servletRequestListener

ServletRequestAttributeListener

HttpSessionListener

HttpSessionAttributeListener
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet