JavaWeb学习总结-06 Listener 学习和使用
一 Listener
当Web应用在Web容器中运行时,Web应用内部会不断地发生各种事件:如Web应用被启动、Web应用被停止、用户session开始、用户session结束、用户请求到达等,可以用Servlet API提供的监听器来监听Web应用的内部事件,从而允许当Web内部事件发生时回调事件监听器内的方法。应用程序完全可以采用一个监听器类来监听多种事件,只要让该监听器实现类同时实现多个监听器接口即可。
1 常用的Web事件监听器接口
(1)ServletContextListener:监听Web应用的启动和关闭
包含的方法:
- contextInitialized(ServletContextEvent sce):启动Web应用时系统调用Listener的该方法,可通过ServletContextEvent取得该应用的ServletContext实例(sce.getServletContext())
- contextDestroyed(ServletContextEvent sce):关闭Web应用时系统调用Listener的该方法
(2)ServletContextAttributeListener:监听ServletContext范围(application)内属性的改变。
包含的方法:
- attributeAdded(ServletContextAttributeEvent event):当把一个属性存入application范围时触发该方法,可通过形参event.getName和event.getValue获取添加的属性名和属性值
- attributeRemoved(ServletContextAttributeEvent event):当把一个属性从application范围删除时将触发该方法,可通过形参event.getName和event.getValue获取删除的属性名和属性值
- attributeReplaced(ServletContextAttributeEvent event):当程序替换application范围内的属性时将触发该方法,可通过形参event.getName和event.getValue获取替换后的属性名和属性值
(3)ServletRequestListener:监听用户请求
包含方法:
- requestInitialized(ServletRequestEvent sre):用户请求到达、被初始化时触发该方法,可通过形参sre.getServletRequest()获取request
- requestDestroyed(ServletRequestEvent sre):用户请求结束、被销毁时触发该方法
(4)ServletRequestAttributeListener:监听ServletRequest范围(request)内属性的改变
(5)HttpSessionListener:监听用户session的开始和结束
包含方法:
- sessionCreated(HttpSessionEvent se):用户与服务器的会话开始、创建时触发该方法,通过形参se.getSession()获取session,
- sessionDestroyed(HttpSessionEvent se):用户与服务器的会话断开、销毁时触发该方法
(6)HttpSessionAttributeListener:监听HttpSession范围(session)内属性的改变
2 Servlet监听器的分类
在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为ServletContext,HttpSession和ServletRequest这三个域对象
Servlet规范针对这三个对象上的操作,又把多种类型的监听器划分为三种类型:
- 监听域对象自身的创建和销毁的事件监听器。
- 监听域对象中的属性的增加和删除的事件监听器。
- 监听绑定到HttpSession域中的某个对象的状态的事件监听器。
2.1 监听HttpSession域对象的创建和销毁
HttpSessionListener 接口用于监听HttpSession对象的创建和销毁
- 创建一个Session时,激发sessionCreated (HttpSessionEvent se) 方法
- 销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se) 方法。
例子 编写一个MyHttpSessionListener类,实现HttpSessionListener接口,监听HttpSession对象的创建和销毁
package com.mobile.listener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MyHttpSessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent se) {
System.out.println(se.getSession() + " 创建了!!");
}
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("session销毁了!!");
}
}
web.xml
<listener>
<listener-class>com.mobile.listener.MyHttpSessionListener</listener-class>
</listener>
<session-config>
<!--配置HttpSession对象的1分钟之后销毁 -->
<session-timeout></session-timeout>
</session-config>
此处配置session的过期时间,但session的管理都是有容器(或中间件,如tomcat、jboss等),你将你的java代码放在什么容器里面运行,他就接管了session,session一般不用自己管理的,在tomcat中的session的默认超时时间为30分钟,在项目中的web.xml里面可以自由设置session超时时间。
编写网页回话计数器页面:
<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<html>
<head>
<title>网页计数器</title>
<meta charset="utf-8"/>
<head>
<body>
<%
if (session.getAttribute("counter") == null)
session.setAttribute(");
else {
String strnum = null;
strnum = session.getAttribute("counter").toString();
;
icount = Integer.valueOf(strnum).intValue();
icount++;
session.setAttribute("counter", Integer.toString(icount));
}
%>
您是第<%=session.getAttribute("counter")%>位访问者!
</body>
</html>
JavaWeb学习总结-06 Listener 学习和使用的更多相关文章
- JavaWeb学习总结-04 Servlet 学习和使用
一 Servlet 1 Servlet概念 Servlet时运行在服务器端的Java程序. Servlet的框架核心是 javax.servlet.Servlet 接口. 所有自定义的Servlet都 ...
- 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记
机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习作者:米仓山下时间: ...
- iOS学习笔记06—Category和Extension
iOS学习笔记06—Category和Extension 一.概述 类别是一种为现有的类添加新方法的方式. 利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inher ...
- 20145219 《Java程序设计》第06周学习总结
20145219 <Java程序设计>第06周学习总结 教材学习内容总结 InputStream与OutputStream 串流设计 1.串流:Java将输入/输出抽象化为串流,数据有来源 ...
- 学习笔记:CentOS7学习之二十:shell脚本的基础
目录 学习笔记:CentOS7学习之二十:shell脚本的基础 20.1 shell 基本语法 20.1.1 什么是shell? 20.1.2 编程语言分类 20.1.3 什么是shell脚本 20. ...
- 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除
目录 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除 18.1 centos6系统启动过程及相关配置文件 18.1.1 centos6系统启动过程 18.1.2 centos6启 ...
- 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用
目录 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用 16.1 LVM的工作原理 16.1.1 LVM常用术语 16.1.2 LVM优点 16.2 创建LVM的基本步骤 16.2 ...
- 如何学习FPGA?FPGA学习必备的基础知识
如何学习FPGA?FPGA学习必备的基础知识 时间:2013-08-12 来源:eepw 作者: 关键字:FPGA 基础知识 FPGA已成为现今的技术热点之一,无论学生还是工程师都希望 ...
- 强化学习之 免模型学习(model-free based learning)
强化学习之 免模型学习(model-free based learning) ------ 蒙特卡罗强化学习 与 时序查分学习 ------ 部分节选自周志华老师的教材<机器学习> 由于现 ...
随机推荐
- 从.NET的宠物商店到Android MVC MVP
1 一些闲话 记得刚进公司的时候,我们除了做常规的Training Project外,每天还要上课,接受各种技术培训和公司业务介绍.当时第一次知道QA和SQA的区别.Training Project时 ...
- Entity Framework与ADO.Net及NHibernate的比较
Entity Framework 是微软推荐出.NET平台ORM开发组件, EF相对于ado.net 的优点 (1)开发效率高,Entity Framework的优势就是拥有更好的LINQ提供程序. ...
- [HDOJ5439]Aggregated Counting(乱搞)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5439 题意:按规则构造一个数列a a(1)=1 a(2)=2 a(2)=2 -------> 写两个 ...
- innerHeight,clientHeight,offsetHeight,scrollWidth等的区别和用法
要理解这几个属性,首先要搞明白body,documentElement的区别 1.body是DOM对象里的body子节点,即<body>标签2.documentElement是整个节点树的 ...
- JavaScript数独求解器
<html> <head> <style type="text/css"> .txt { width: 50; height: 50; back ...
- 如何解决xml在eclipse下的拼写报错
进入preferences——键入“spelling”——看到勾选框:Enable spelling check,去掉勾选框,可消除eclipse下的拼写错误
- android 获取时间
首先,先说下java下可以正常使用的方法: import java.text.DateFormat; import java.text.SimpleDateFormat; import java.ut ...
- 屠龙之路_大杀技之倚天屠龙_TenthDay
惊天变! alhpa恶龙终于现身了!随之出现是屠龙天团的少年们多时不见的公主.alpha恶龙虽然元气大伤.意识不清,但是它庞大的身躯只要稍微动弹,足以重创在场的所有少年,以及现在还被恶龙牢牢囚在手心的 ...
- XML的总结学习
XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. HTML 被设计用来显示数据. (一切都是为了数据:采集.整理.存储.传输.显 ...
- hdu4990 矩阵
C - Reading comprehension Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...