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) ------ 蒙特卡罗强化学习 与 时序查分学习 ------ 部分节选自周志华老师的教材<机器学习> 由于现 ...
随机推荐
- 化茧成蝶,开源NetWorkSocket通讯组件
前言 前后历时三年,期间大量参考.Net Framework和Asp.net MVC源代码,写写删删再重构,组件如今更新到V1.5.x了.从原来的丑小鸭,变成今天拥有稳定和强大的tcp协议支持基础层, ...
- 开发WP版本的大菠萝英雄榜
前言 想当年Team有无数人在玩大菠萝,我被忽悠进来做肉盾,选了蛮子,从1.0开始,经历了103.105.108.2.0.2.1.这个游戏对我最大的帮助是学习了不同的技术,比如XAML.比如xcode ...
- 【JavaScript】 JSON
1.json 一共就这么几种数据类型 ①,number 和JavaScript的number完全一样 ②,boolean 就是JavaScript的true和false ③,stri ...
- ElasticSearch入门系列(三)文档,索引,搜索和聚合
一.文档 在实际使用中的对象往往拥有复杂的数据结构 Elasticsearch是面向文档的,这意味着他可以存储整个对象或文档,然而他不仅仅是存储,还会索引每个文档的内容使之可以被搜索,在Elastic ...
- error_reporting()
定义和用法 error_reporting() 设置 PHP 的报错级别并返回当前级别. 语法 error_reporting(report_level) 如果参数 level 未指定,当前报错级别将 ...
- SVN常见图标的含义
项目视图 The Package Explorer view - 已忽略版本控制的文件.可以通过Window → Preferences → Team → Ignored Resources.来忽 ...
- iOS常用---NSString,NSMutabuleString
普通的创建字符串: NSString *string =[[NSString alloc]init]; //创建一个空的字符串,即 @“” 一 .字符串读取本地文件: 参数一: 文件地址 参数二: 文 ...
- jquery slide使用总结
.slideUp([duration][,complete])--目标元素向上滑入隐藏: .slideDown([duration][,complete])--目标元素向下滑出显示: .slideTo ...
- 线性表的顺序存储结构C语言版
#include <stdio.h> #define MAXSIZE 101 #define N 10 typedef struct SeqList { int data[MAXSIZE] ...
- Java Native Method
一.什么是java native method? "A native method is a Java method whose implementation is provided by ...