监听器

来源:互联网 发布:把ubuntu安装到u盘 编辑:程序博客网 时间:2024/06/05 01:54


1.1 概述

监听器: 主要是用来监听特定对象的创建或销毁、属性的变化的!

 是一个实现特定接口的普通java类!

 

对象:

自己创建自己用 (不用监听)

别人创建自己用 (需要监听)

 

Servlet中哪些对象需要监听?

request / session / servletContext

分别对应的是request监听器、session相关监听器、servletContext监听器

 

监听器(listener)

 

 

1.2 监听器接口:

一、监听对象创建/销毁的监听器接口

Interface ServletRequestListener     监听request对象的创建或销毁

Interface HttpSessionListener        监听session对象的创建或销毁

Interface ServletContextListener     监听servletContext对象的创建或销毁

二、监听对象属性的变化

Interface ServletRequestAttributeListener 监听request对象属性变化: 添加、移除、修改

Interface HttpSessionAttributeListener    监听session对象属性变化: 添加、移除、修改

Interface ServletContextAttributeListener  监听servletContext对象属性变化

 

三、session相关监听器

Interface HttpSessionBindingListener   监听对象绑定到session上的事件

    Interface HttpSessionActivationListener(了解) 监听session序列化及反序列化的事件

 

 

404(路径写错)

500(服务器错误,调试)

 

1.3生命周期监听器

声明周期监听器: 监听对象的创建、销毁的过程!

监听器开发步骤:

1. 写一个普通java类,实现相关接口;

2. 配置(web.xml)

 

A. ServletRequestListener    

监听request对象的创建或销毁。

 

代码:

/**

 *  监听request对象的创建或销毁

 * @author Jie.Yuan

 *

 */

public class MyRequestListenerimplements ServletRequestListener{

 

// 对象销毁

@Override

public void requestDestroyed(ServletRequestEvent sre) {

// 获取request中存放的数据

Object obj = sre.getServletRequest().getAttribute("cn");

System.out.println(obj);

System.out.println("MyRequestListener.requestDestroyed()");

}

 

// 对象创建

@Override

public void requestInitialized(ServletRequestEvent sre) {

System.out.println("MyRequestListener.requestInitialized()");

}

}

 

Web.xml

<!-- 监听request对象创建、销毁 -->

<listener>

<listener-class>cn.lfsenior.a_life.MyRequestListener</listener-class>

</listener>

 

 

 

B. HttpSessionListener

监听session对象的创建或销毁。

 

C. ServletContextListener

监听servletContext对象的创建或销毁。

 

 

1.4 属性监听器

监听:request/session/servletContext对象属性的变化!

ServletRequestAttributeListener

HttpSessionAttributeListener

ServletContextAttributeListener

 

总结:先写类,实现接口;  再配置

 

 

1.5 其他监听器: session相关监听器

 

 

HttpSessionBindingListener   

监听对象绑定/解除绑定到sesison上的事件!

 

步骤:

对象实现接口; 再把对象绑定/解除绑定到session上就会触发监听代码。

作用:

(上线提醒!)

 

/**

 * 监听此对象绑定到session上的过程,需要实现session特定接口

 * @author Jie.Yuan

 *

 */

public class Adminimplements HttpSessionBindingListener {

   … 省略get/set

// 对象放入session

@Override

public void valueBound(HttpSessionBindingEvent event) {

System.out.println("Admin对象已经放入session");

}

// 对象从session中移除

@Override

public void valueUnbound(HttpSessionBindingEvent event) {

System.out.println("Admin对象从session中移除!");

}

}

 

 

思考:

这个session监听器,和上面的声明周期、属性监听器区别?

--à 不用再web.xml配置

   -à 因为监听的对象是自己创建的对象,不是服务器对象!