监听器

Servlet中的过滤器和监听器:Filter、Listener

房东的猫 提交于 2020-02-04 10:35:50
Filter(过滤器) 概念 web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。 作用 一般用于完成通用的操作。 如:登录验证、统一编码处理、敏感字符过滤… 快速入门 定义一个类,实现接口Filter 复写方法 配置拦截路径 web.xml 注解 过滤器细节 web.xml配置 < filter > < filter-name > demo1 </ filter-name > < filter-class > cn.itcast.web.filter.FilterDemo1 </ filter-class > </ filter > < filter-mapping > < filter-name > demo1 </ filter-name > <!-- 拦截路径 --> < url-pattern > /- </ url-pattern > </ filter-mapping > 过滤器执行流程 执行过滤器 执行放行后的资源 回来执行过滤器放行代码下边的代码 过滤器生命周期方法 init 在服务器启动后,会创建Filter对象,然后调用init方法。 只执行一次。 用于加载资源。 doFilter 每一次请求被拦截资源时,会执行。 执行多次。 destroy 在服务器关闭后,Filter对象被销毁。 如果服务器是正常关闭

搞清楚Spring事件机制后:Spring的源码看起来简单多了

微笑、不失礼 提交于 2020-02-03 11:50:26
本文主讲Spring的事件机制,意图说清楚: 什么是观察者模式? 自己实现事件驱动编程,对标Spring的事件机制 彻底搞懂Spring中的事件机制,从而让大家 本文内容较长,代码干货较多,建议收藏后持续阅读。 Spring框架已然是Javaeee开发领域的霸主,无论是使用SpringBoot还是SpringCloud,都离不开Spring框架。 作为Java开发者,无论是面试求职还是日常开发,就必须得熟练掌握、运用Spring框架。 因此学习Spring框架源码也就成为了大家最重要的事情之一。 Spring框架中用到的设计模式 Spring框架中运用了大量的设计模式,如果对设计模式掌握的不够熟练,阅读源码的时候就会感到很吃力,不明白作者为什么这样写,有时候一个方法一个方法的跟进去,到达一定的深度之后就断了,无法连贯起来,最后不得不放弃。 简单工厂,又叫静态工厂方法模式:Spring中的BeanFactory。 工厂方法模式:Spring中的FactoryBean。 单例模式:Spring中的BeanFactory就是全局单例的,我们日常开发的service默认也是单例模式,单例存在于Spring容器中。 适配器模式:Spring中的AOP、拦截器。 包装器模式:Spring中的各种Wrapper、Decorator。 代理模式:Spring中的AOP就是采用的代理模式

DOM 事件模型

大城市里の小女人 提交于 2020-02-02 05:56:53
事件 HTML元素事件是浏览器内在自动产生的,当有事件发生时html元素会向外界(这里主要指元素事件的订阅者)发出各种事件,如click,onmouseover,onmouseout等等。 DOM事件流 DOM(文档对象模型)结构是一个树型结构,当一个HTML元素产生一个事件时,该事件会在元素结点与根结点之间的路径传播,路径所经过的结点都会收到该事件,这个传播过程可称为DOM事件流。 主流浏览器的事件模型 早在2004前在HTML元素事件的订阅,发送,传播,处理模型上各浏览器实现并不一致,直到DOM Level3中规定后,多数主流浏览器才陆陆续续支持DOM标准的事件处理模型 — 捕获型与冒泡型。 目前除IE浏览器外,其它主流的Firefox, Opera, Safari都支持标准的DOM事件处理模型。IE仍然使用自己的模型,即冒泡型,它模型的一部份被DOM采用,这点对于开发者来说也是有好处的,只使用DOM标准,IE都共有的事件处理方式才能有效的跨浏览器。 冒泡型事件(Bubbling) 这是IE浏览器对事件模型的实现,也是最容易理解的,至少笔者觉得比较符合实际的。冒泡,顾名思义,事件像个水中的气泡一样一直往上冒,直到顶端。从DOM树型结构上理解,就是事件由叶子结点沿祖先结点一直向上传递直到根结点

事件绑定的几种方法

隐身守侯 提交于 2020-01-31 20:48:13
内联 HTML 属性法    最简便也最难以维护的方式就是通过标签的特定属性来添加事件,例如: <div onclick="alert('Ouch!')">click</div>   在这种情况下,只要该所在的区域被用户单击了,就会触发该标签的单击事件。与此同时,其 onclick 属性中的字符串就会被当做 JavaScript 代码来执行。尽管,这里并没有显式指定监听单击事件的函数,但相关环境在幕后已经为此创建了一个函数,函数的代码就等于我们为 onclick 属性设定的值。 元素属性法   关于单击事件函数,我们还有另一种编写方式,那就是将其设置为 DOM 元素节点的属性。例如: <div id="my-div">click</div> <script> var myelement = document.getElementById('my-div'); myelement.onclick = function() { alert('Ouch!'); alert('And double ouch!'); } </script>   事实上这也是一种更好的选择。因为这种方式可以帮助我们理清与相关JavaScript代码之间的关系。一般情况下。我们总是希望页面中的内容归 HTML、行为归 JavaScript、格式归 CSS,并且三者之间应该尽可能彼此独立,互不干扰。  

【JAVA入门】键盘监听器KeyListener

守給你的承諾、 提交于 2020-01-30 18:56:33
概述 KeyListener是用于接收键盘事件(击键)的监听器接口。 使用组件的 addKeyListener 方法将从该类所创建的侦听器对象向该组件注册。按下、释放或键入键时生成键盘事件。然后调用侦听器对象中的相关方法并将该 KeyEvent 传递给它。 方法 该接口的3个 方法 : void keyPressed(KeyEvent e) // 按下 某个键时调用此方法。 void keyReleased(KeyEvent e) // 释放 某个键时调用此方法。 void keyTyped(KeyEvent e) // 键入 某个键时调用此方法。 KeyEvent 表示组件中发生键击的事件。 当按下、释放或键入某个键时,组件对象将生成此低级别事件。该事件被传递给每一个 KeyListener 或 KeyAdapter 对象。 主要用到的方法: public int getKeyCode() // 返回与此事件中的键关联的 整数 keyCode。 public char getKeyChar() // 返回与此事件中的键关联的 字符 。 keyCode 是一个整数,代表了这个键的编码。 keyChar 是指这个键的值,例如某个字母、某个数字、某个符号。 一个keyCode不一定只对应一个按键,keyChar也不一定只对应一个按键。 例如,键盘上方的数字跟小键盘的数字

(Android小应用)电话监听器

痞子三分冷 提交于 2020-01-30 01:52:11
这是一个Android练手小项目,通过一个BroadcastReceiver广播接收者监听手机启动状态,实现开机启动。因为是电话监听器,所以我们不能让用户察觉,所以不能有软件界面,这是要点,不然也不叫监听器了,主要实现的功能有对所有语音通话进行录制并上传到网上,好了,不废话了,下面一步一步地写…… 首先,我们先来了解一下Service服务 Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。服务的开发比较简单,如下: 第一步:继承Service类 public class PhoneListenerService extends Service {...} 第二步:在AndroidManifest.xml文件中的<application>节点里对服务进行配置: <service android:name="PhoneListenerService"></service> 这里推荐使用eclipse图形化的界面添加 如上图所示,可以添加Service、Permission、BroadcastReceiver等,感兴趣可以自己试一下。 服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。

SpringBoot整合ActiveMQ(消息中间件)实现邮件发送功能

元气小坏坏 提交于 2020-01-29 06:43:47
1.ActiveMQ是什么鬼? ActiveMQ是一种开源的基于JMS(Java Message Servie)规范的一种消息中间件的实现,ActiveMQ的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。ActiveMQ常被应用与系统业务的解耦,异步消息的推送,增加系统并发量,提高用户体验。 a.AcitveMQ的数据传送流程 b.ActiveMQ的两种消息传递类型 (1)点对点传输,即一个生产者对应一个消费者,生产者向broke推送数据,数据存储在broke的一个队列中,然后消费者接受该条队列里的数据。 (2)基于发布/订阅模式的传输,即根据订阅话题来接收相应数据,一个生产者可向多个消费者推送数据。两种消息传递类型的不同,点对点传输消费者可以接收到在连接之前生产者所推送的数据,而基于发布/订阅模式的传输方式消费者只能接收到连接之后生产者推送的数据 2.代码实现(注意:本地需先安装 ActiveMQ ) (1)构建maven项目,pom文件中引入依赖: (2)application.yml文件内容配置: 这里是mq和mail的配置,需要注意不要有重复配置,我刚开始配置了两个spring导致mail配置没有生效,项目启动时总是报无法自动注解!!! (3)Email实体类的创建: (4)创建生产者: (5)创建消费者(监听器):

【七张图】彻底讲清楚ZooKeeper分布式锁的实现原理

陌路散爱 提交于 2020-01-28 12:19:12
一、写在前面 之前写过一篇文章( 《拜托,面试请不要再问我Redis分布式锁的实现原理》 ),给大家说了一下Redisson这个开源框架是如何实现Redis分布式锁原理的,这篇文章再给大家聊一下ZooKeeper实现分布式锁的原理。 同理,我是直接基于比较常用的 Curator 这个开源框架,聊一下这个框架对ZooKeeper(以下简称zk)分布式锁的实现。 一般除了大公司是自行封装分布式锁框架之外,建议大家用这些开源框架封装好的分布式锁实现,这是一个比较快捷省事儿的方式。 二、ZooKeeper分布式锁机制 接下来我们一起来看看,多客户端获取及释放zk分布式锁的整个流程及背后的原理。 首先大家看看下面的图,如果现在有两个客户端一起要争抢zk上的一把分布式锁,会是个什么场景? 如果大家对zk还不太了解,建议先百度一下,快速了解一些基本概念,比如zk有哪些节点类型等等。 参见上图。zk里有一把锁,这个锁就是zk上的一个节点。然后呢,两个客户端都要来获取这个锁,具体是怎么来获取呢? 咱们就假设客户端A抢先一步,对zk发起了加分布式锁的请求,这个加锁请求是用到了zk中的一个特殊的概念,叫做 “临时顺序节点”。 简单来说,就是直接在"my_lock"这个锁节点下,创建一个顺序节点,这个顺序节点有zk内部自行维护的一个节点序号。 比如说,第一个客户端来搞一个顺序节点,zk内部会给起个名字叫做

课程总结

对着背影说爱祢 提交于 2020-01-28 04:12:33
课程总结 大二第一个学期已经结束了,在此对本学期进行一个总结,本学期从对Java一无所知到表面理解,其中也是花了不少时间的,但也仅仅是表面上的了解,去年的c语言到今年的java这更加是我们对学习的一个丰富化,对知识的了解更多了,在以后的学习日子里,我会更加的对知识基础进行巩固。 一、Java基础程序设计 1、Java的数据类型可分为基本数据类型和引用数据类型两种。 2、布尔类型的变量,只有ture和false两个值。 3、数据类型的转换可分为“自动类型转换”与“强制类型转换”两种。 4、算术运算符的成员有加法运算符、减法运算符、乘法运算符、除法运算符、余数运算符。 5、if语句可依据判断的结果来决定程序的流程。 6、自增与自减运算符有着相当大的便利性,善用他们可提高程序的简洁程度。 8、括号是用来处理表达式的优先级的,也是Java的运算符。 9、占用较少字节的数据类型会转换成占用较多字节的数据类型;有short和int类型,则用int类型;字符类型会转换成short类型;int类型转换成float类型;布尔类型不能转换成其他的类型。 二、面向对象编程 1、构造方法可以为类中的属性初始化,构造方法与类名称相同,无法返回值声明,如果在类中没有明确的定义出构造方法,则会自动生成一个无参的声明都不做的构造方法,在一个类中的构造方法可以重载,但是每个类都至少有一个构造方法。 2

5. Node.js事件触发器

a 夏天 提交于 2020-01-28 02:10:34
事件触发器events 的使用方法 eventEmitter.on(eventName, listener) 注册监听器 eventName | 事件名称 listener 回调函数。 eventEmitter.emit(eventName[, ...args]) 触发事件 eventName | 事件名称 ...args 参数 eventEmitter.once(eventName, listener) 绑定的事件只能触发⼀次 emitter.removeListener(eventName,listener) 从名为 eventName 的事件的监听器数组中移 除指定的 listener 。 emitter.removeAllListener([eventName]) 移除全部监听器或指定的 eventName 事件的监听 器 util 常用工具 util.callbackify(original) 将 async 异步函数(或者一个返回值为 Promise 的函数)转换成遵 循异常优先的回调风格的函数 util.promisify(original) 转换成 promise 版本的函数 util.types.isDate(value) 判断是否为 date 数据 来源: CSDN 作者: 静静七分醉 链接: https://blog.csdn.net/m0_37657725