JavaWeb 之 Listener:监听器
一、监听
1、事件监听机制
- 事件: 一件事情
- 事件源: 事件发生的地方
- 监听器: 一个对象
- 注册监听: 将事件、事件源、监听器绑定在一起。
2、监听器概念
当事件源上发生某个事件后,执行监听器代码。
监听器的作用是,监听某种事物的变化。 然后通过回调函数, 反馈给客户(程序) 去做一些相应的处理
二、Listener
1、概述
Listener 用于监听 JavaWeb 程序中的事件。(如:ServletContext、HttpSession、ServletRequest的创建、修改和删除)
在 JavaWeb 中,可以为某些事件来设置监听器,当事件被处罚时,监听器中的指定方法会被调用。
扩展:Servlet、Filter和Listener 并称 WEB 的三大组件。
2、观察者模式
Listener 的原理是基于观察者模式的,所谓的观察者模式简单来说,就是当被观察者的特定事件被触发(一般在某些方法被调用后),会通知观察者(调用观察者的方法),观察者可以在自己的的方法中来对事件做一些处理。
在 JavaWeb 中,观察者就是 Listener,而被观察者可能有三个 ServletContext、HTTPSession、ServletRequest,而事件指的就是这些对象的创建、修改和删除等。
JavaWeb 中一共三类11个监听器。
二、ServletContextListener 监听器
1、概述
ServletContextListener 它可以监听 ServletContext 对象的创建和销毁。
ServletContext 对象在 web 工程启动的时候创建, 在 web 工程停止的时候销毁。
监听到创建和销毁之后都会分别调用 ServletContextListener 监听器的方法反馈。
1、常用方法:
public interface ServletContextListener extends EventListener {
/**
* 在 ServletContext 对象创建之后马上调用,做初始化
*/
public void contextInitialized(ServletContextEvent sce);
/**
* 在 ServletContext 对象销毁之前调用
*/
public void contextDestroyed(ServletContextEvent sce);
}
2、使用ServletContextListener 监听器监听 ServletContext 对象。
使用步骤:
(1)定义一个类,实现 ServletContextListener接口
(2)实现两个回调方法
(3)配置
① web.xml方式:配置类的全类名即可。
<listener>
<listener-class>cn.ks.web.listener.ContextLoaderListener</listener-class>
</listener>
<context-param> 指定初始化参数
② 注解方式:在类上添加 @WebListener 即可。
三、从指定文件找那个加载数据案例
创建一个类实现 ServletContextListener 接口
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import java.io.FileInputStream; @WebListener
public class ContextLoaderListener implements ServletContextListener { /**
* 监听ServletContext对象创建的。ServletContext对象服务器启动后自动创建。
*
* 在服务器启动后自动调用
* @param servletContextEvent
*/
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
//加载资源文件
//1.获取ServletContext对象
ServletContext servletContext = servletContextEvent.getServletContext(); //2.加载资源文件:从下面的 web.xml中根据键获取对应的值(获取配置文件的位置)
String contextConfigLocation = servletContext.getInitParameter("contextConfigLocation"); //3.获取真实路径
String realPath = servletContext.getRealPath(contextConfigLocation); //4.加载进内存
try{
FileInputStream fis = new FileInputStream(realPath);
System.out.println(fis);
}catch (Exception e){
e.printStackTrace();
}
System.out.println("ServletContext对象被创建了。。。");
} /**
* 在服务器关闭后,ServletContext对象被销毁。当服务器正常关闭后该方法被调用
* @param servletContextEvent
*/
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext对象被销毁了。。。");
}
}
在 web.xml 中指定初始化参数位置:
<!-- 指定初始化参数 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
JavaWeb 之 Listener:监听器的更多相关文章
- JavaWeb之Listener监听器
监听在Java体系中运用的很广泛,在安卓开发.JavaWeb开发中到处存在,在其他语言也有类似的,如果有了解过设计模式那很容易理解实现的原理.不过对于开发者来说,使用观察者模式只需实现相应的接口就好, ...
- 转-JavaWeb三大组件之Listener监听器
JavaWeb三大组件之Listener监听器一.概述1,它是一个接口,内容由我们来实现 2,它需要注册,例如注册在按钮上 3,监听器中的方法,会在特殊事件发生时被调用 二.JavaWeb中的监听器1 ...
- javaweb学习总结—监听器(Listener)
监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一 ...
- Listener监听器与Filter过滤器
1.Listener [1]监听器简介 > Listener是JavaWeb的三大组件之一,Servlet.Filter.Listener > Li ...
- 第16 天 JavaWEB过滤器和监听器技术
Day16 JavaWEB过滤器和监听器技术 复习: 1.大结果集分页mysql的实现,是使用那个关键字,从user表中取第一页的数据,长度为10,sql语句怎么写? 2.分页查询的起始位置(star ...
- 超全面的JavaWeb笔记day20<监听器&国际化>
JavaWeb监听器 三大组件: l Servlet l Listener l Filter Listener:监听器 1. 初次相见:AWT 2. 二次相见:SAX 监听器: l 它是一个接口,内容 ...
- JavaWEB过滤器和监听器技术
过滤器介绍 什么是过滤器 生活中的例子: 滤水器,口罩,杯子上滤网,渔网 生活中的过滤器:留下我们想要的,排除,我们不想要的. 高考: 只有分数够高的同学才能进入理想的大学.有一部分同学被拦截在大学之 ...
- JavaWeb——过滤器及监听器
什么是过滤器? 过滤器示意图 Filter是如何实现拦截的? Filter的生命周期 Filter的创建 Filter的销毁 FilterConfig接口 Servlet过滤器有关接口 过滤器配置 F ...
- .jsp文件的使用和理解以及一些小练习和Listener监听器
什么是 jsp,它有什么用? jsp 的全换是 java server pages.Java 的服务器页面.jsp 的主要作用是代替 Servlet 程序回传 html 页面的数据.因为 Servle ...
- 十:JavaWeb中的监听器(一)
2.1.基本概念 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域 ...
随机推荐
- Win7下msys64安装mingw工具链
1. 安装msys64 安装到指定目录, 例如C:\msys64 2. 命令行更新 运行msys2.exe打开命令行窗口, 执行命令 pacman -Syuu 3. 修改安装源 进入msys64/et ...
- 求解未知数——yjy题库
/* 未知数 p1,p2,p3,p4,p5,满足: (1) p1 与 p3 均为 2 位的正整数:p5 为 3 位的正整数: (2) p2 与 p4 低两位(例:数值‘123’取低两位则为‘23’)数 ...
- python2 pickle.dump生成的文件,python3 pickle.load怎么加载
会报错: UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 3: ordinal not in range(12 ...
- WebGL学习笔记(九):阴影
3D中实现实时阴影技术中比较常见的方式是阴影映射(Shadow Mapping),我们这里也以这种技术来实现实时阴影. 阴影映射背后的思路非常简单:我们先以光的位置为视角进行渲染,我们能看到的东西都将 ...
- Go 汇编入门
https://golang.org/doc/asm https://github.com/teh-cmc/go-internals/tree/master/chapter1_assembly_pri ...
- C语言 按位异或实现加法
/* C语言 按位异或实现加法 */ #include <stdio.h> #include <stdlib.h> #include <string.h> void ...
- (转载)基于比较的少样本(one/few-shoting)分类
基于比较的方法 先通过CNN得到目标特征,然后与参考目标的特征进行比较. 不同在于比较的方法不同而已. 基本概念 数据集Omniglot:50种alphabets(文字或者文明); alphabet中 ...
- 和至少为K的最短子数组
返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K 如果没有和至少为 K 的非空子数组,返回 -1 . 示例 1: 输入:A = [1], K = 1 输出:1 示例 2: 输入:A = ...
- Java 8并行流的性能陷阱
并行化流被分成多个块,每个块独立处理,结果在最后汇总. CPU密集型代码如下: private long countPrimes(int max) { return range(1, max) ...
- F# 4.6 预览版正式公布
1月24日,F# 4.6 预览版正式公布,与以往一样,新版本的设计与开发过程是整个 F# 开源社区共同努力的结果,这次更新的具体讨论内容可以通过下面两个链接来查看: F# 4.6 意见征求记录 FSh ...