监听器原理及使用

一、什么是监听器
web监听器是一种Servlet中的特殊的类,它们能帮助开发者监听web中的特定事件,比如ServletContext,HttpSession,ServletRequest的创建和销毁;变量的创建、销毁和修改等。可以在某些动作前后增加处理,实现监控
监听器包括三部分:事件、事件源和事件监听器
事件,发生事件的组件,也就是被监听的对象
事件源,生成事件的对象,事件源提供了用于为事件注册监听器的方法
事件监听器,监听并负责处理事件的方法

二、监听器实现原理
接下来的代码演示中:
事件Event,事件源People,事件监听器MyListener

public class Event {
	private People people;

	public People getPeople() {
		return people;
	}

	public void setPeople(People people) {
		this.people = people;
	}

	public Event(People people) {
		this.people = people;
	}
}
public class People {
	String name;
    MyListener myListener;

    public void eat(){
	    System.out.println("吃饭");
	    myListener.doEat(new Event(this));
    }

    public void sleep(){
	    System.out.println("睡觉");
	    myListener.doSleep(new Event(this));
    }

	public People(String name, MyListener myListener) {
		this.name = name;
		this.myListener = myListener;
	}

	public People(String name) {
		this.name = name;
	}

	public void registerMyListener(MyListener myListener){
    	this.myListener = myListener;
	}
}
public interface MyListener {
	void doEat(Event event);
	void doSleep(Event event);
}

使用监听器,这里在两个people中实现了不同的监听器去做指定的事情

public class Main {
	public static void main(String[] arg){
		People people = new People("小红");
		people.registerMyListener(new MyListener() {
			@Override
			public void doEat(Event event) {
				System.out.println("不让"+event.getPeople().name+"吃饭");
			}

			@Override
			public void doSleep(Event event) {
				System.out.println("不让"+event.getPeople().name+"睡觉");
			}
		});

		people.eat();
		people.sleep();

		People p = new People("大黄");
		p.registerMyListener(new MyListener() {
			@Override
			public void doEat(Event event) {
				System.out.println("让"+event.getPeople().name+"吃饭");
			}

			@Override
			public void doSleep(Event event) {
				System.out.println("让"+event.getPeople().name+"睡觉");
			}
		});

		p.eat();
		p.sleep();
	}

}

运行结果如下
在这里插入图片描述

在实际的开发中 监听器的三部分都不需要我们自己去写 我们只是会实现监听器提供的接口,然后注册监听器,程序运行后,监听器就会在指定事件发生时进行相应处理。具体使用看下面

三、监听器常用的用途
通常使用Web监听器做以下的内容:
统计在线人数,利用HttpSessionLisener
加载初始化信息:利用ServletContextListener
统计网站访问量、实现访问监控等

在springboot项目中简单实现统计在线人数的监听器如下:
浏览器首次访问服务会创建session来存放用户相关信息(会在用户退出登录时销毁session 或者设置session过期时间来控制其失效),我们就监听session的创建来实现对在线人数的统计

1.实现监听器

public class TestListener implements HttpSessionListener {
	//HttpSessionListener提供了对session创建和销毁进行监听后的处理的监听器  我们只需要实现这两个方法
	private int userNumber = 0;

	@Override
	public void sessionCreated(HttpSessionEvent se) {
		userNumber++;
		se.getSession().setAttribute("userNumber", userNumber);
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent se) {
		userNumber--;
		se.getSession().setAttribute("userNumber", userNumber);
	}
}

2.注册监听器

//注册监听器
@Configuration
public class ListenerBeanConfig {

	@Bean
	public ServletListenerRegistrationBean servletListenerRegistrationBean(){
		ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean();
		bean.setListener(new TestListener());
		return bean;
	}
}

3.使用监听器

@Controller
public class TestController {
	@RequestMapping("/test")
	@ResponseBody
	public String getResult() {
		return "在线用户人数:"+SessionUtils.getSessionAttribute("userNumber");
	}
}

4.启动项目,访问接口检查运行结果

第一次 访问浏览器 在线人数为1
在这里插入图片描述
换另外一个浏览器访问 在线人数为2
在这里插入图片描述
这里我们只是测试了对session创建时的监控
监听器的分类和其他具体使用后续再继续学习

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值