文章目录
1.1 Listener概述
JavaWeb 中的监听器是监听 ServletContext
HttpSession
HttpServletRequest
三个数据域对象创建和销毁以及监听数据域对象中数据的变化,就是监听数据域对象中属性的变化:setAttribute
removeAttribute
1.ServletContext 是在tomcat启动创建,关闭tomcat销毁
2.HttpSession 是在浏览器第一次访问执行request.getSession()创建,销毁时间:1)30min 2)执行invalidate()
3.HttpServletRequest 是浏览器第一次访问创建,浏览器接收到服务器的响应就销毁
# 监听
1. 设置监听器的人
2. 监听器
2. 监听器目标: 被监听的对象
3. 监听器工作: 被监听的对象执行某种行为,监听器就开始工作
# web里面
1. 雇佣人 : web程序开发者
2. 监听器例子A
1). 监听器A: ServletContextListener ****
2). 目标 : 监听ServletContext对象
3). 执行 : 监听ServletContext对象创建和销毁
3. 监听器例子B
1). 监听器A: HttpSessionListener
2). 目标 : HttpSession对象
3). 执行 : 监听HttpSession对象创建和销毁
4. 监听器例子C
1). 监听器A: HttpRequestListener
2). 目标 : HttpRequest对象
3). 执行 : 监听HttpRequest对象创建和销毁
5. 监听器例子D
1). 监听器A: ServletContextAttributeListener ****
2). 目标 : ServletContext对象
3). 执行 : 监听ServletContext对象增删改数据 (add,remove) 当我们向ServletContext对象中添加数据(setAttribute())和删除数据(removeAttribute())就会被ServletContextAttributeListener监听器监听
ServletContextAttributeListener
HttpSessionAttributeListener
HttpRequestAttributeListener
生活中的监听器
我们很多商场有摄像头,监视着客户的一举一动。如果客户有违法行为,商场可以采取相应的措施。
JavaWeb 中的监听器
在我们的 java 程序中,有时也需要监视某些事情,一旦被监视的对象发生相应的变化,我们应该采取相应的操作。
监听 web 三大域对象:HttpServletRequest
、HttpSession
、ServletContext
(创建和销毁)
场景
历史访问次数、统计在线人数、系统启动时初始化配置信息
监听器的接口分类
事件源 | 监听器接口 | 时机 |
---|---|---|
ServletContext | ServletContextListener | 上下文域创建和销毁 |
ServletContext | ServletContextAttributeListener | 上下文域属性增删改的操作 |
HttpSession | HttpSessionListener | 会话域创建和销毁 |
HttpSession | HttpSessionAttributeListener | 会话域属性增删改的操作 |
HttpServletRequest | ServletRequestListener | 请求域创建和销毁 |
HttpServletRequest | ServletRequestAttributeListener | 请求域属性增删改的操作 |
1.2 Listener快速入门
监听器在 web 开发中使用的比较少,见的机会就更少了,今天我们使用 ServletContextListenner 来领略下监听器的风采, 因为这个监听器是监听器中使用率最高的一个, 且监听器的使用方式都差不多。
使用这个监听器可以在项目启动和销毁的时候做一些事情, 例如:在项目启动的时候加载配置文件。
步骤分析
1. 创建一个普通类,实现ServletContextListenner
2. 重写方法
监听ServletContext创建
监听ServletContext销毁
3. 配置
可以 web.xml
也可以 注解
① xml版本
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/*
设置监听器的人: 开发者
监听器 : MyListener
监听器目标 : ServletContext 对象
监听器的工作:
1). 当ServletContext 对象创建的时候就会执行contextInitialized方法
ServletContext是tomcat启动时就会创建 (早于Filter和Servlet)
2). 当ServletContext 对象销毁的时候就会执行contextDestroyed方法
ServletContext是tomcat关闭时销毁 (晚于Filter和Servlet)
这两个方法是事件驱动
*/
public class MyListener implements ServletContextListener {
//tomcat一启动,此方法就会运行
//运用场景: spring底层封装了一个ServletContextListener加载配置文件
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("contextInitialized");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("contextDestroyed");
}
}
<listener>
<listener-class>com.test.MyServletContextListener</listener-class>
</listener>
② 注解版本
@WebListener
public class MyListener implements ServletContextListener {
//tomcat一启动,此方法就会运行
//运用场景: spring底层封装了一个ServletContextListener加载配置文件
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("contextInitialized");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("contextDestroyed");
}
}
1.3 案例:模拟spring框架
需求:可以在项目启动时读取配置文件。获取配置文件的名字。
步骤:
1.在web.xml进行配置文件的配置
2.创建自定义监听器类监听ServletContext的创建和销毁
3.在自定义监听器类中实现监听器的方法
4.实现的方法体中读取web.xml文件中关于当前项目配置文件的信息
5.输出结果
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
//2.创建自定义监听器类监听ServletContext的创建和销毁
//别忘记注册监听器
@WebListener
public class SpringContextListener implements ServletContextListener{
//3.在自定义监听器类中实现监听器的抽象方法
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
//4.实现的方法体中读取web.xml文件中关于当前项目配置文件的信息
//4.1根据事件类对象servletContextEvent调用方法获取ServletContext上下文对象
ServletContext servletContext = servletContextEvent.getServletContext();
//4.2使用上下文对象调用方法获取web.xml配置文件中的数据
/*
<context-param>
<param-name>jdbc</param-name>
<param-value>jdbc.properties</param-value>
</context-param>
*/
String str = servletContext.getInitParameter("jdbc");
System.out.println("str = " + str);
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("释放资源....销毁。。。。");
}
}
<!--配置当前项目的配置文件信息-->
<!--1.在web.xml进行配置文件的配置-->
<context-param>
<param-name>jdbc</param-name>
<param-value>jdbc.properties</param-value>
</context-param>
标签:Web,销毁,监听器,对象,创建,Listener,ServletContext,监听
From: https://blog.csdn.net/Snowyyds/article/details/143434737