Servlet监听器详解及举例
监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。
监听器原理
监听原理
1、存在事件源
2、提供监听器
3、为事件源注册监听器
4、操作事件源,产生事件对象,将事件对象传递给监听器,并且执行监听器相应监听方法
监听器典型案例:监听window窗口的事件监听器
例如:swing开发首先制造Frame**窗体**,窗体本身也是一个显示空间,对窗体提供监听器,监听窗体方法调用或者属性改变:
*
关闭窗体时,调用windowListener 的windowclosing() , 传递windowEvent参数,表示窗体关闭事件对象
*
事件对象操作事件源,获得事件源状态
自定义监听器
以上内容可以用下图解释:
通过person.addPersonListener(new PersonListener(){})使事件源与监听器间产生联系。
事件源(在事件源方法中创建事件对象):
监听器(参数是事件对象)
事件对象(通过事件对象可以获得事件源)
测试方法
对上的匿名类补充:匿名内部类的作用是创建一个实现接口的匿名类对象,含义是创建一个继承自PersonListener的匿名类的对象),通过new表达式返回的引用被自动向上转型为对PersonListener的引用
Servlet监听器
(不需要配置,但是监听器仍需要进行注册)
在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为
ServletContext, HttpSession 和
ServletRequest 这三个域对象。
Servlet监听器分为三大类
1、数据域对象创建和销毁监听器
2、数据域对象和属性变更监听器
3、绑定到 HttpSession 域中的某个对象的状态的事件监听器
(一)数据域对象创建销毁监听器 — 监听三个与对象 (三个监听器)
1、ServletContextListener : 用来监听ServletContext对象的创建和销毁
监听创建
监听销毁
*
ServletContext对象代表全局唯一对象,每个web工程会产生一个ServletContext,服务器启动创建,服务器关闭销毁
编写监听器
步骤一:编写类实现特定监听器接口
步骤二:注册监听器,不是通过事件源,而是在web.xml 进行配置
(监听器和Servlet、Filter不同,不需要url配置,监听器执行不是由用户访问的,监听器
是由事件源自动调用的)
servletContext域对象何时创建和销毁:
- 创建:服务器启动针对每一个web应用创建servletcontext
- 销毁:服务器关闭前先关闭代表每一个web应用的servletContext
ServletContextListener主流应用:
第一个:在服务器启动时,对一些对象进行初始化,并且将对象保存ServletContext数据范围内(因为在监听器内可以获得事件源对象)
— 全局数据
- 例如:创建数据库连接池
第二个:对框架进行初始化 例如:Spring框架初始化通过ServletContextListener
(因为监听器代码在服务器启动时执行)
- Spring框架(配置文件随服务器启动加载) org.springframework.web.context.ContextLoaderListener
第三个:实现任务调度,启动定时程序 (Timer、TimerTask) 使一个程序,定时执行
比如说每天晚上十二点给过生日的人进行生日祝福,中国移动对账户进行同步,会在服务器使用较少的时间,例如凌晨之类,启动一段程序,进行同步
java.util.Timer 一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。
Timer提供了启动定时任务方法 schedule
* schedule(TimerTask task, Date firstTime,
long period) 用来在指定一个时间启动定时器,定期循环执行
* schedule(TimerTask task, long delay,
long period) 用来在当前时间delay多少毫秒后启动定时器
停止定时器,timer.cancel取消任务
2、HttpSession 数据对象创建和销毁监听器 —– HttpSessionListener
监听Session对象创建
监听Session对象销毁
Session何时创建:request.getSession()
Session何时销毁:关闭服务器,Session过期,session.invalidate
*Session过期时间通过web.xml配置(tomcat配置文件中),默认时间30分钟
配置:
HttpSession监听器
现有如下JSP页面:
1.jsp
2.jsp
访问1.jsp时会执行监听器原因:因为如果观察jsp的源码,封闭式英语培训jsp会被预处理成.java代码(在tomcat中work文件夹下,参见http://blog.csdn.net/megustas_jjc/article/details/53462025),我们打开这个.java代码的源码:
其中的getSession的实现实际就是request.getSession()
3、HttpServletRequest对象的创建和销毁监听器 —-
ServletRequestListener
—-监听request对象创建
监听request对象销毁
Request何时创建:请求发起时创建
Request何时销毁:响应结束时销毁
例如:每次刷新界面都会创建销毁一次
注意(创建销毁次数由请求次数决定):
使用forward —-
request创建销毁几次 —– 一次
使用sendRedirect —- request创建销毁两次
(两次请求)
(二)ServletContext/HttpSession/ServletRequest中保存数据
创建、修改、移除监听器
ServletContextAttributeListener 监听ServletContext中属性变化
HttpSessionAttributeListener 监听HttpSession中属性变化
ServletRequestAttributeListener 监听ServletRequest中属性变化
attributeAdded 监听属性添加 —- 当数据范围对象没有该属性,第一次添加时调用执行
attributeRemoved 监听属性移除 —- 从一个数据范围对象删除一个已经存在属性执行
attributeReplaced 监听属性替换 —–
当一个数据范围已经存在一个属性,向数据范围添加相同名称属性触发替换方法
例如,此处我们用HttpSessionAttributeListener举例(ServletContextListener与ServletRequestListener同理):
JSP页面
监听器
注册
注意:获得返回值通过session.getAttribute(se.getName())
(三)被绑定Session对象,自我状态感知监听器
保存在 Session 域中的对象可以有多种状态:绑定到 Session 中;从 Session
域中解除绑定;随 Session 对象持久化到一个存储设备中(钝化);随 Session
对象从一个存储设备中恢复(活化)
被存放Session的Java对象,感知自我四种状态变化
1、被绑定
2、被解除绑定
3、被钝化 —– 数据从内存序列化硬盘
4、被活化 —- 数据从硬盘重新加载回内存
HttpSessionBindingListener实现接口的java对象,感知自己被绑定到Session或者从Session中解除绑定
HttpSessionActivationListener实现接口的java对象,感知从内存被钝化硬盘上,雅思托福的区别从硬盘活化到内存中
实现这两个接口的类不需要 web.xml
文件中进行注册,都是由Session自主完成的,例如在存储对象的时候会自动调用绑定
HttpSessionBindingListener
* 绑定对象方法 —-
* 解除绑定方法
—–、当Session对象销毁时,当中所有绑定对象解除绑定
JSP页面:
HttpSessionActivationListener
* 感知对象被活化
* 感知对象被钝化
使用场景:Session保存数据,很长一段时间没用,但是不能销毁Session对象,不想占用服务器内存资源 —–
钝化(将服务器内存中数据序列化硬盘上)
JSP界面
读取数据
注意
钝化和活化应该由tomcat服务器 自动进行 —- 配置tomcat
配置context有几个位置?
1、tomcat/conf/context.xml 对所有虚拟主机 所有web工程生效
2、tomcat/conf/Catalina/localhost/context.xml 对当前虚拟主机所有web工程生效
3、当前工程/META-INF/context.xml 对当前工程有效
钝化后 it315目录在哪里?在“tomcat/work/Catalina/localhost/项目名”目录中
java对象如果想实现序列化,需要实现Serializable接口(因此上述Bean2实现Serializable接口,才可以被钝化,并之后进行活化并读取)
Servlet监听器详解及举例的更多相关文章
- Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]
Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...
- Java程序员从笨鸟到菜鸟之(二十一)java过滤器和监听器详解 【转】
过滤器 1.Filter工作原理(执行流程) 当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请 ...
- java过滤器和监听器详解
过滤器 1.Filter工作原理(执行流程) 当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请求 ...
- 监听器(Listener)详解及举例
概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行. 监听器组成要素: 事件源:事 ...
- javaweb之监听器详解
在servlet中定义了多种类型的监听器,他们用于监听事件源分别是servletContext,httpsession,servletrequest 这三个域对象. servlet中监听器主要有三类: ...
- Tomcat7配置及其servlet调用详解
Tomcat 1 Tomcat简介 Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成 ...
- Javaweb之 servlet 开发详解1
1.1 Tip:Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个 ...
- Filter(过滤器)与Listener(监听器)详解
11.Filter(重点) Filter:过滤器,用来过滤网站的数据: 处理中文乱码 登陆验证... Filter开发步骤: 导包 编写过滤器 导包不要错 实现Filter接口,重写对应的方法即可 p ...
- Servlet开发详解
一.Servlet简介 Servlet是sun公司提供的一门用于动态web资源的技术 sun公司在其API中提供了一个Servlet接口,用户若想开发一个动态web资源,需要完成两个步骤: 编写一个J ...
随机推荐
- Codeforces Round #735 (Div. 2) 题解
比赛地址:https://codeforces.com/contest/1554. 只有 ABCD 的题解,E 不会. A 答案是 \(\max_i\{a_ia_{i+1}\}\).证明:(反证)如果 ...
- intouch/ifix嵌入视频控件2(报警视频联动初步思路)
在项目中有朋友遇到类似的需求,ifix中嵌入视频,并实现报警与视频的联动功能.诸如,重要设备启动时,摄像头自动弹窗,并持续一段时间自动弹窗关掉:设备故障时,摄像头自动截图,录像一段时间存储:设备停止时 ...
- Redis挂了,流量把数据库也打挂了,怎么办?
你好呀,我是歪歪. 是这样的,前几天有个读者给我发消息,说面试的时候遇到一个场景题: 他说他当时,一时间竟然找不到回答问题的角度,感觉自己没有回答到点子上. 我仔细想了一下,确实是感到这个问题有一丝丝 ...
- bootstrap table记录一下
$(function() { // 刷新 talbe function refresh() { $("#table").bootstrapTable('refresh'); } $ ...
- azure bash: kubectl: command not found
[root@***]# az aks install-cliDownloading client to "/usr/local/bin/kubectl" from "ht ...
- k8s之Service详解-Service使用
实验环境准备 在使用service之前,首先利用deployment创建出3个pod,注意要为pod设置app=nginx-pod的标签 创建deployment.yaml,内容如下 apiVersi ...
- 为什么npm install 经常失败
Hello 您好,我是大粽子.深耕线上商城的攻城狮(程序员)一枚. 前言 这段时间真的是忙,最近能抽时间搞搞大家在自己环境中遇到的各种问题了,我呢就是见不得我的代码在你的电脑运行不起来的.就像姜子牙睡 ...
- 安装MySQL详细说明
安装MySQL详细说明 下载后得到zip压缩包 解压到自己的安装目录 添加环境变量 我的电脑->属性->高级->环境变量 选择PATH,在其后面添加:你的mysql安装文件下面的bi ...
- Java面板Panel的使用,监听窗口关闭事件
面板Panel的使用 待解决问题: 1.设计模式:适配器模式 2.frame.setLayout(null); package GUI; import javax.swing.*; import ja ...
- Spring MVC+javamail实现邮件发送
Spring MVC+javamail实现邮件发送 开启邮箱的POP3/SMTP服务(这里以QQ邮箱举例) 设置 --> 账户 -- > 开启POP3/STMP服务,然后得到一个授权码. ...