文章目录
前言
监听器就是一一个实现了特定接口的Java类,这个Java类用于监听另一个Java类的方法调用或者属性的改变。当被监听对象发生上述事件后,监听器某个方法将会立即被执行。用来监听其他对象的变化的。主要应用在图形化界面开发上。 例如: Java中GUI, Android
事件源:指的是被监听对象(汽车)。
监听器:指的是监听的对象(报警器)。
事件源和监听器绑定:在汽车上安装报警器。
事件:指的是事件源对象的改变(踹了汽车一脚) --------主要功能获得事件源对象。
接下来学习的是servlet中的3种监听器
servlet中的监听器
在Servlet中定义了多种类型的监听器,它们用于监听的事件源分别是ServletContext、
HttpSession和ServletRequest这三个域对象。
一类:监听三个域对象的创建和销毁的监听器(三个)。
二类:监听三个域对象的属性变更(属性添加、移除、替换)的监听器(三个)。
三类:监听HttpSession中JavaBean的状态改变(钝化、活化、绑定、解除绑定)的监
听(两个)。
下面我将着重介绍几个常见的。
一、ServletContextListener监听器
用来监听ServletContext域对象的创建和销毁的监听器。
创建:在服务器启动的时候,为每个web应用创建单独的ServletContext 对象
销毁:在服务器关闭的时候,或者项目从web服务器中移除的时候。。
事件源和监听器需要通过配置去绑定
在web.xml中去配置:如下代码即可绑定监听器
代码演示:
package com.listener.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyServletContextListener implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContext对象被销毁了。。");
}
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContext对象被创建了。。");
}
}
用途:
加载框架的配置文件。例如:Spring框架提供了一个核心监听器 ContextLoaderListener。
定时任务调度,例如过生日给你发祝贺邮件
二、HttpSessionListener监听器
监听HttpSession对象的创建和销毁。
创建:服务器端第一次调用getSession()方法时候。
销毁:非正常关闭服务器 (正常关闭服务器session会被序列化)。点击terminate(强制关机)就会销毁,但是看不见销毁信息
Session过期(默认过期时间30分钟)。
手动调用session.invalidate()方法。
web.xml配置方式同上
代码演示:
package com.listener.listener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MyHttpSessionListener implements HttpSessionListener{
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("HttpSession对象被创建了。。");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("HttpSession对象被销毁了。。");
}
}
访问HTML是否创建Session : 不会。
访问JSP是否创建Session : 会。JSP编译的时候回创建session
访问Servlet是否创建Session : 不会(默认没有调用getSession方法)
三、ServletRequestListener监听器
用户监听ServletRequest 对象的创建和销毁
创建: 从客户端向服务器发送一次请求, 服务器就会创建request对象。
销毁: 服务器对这次请求作出了响应之后,request 对象就销毁了。
web.xml配置方式同上
代码如下:
package com.listener.listener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
public class MyServletRequestListener implements ServletRequestListener{
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("ServletRequest对象被销毁了。。。");
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println<