一 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规范中定义了多种类型的监听器,它们用于监听的事件源分别为ServletContextHttpSessionServletRequest这三个域对象
  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 学习和使用的更多相关文章

  1. JavaWeb学习总结-04 Servlet 学习和使用

    一 Servlet 1 Servlet概念 Servlet时运行在服务器端的Java程序. Servlet的框架核心是 javax.servlet.Servlet 接口. 所有自定义的Servlet都 ...

  2. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记

    机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习作者:米仓山下时间: ...

  3. iOS学习笔记06—Category和Extension

    iOS学习笔记06—Category和Extension 一.概述 类别是一种为现有的类添加新方法的方式. 利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inher ...

  4. 20145219 《Java程序设计》第06周学习总结

    20145219 <Java程序设计>第06周学习总结 教材学习内容总结 InputStream与OutputStream 串流设计 1.串流:Java将输入/输出抽象化为串流,数据有来源 ...

  5. 学习笔记:CentOS7学习之二十:shell脚本的基础

    目录 学习笔记:CentOS7学习之二十:shell脚本的基础 20.1 shell 基本语法 20.1.1 什么是shell? 20.1.2 编程语言分类 20.1.3 什么是shell脚本 20. ...

  6. 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除

    目录 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除 18.1 centos6系统启动过程及相关配置文件 18.1.1 centos6系统启动过程 18.1.2 centos6启 ...

  7. 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用

    目录 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用 16.1 LVM的工作原理 16.1.1 LVM常用术语 16.1.2 LVM优点 16.2 创建LVM的基本步骤 16.2 ...

  8. 如何学习FPGA?FPGA学习必备的基础知识

    如何学习FPGA?FPGA学习必备的基础知识 时间:2013-08-12 来源:eepw 作者: 关键字:FPGA   基础知识       FPGA已成为现今的技术热点之一,无论学生还是工程师都希望 ...

  9. 强化学习之 免模型学习(model-free based learning)

    强化学习之 免模型学习(model-free based learning) ------ 蒙特卡罗强化学习 与 时序查分学习 ------ 部分节选自周志华老师的教材<机器学习> 由于现 ...

随机推荐

  1. APP架子迁移指南(二)

    接上一篇,这一篇开始用android来解释MVP概念.八股式的架子结构和命名规范.我在准备这篇文章的时候还看到不少在MVP基础上衍生的架子思路,底子是MVP没错,但命名有区别.复杂度变了.架子也用到了 ...

  2. GWT-Dev-Plugin(即google web toolkit developer plugin)for firefox的下载地址

    如果FireFox的版本为20,则对应google-web-toolkit的插件离线下载地址,不要用浏览器直接下载,用Flashget等客户端下载,超快. http://google-web-tool ...

  3. Win7宽带一键创建

    简化创建宽带连接步骤,为简便而生. 不断分享,不断进步. 免费下载:                  http://yunpan.cn/cmZesi2jpJk9E  访问密码 9444

  4. Java设计模式(七) 模板模式

    [模板模式]在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 1,定义模板类 package com.pattern ...

  5. 10G整数文件中寻找中位数或者第K大数

    来源:http://hxraid.iteye.com/blog/649831 题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只写出思路即可(内存限制为 2G的意思就 ...

  6. bzoj1787

    lca裸题,画画图看看就可以了,找出那个一次公共祖先,求距离 #include<iostream> #include<set> #include<cstring> ...

  7. java-a实现压缩与解压缩(zip、gzip)

    zip扮演着归档和压缩两个角色:gzip并不将文件归档,仅只是对单个文件进行压缩,所以,在UNIX平台上,命令tar通常用来创建一个档案文件,然后命令gzip来将档案文件压缩. Java I/O类库还 ...

  8. java-原生爬虫机制源码

    这是一个web搜索的基本程序,从命令行输入搜索条件(起始的URL.处理url的最大数.要搜索的字符串),它就会逐个对Internet上的URL进行实时搜索,查找并输出匹配搜索条件的页面. 这个程序的原 ...

  9. Maven简单介绍

    Maven是基于项目对象模型,可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具.由于 Maven 的缺省构建规则 ...

  10. SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)【转载】

    最近在学习Spring+SpringMVC+MyBatis的整合.以下是参考网上的资料自己实践操作的详细步骤. 1.基本概念   1.1.Spring Spring是一个开源框架,Spring是于20 ...