-
【监听器篇】2.监听request、session、ServletContext 对象存放的数据变化情况
2018-05-15 10:46:32存放数据指的是这三个对象在工程中setAttribute(),removeAttribute()的时候,我们的监听器就会知道,然后在对应的方法中执行相应的操作。 以下是定义这三个对象需要实现的接口: 监听器的接口----监听对象...1.工程说明
在前一阶段介绍了监听器监听我们这三个对象创建和销毁的监听事件,现在我们要监听这三个对象存放属性的时候的一个监听事件。
存放数据指的是这三个对象在工程中setAttribute(),removeAttribute()的时候,我们的监听器就会知道,然后在对应的方法中执行相应的操作。
以下是定义这三个对象需要实现的接口:
监听器的接口----监听对象
ServletContextAttributeListener----ServletContext对象中的属性的变化情况
HttpSessionAttributeListener----session对象中的属性的变化情况
ServletRequestAttributeListener----request对象中的属性的变化情况实现以上监听器需要重写的方法都一样:添加 、删除 、 修改的方法名称全部一致
当我们在代码中添加,删除,修改属性的时候,监听器都会收到信息,然后执行相应的代码。
这三个对象需要实现的方法都一样,行为也差不多,所以在此演示session对象添加,删除,替换属性时,我们监听器所做的操作。
基本步骤:
1.定义一个实现HttpSessionAttributeListener的监听器
2.采用注解的方式注册监听器
3.在实现的三个方法内向控制台打印相应的信息4.在jsp中写一段代码:在session对象中添加,修改,替换属性
2.定义监听器MyHttpSessionAttributeListener
package listener; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; /* * 2018.5.15 * @author Dragon * 监听session属性变化的监听器 */ @WebListener public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener { @Override public void attributeAdded(HttpSessionBindingEvent arg0) { System.err.println("MyHttpSessionAttributeListener----------attributeAdded"); } @Override public void attributeRemoved(HttpSessionBindingEvent arg0) { System.err.println("MyHttpSessionAttributeListener----------attributeRemoved"); } @Override public void attributeReplaced(HttpSessionBindingEvent arg0) { System.err.println("MyHttpSessionAttributeListener----------attributeReplaced"); } }
在上面的代码中,我们在相应的方法中打印了相应的信息。同时采用注解的方式对我们的监听器进行了注册。
3.给session对象存放数据
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <% //添加数据 session.setAttribute("test", "Dragon"); //替换数据 session.setAttribute("test", "long"); //删除数据 session.removeAttribute("test"); %>
4.部署工程并运行
运行结果:
MyHttpSessionAttributeListener----------attributeAdded
MyHttpSessionAttributeListener----------attributeReplacedMyHttpSessionAttributeListener----------attributeRemoved
ok了,从上面可以发现当我们session对属性执行相应的操作的时候,监听器会知道并向控制台打印相应的信息。同理,监听这两个对象request,ServletContext需要执行的操作也一样,不一样的是实现的接口不一样。
5.下一阶段的学习
到目前为止,学习了两类监听器,分别是监听对象创建和销毁的监听器和监听对象存放数据的监听器,接下来要学习的是:监听session中保存的javabean状态的监听器。
加油~继续前行!
-
expandableListView 怎么把后台的数据存放起来
2016-10-20 08:29:12* 获取指定组中的数据 * * @param groupPosition * @return * @see android.widget.ExpandableListAdapter#getGroup(int) */ @Override public Object getGroup(int groupPosition) { return group_list.... -
clojure 使用的技术 eventsourcing 什么是事件溯源(Event Sourcing)
2016-10-31 18:41:37什么是事件溯源(Event ...而事件溯源则相反,不是保存对象的最新状态,而是保存这个对象所经历的每个事件,所有的由对象产生的事件会按照时间先后顺序有序的存放在数据库中。可以看出,事件溯源的这种做法是更符合事什么是事件溯源(Event Sourcing)
一个对象从创建开始到消亡会经历很多事件,以前我们是在每次对象参与完一个业务动作后把对象的最新状态持久化保存到数据库中,也就是说我们的数据库中的数据是反映了对象的当前最新的状态。而事件溯源则相反,不是保存对象的最新状态,而是保存这个对象所经历的每个事件,所有的由对象产生的事件会按照时间先后顺序有序的存放在数据库中。可以看出,事件溯源的这种做法是更符合事实观的,因为它完整的描述了对象的整个生命周期过程中所经历的所有事件。那么,事件到底如何影响一个领域对象的状态的呢?很简单,当我们在触发某个领域对象的某个行为时,该领域对象会先产生一个事件,然后该对象自己响应该事件并更新其自己的状态,同时我们还会持久化在该对象上所发生的每一个事件;这样当我们要重新得到该对象的最新状态时,只要先创建一个空的对象,然后将和该对象相关的所有事件按照事件发生先后顺序从先到后再全部应用一遍即可还原得到该对象的最新状态,这个过程就是所谓的事件溯源;
另一方面,因为是用事件来表示对象的状态,而事件是只会增加不会修改。这就能让数据库里的表示对象的数据非常稳定,不可能存在DELETE或UPDATE等操作。因为一个事件就是表示一个事实,事实是不能被磨灭或修改的。这种特性可以让领域模型非常稳定,在数据库级别不会产生并发更新同一条数据的问题;其实CAP定理之所以做不到,根本原因也是由于数据可以被修改;现在通过事件溯源,我们实现CAP或许就成为了可能;
我们可以看到,基于这样的设计,领域对象的状态完全是由事件驱动的。不仅如此,事件还可以被事件总线分发出去,通知领域模型外的一切事件响应者发生了什么,基于这种Publish-Subscribe的通信模式,我们可以最大限度的实现系统的松耦合。
-
VO变量对象
2019-05-25 13:06:55如果变量是一个对象,实际上变量中存放的是对象的地址 概念 执行上下文:某个函数或全局代码的执行环境,该环境中包含执行代码需要的所有信息。 可以简单的理解为:执行上下文是一个对象,对象中包含了执行代码需要...执行上下文
JS原理:原型链、执行上下文、事件循环
预备知识
- 栈
栈是类似于数组的一种数据结构。
- 对象引用
如果变量是一个对象,实际上变量中存放的是对象的地址
概念
执行上下文:某个函数或全局代码的执行环境,该环境中包含执行代码需要的所有信息。
可以简单的理解为:执行上下文是一个对象,对象中包含了执行代码需要的信息。
当执行一个函数时,需要建立执行上下文,建立之后,才正是开始执行。
call stack(执行上下文栈):组织管理程序运行过程中的执行上下文
执行上下文的内容
- VO:variable object,变量对象,存放的是函数或全局代码执行过程中需要用到的局部变量
- scope:作用域
- this
vo是一个对象,调用函数或执行全局代码时创建,创建一个vo,需要经过三步:
- 确定函数形参的值(包括arguments对象)
在函数中寻找数据时,会先从vo中查找,如果vo中不存在,再使用外层数据
AO: active object,执行栈顶部上下文的vo
创建vo对象
- 确定形参值
- 确定函数中所有的函数字面量声明
- 该函数必须是字面量声明,字面量声明提取到vo后,可以认为该声明失效
- 如果当前vo中出现同名属性,直接覆盖
- 确定函数中所有的变量声明(var),将其提取到上下文中,值为undefined
- 如果当前vo中出现同名属性,忽略
编译:将一种语言代码,翻译成另外一种语言
-
Unity3d 面向对象设计思想(四)(游戏背包的处理i)
2014-04-11 14:22:29游戏背包,在Unity3d中,个人觉得最好的解决方法是能与对象联系起来,比如,点击一个按钮,显示一个2D UI界面,然后 根据数据配置读取物品相关的信息。使用NGUI实现背包也可以事件分发来系统,使用NGUITools发送...游戏背包,在Unity3d中,个人觉得最好的解决方法是能与对象联系起来,比如,点击一个按钮,显示一个2D UI界面,然后
根据数据配置读取物品相关的信息。使用NGUI实现背包也可以使用NGUI的事件分发来系统,使用NGUITools发送广播到Root节
点,将条目添加到一个UIScrollView中,这样的好处是可以将背包显示在屏幕上,方便UI制作,再者背包是属于一种
在游戏中经常要用到的功能,在主界面一直存放在内存中。
a.写一个类来标示当前背包格子的唯一表示
public void NotifyBagItem () { if(!string.IsNullOrEmpty(item1)) NGUITools.Broadcast("OnBagItemClick", item1); }
b.标示的作用是为了点击格子的判定,是否有道具在当前背包格子里面用这样的思想来写背包,缺点是背包格子是必须是限的,暂时还没有实现背包格子逻辑的判定
明天放假,暂时还没什么好的解决方法,但我想用的是NGUI的功能来实现
:)
-
数据库对象中英文介绍
2019-10-03 16:55:54存放具体数据的最大的逻辑对象,通常按照需求将同一项目所属的数据统一存放在一个数据库中,也可以创建多个数据库 数据库管理系统dbms(database management system) 是一种操纵和管理数据库的大型软件,用于... -
localStorage取不出JSON对象
2019-04-20 23:09:08我希望页面在显示对象集合列表时,为每个列表增加点击事件,点击后将对象数据传入下个页面,故需要使用localStorage存放对象。 首先是回调函数中拼接表格,并为每一列增加点击事件,传参为经过JSON.stringify串化的... -
变量与对象
2010-06-01 11:07:37它只是程序中用来临时存放数据。 对象是我们要进行研究的任何事物,不仅能表示具体的事物,还能表示抽象的规则、计划或事件。严格来说,对象也是变量的一种,是特定类型的变量。 变量可以用来存储对象的... -
MySQL学习笔记 -- 数据表的基本操作
2016-11-16 16:55:00数据库是一个可以存放数据库对象的容器,数据库对象包括:表、视图、存储过程、函数、触发器、事件。其中,表是数据库最基本的元素,是其他数据库对象的前提条件。 表中的一列称为一个字段,一行称为一条记录。... -
事件溯源Event Sourcing
2018-08-12 12:08:57而事件溯源则相反,不是保存对象的最新状态,而是保存这个对象所经历的每个事件,所有的由对象产生的事件会按照时间先后顺序有序的存放在数据库中。可以看出,事件溯源的这种做法是更符合事实... -
01. 认识内存空间(数据的存储),搞懂浅拷贝与深拷贝
2019-02-18 15:32:48一. 内存空间的分配原理 参考文章 基础数据类型:number,string,boolean,null,underfined ...而引用数据类型是将值存放在堆内存中,存储在变量对象中的是指向堆内存的地址。 不允许直接访问... -
运行时数据区、内存模型详解以及常见的问题
2019-11-23 14:08:34博主有话说:弄清jvm的运行时数据区对写java程序非常的有帮助,特别是高并发情况下对事件的处理。了解整个类的加载、运行及销毁过程,才能深入了解面向对象的含义,写出更加优雅、高质量的代码。 最后配图,类加载... -
有IBM Guardium 看清谁动了我的数据
2017-07-03 10:40:00就在上个月的3日,土耳其爆发重大数据泄露事件,近5000W土耳其公民的个人信息牵涉其中,除此以外还有越来越多的数据泄露事件发生,安全从业者意识到,是时候采取一些行动了。 相比网络安全、系统安... -
Flex事件机制二
2012-07-02 12:24:34三: dispatcherEvent EventDispatcher 是派发事件的武器,经它派发的事件对象必须是Event类型或者Event的子类。 Event对象中包含目标对象存放的数据,这些数据都成为Event的属性,以供侦听器使用: Event... -
Vue源码详细解析(一)--数据的响应化
2020-11-21 02:42:13设置getter/setter是可以监听对象的,所以对于数组元素还是要遍历一下的。如果不是对象,比如a[0]是字符串、数字?那就没办法了,但是vue为数组提供了$set和$remove</a>,方便我们... -
CQRS与事件溯源概念
2014-01-29 13:03:47而事件溯源则相反,不是保存对象的最新状态,而是保存这个对象所经历的每个事件,所有的由对象产生的事件会按照时间先后顺序有序的存放在数据库中。可以看出,事件溯源的这种做法是更符合事实观的,因为它完整的描述... -
事件溯源(Event Sourcing)
2014-05-13 15:44:59而事件溯源则相反,不是保存对象的最新状态,而是保存这个对象所经历的每个事件,所有的由对象产生的事件会按照时间先后顺序有序的存放在数据库中。可以看出,事件溯源的这种做法是更符合事实观的,因为它完整的描述... -
事件溯源【Event Sourcing】和QRS
2014-01-29 13:00:45什么是CQR一个对象从创建开始到消亡会经历很多事件,以前我们是在每次对象参与完一个业务动作后把对象的最新状态持久化保存到数据库中,也就是说我们的数据库中的数据是反映了对象的当前最新的状态。而事件溯源则... -
C#第三章 对象和类型
2011-03-02 18:01:00第三章 对象和类型 1. 类和结构的区别: a.... 类成员 类中的数据(字段、常量、事件)和函数(方法、属性、构造函数和终结器、运算符以及索引器)称为类的成员 (1 -
用c描述的数据结构演示软件
2012-07-24 13:31:25在演示算法之前,需先在弹出的小窗口中输入线性表的数据元素及算法参数 i(插入或删除的位置)和 b(被插的数据元素)的值。顺序表的图示窗口在演示屏的上方,链表的图示窗口在左侧。 2. 有序表的操作 算法演示屏... -
封装on,emit,off事件
2019-03-09 15:53:00事件绑定是一个对象绑定多个事件函数,因此是一对多的模式,即观察者模式,数据类型采用对象 封装on: 思路:创建一个事件仓库存放事件: 判断当前事件是否存在,不存在,初始化一下,然后将回调函数push到... -
事件循环机制EventLoop
2020-05-19 21:48:47堆表示一大块非结构化的内存区域,对象,数据被存放在堆中 2、栈(Stack) 栈在javascript中又称执行栈,调用栈,是一种后进先出的数组结构, Javascript 有一个 主线程(main thread)和 调用栈(或执行栈call-stack... -
Vue-1-实例、渲染、监听事件
2020-11-01 19:31:47一、概念 渐进的意思是我们可以用vue只写一个...返回对象的函数(推荐,因为一开始简单的可以用,到后面复杂项目对象就用不了了),实际上就必须是对象 :function可省略 需要用到和保存的数据继续在data里存就好 -
微信小程序学习(三)——绑定事件
2020-07-14 15:52:14input标签是输入标签,可以获取用户在页面上的输入,绑定一个input事件获取数据e,而input事件的名称是可以自己在JS文件的Page字段命名的。格式bindinput="函数名" 1)需要给input标签绑定input事件,绑定关键字... -
python的自省与反射
2020-05-30 16:40:461.反射自省的概念 自省:自省就是能够获得自身的结构和方法,给开发者可以灵活的调用,给定一个对象,返回该对象的所有属性和函数列表,或给定对象和该对象的...类属性:属性就是一个对象的数据或者函数元素 ... -
Vue2.x学习三:事件处理&生命周期钩子
2018-06-03 11:22:05这里,我们要补充一下在之前的学习中,我们说到了在构建new Vue()实例对象中,我们往里面写了el和...我们知道,el是Vue实例的作用对象,data定义所有页面中的数据。而methods则存放我们定义的所有的事件处理函数,...
-
java spring上传文件到服务器_springmvc实现跨服务器文件上传功能
-
vue3从0到1-超详细
-
java sql package_java.sql
-
自动化测试Python3+Selenium3+Unittest
-
java spring 环境搭建_SpringMVC环境搭建(一)
-
java spring启动和终止_详解SpringBoot应用服务启动与安全终止
-
MySQL 高可用工具 heartbeat 实战部署详解
-
spfd54124av02_0216_foxlink.pdf
-
后台管理-源码
-
SPFD5408A_V0.5_20070626.pdf
-
OpenSSL SSL_connect: Connection was reset in connection to github.com:443
-
java 遍历zip文件_[Java] 遍历zip内的数据,逐项复制流来生成新的zip文件的范例(可用于替换zip内的文件)...
-
龙芯生态应用开发基础:C语言精要
-
2021年 系统分析师 系列课
-
NFS 实现高可用(DRBD + heartbeat)
-
intellij创建java项目_intellij idea如何创建java项目?建立java项目方法介绍
-
【布道者】Linux极速入门
-
java面试准备什么_Java面试题准备
-
工程制图 AutoCAD 2012 从二维到三维
-
shopping_cart:智能手表的购物车项目-源码