Servlet监听器详解及举例

本文详细介绍了Servlet监听器的工作原理和使用,包括自定义监听器的创建、Servlet的三种数据域对象(ServletContext、HttpSession、ServletRequest)的监听器,以及监听器在对象创建、销毁、属性变化和状态感知中的应用。同时,文中还提到了监听器在Spring框架初始化、任务调度和Session管理等方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。

监听器原理

监听原理
1、存在事件源
2、提供监听器
3、为事件源注册监听器
4、操作事件源,产生事件对象,将事件对象传递给监听器,并且执行监听器相应监听方法

监听器典型案例:监听window窗口的事件监听器
例如:swing开发首先制造Frame**窗体**,窗体本身也是一个显示空间,对窗体提供监听器,监听窗体方法调用或者属性改变:
* 关闭窗体时,调用windowListener 的windowclosing() , 传递windowEvent参数,表示窗体关闭事件对象
* 事件对象操作事件源,获得事件源状态

自定义监听器

以上内容可以用下图解释:

这里写图片描述

通过person.addPersonListener(new PersonListener(){})使事件源与监听器间产生联系。

事件源(在事件源方法中创建事件对象):

/**
 * 事件源对象,被监听
 *  
 */
public class Person{
   
    private String name;
    private int weight;
    private PersonListener listener;
    //注册监听器
    public void addPersonListener(Personlistener listener){
        this.listener = listener;
    }
    //吃法
    public void eat(){
        //体重增加
        weight+=5;
        //在方法中调用监听器方法
        if(listener != null){
            //监听器存在
            //创建事件对象-----通过事件对象可以获得事件源
            PersonEvent event = new PersonEvent(this);
            listener.personeating(event);
        }
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

}

监听器(参数是事件对象)

/**
 * 监听器接口,提供对监听相应方法
 * 
 */
public interface PersonListener{
   
    public void personeating(PersonEvent euent);//监听事件
}

事件对象(通过事件对象可以获得事件源)

/**
 * 事件对象,当事件源发生动作改变,产生相应事件对象,该对象被传递给监听器指定方法
 * 
 */
public class PersonEvent{
   
    public Object source;//事件源
    public Object getSource(){
        return source;
    }
    public void setSource(Object source){
        this.source = source;
    }
    //构造事件对象时,接收事件源
    public PersonEvebt(Person person){
        this.source = person;
    }
}

测试方法

public class PersonTest(){
    public static void main(){
        //步骤一:创建事件源
        Person person = new Person();
        person.setName("Megustas");
        person.setWeight(100);
        //步骤二 创建监听器,注册写到一起
        person.addPersonListener(new PersonListener(){
                    @Override
            public void personeating(PersonEvent event) {
                System.out.println("监听到了,人正在吃饭!");
                // 在监听方法中可以用来获得 事件源 状态
                Person person = (Person) event.g
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值