Java Web开发——Servlet监听器

一、Servlet监听器的概念

Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext、HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件。

监听对象:

1、ServletContext:application,整个应用只存在一个

2、HttpSession:session,针对每一个对话

3、ServletRequest:request,针对每一个客户请求

监听内容:创建、销毁、属性改变事件

监听作用:可以在事件发生前、发生后进行一些处理,一般可以用来统计在线人数和在线用户、统计网站访问量、系统启动时初始化信息等。

二、监听器的基本使用

创建步骤:

1、创建一个实现监听器接口的类

2、配置web.xml文件,注册监听器

<listener>
    <listener-class>完整类名</listener-class>
</listener>

监听器的启动顺序:按照web.xml的配置顺序来启动

加载顺序:监听器>过滤器>Servlet

三、监听器的分类

3.1 按照监听的对象划分

1、用于监听应用程序环境对象(ServletContext)的事件监听器,实现ServletContextListener、ServletContextAttributeListener接口

2、用于监听用户会话对象(HttpSeesion)的事件监听器,实现HttpSessionListener、HttpSessionAttributeListener接口

3、用于监听请求消息对象(ServletRequest)的事件监听器,实现ServletRequestListener、ServletRequestAttributeListener接口

3.2按照监听事件划分

1、监听域对象自身的创建和销毁的事件监听器

根据监听对象不同分别实现ServletContextListener、HttpSessionListener、ServletRequestListener接口。

①ServletContext的创建和销毁:contextInitialized方法和contextDestroyed方法

public void contextInitialized(ServletContextEvent sce)//ServletContext创建时调用
public void contextDestroyed(ServletContextEvent sce)//ServletContext销毁时调用

主要用途:作为定时器、加载全局属性对象、创建全局数据库连接、加载缓存信息等

实例:

在web.xml中可以配置项目初始化信息,在contextInitialized方法中进行启动

<context-param>
    <param-name>属性名</param-name>
    <param-value>属性值</param-value>
</context-param>

自定义监听器

public class MyFirstListener implements ServletContextListener{
    public void contextInitialized(ServletContextEvent sce){
        //获取web.xml中配置的属性
        String value=sce.getServletContext().getInitParameter("属性名");
        System.out.println(value);
  }
    public void contextDestroyed(ServletContextEvent sce){
        //关闭时操作
  }
}

②HttpSession的创建和销毁:sessionCreated和sessionDestroyed方法

public void sessionCreated(HttpSessionEvent se)//session创建时调用
public void sessionDestroyed(HttpSessionEvent se)//session销毁时调用

主要用途:统计在线人数、记录访问日志等

【注】

web.xml配置session超时参数,单位:分,session超时的时间并不是精确的

<session-config>
    <session-timeout>10</session-timeout>
</session-config>

③ServletRequest的创建和销毁:requestInitialized和requestDestroyed方法

public void requestInitialized(ServletRequestEvent sre)//request创建时调用
public void requestDestroyed(ServletRequestEvent sre)//request销毁时调用

主要用途:读取request参数,记录访问历史

实例:

public class MySRequestListener implements SevletRequestListener{
    public void requestInitialized(ServletRequestEvent sre){
        String value=sre.getServletRequest().getParameter("key");//获取request中的参数
        System.out.println(value);
    }
    public void requestDestroyed(ServletRequestEvent sre){
        System.out.println("request destroyed");
    }
}   

2、监听域对象中的属性的增加和删除的事件监听器

  根据监听对象不同分别实现ServletContextAttributeListener、HttpSessionAttributeListener、ServletRequestAttributeListener接口。

  实现方法:attributeAdded、attributeRemoved、attributeReplaced

3、监听绑定到HttpSeesion域中的某个对象的状态的事件监听器(创建普通JavaBean)

  HttpSession中的对象状态:绑定→解除绑定;钝化→活化

  实现接口及方法:HttpSessionBindingListener接口(valueBound和valueUnbound方法)、HttpSessionActivationListener接口(sessionWillPassivate和sessionDidActivate方法)

【注1】①要实现钝化和活化必须实现Serializable接口

②不需要在web.xml中注册

【注2】

  绑定:    通过setAttribute保存到session对象当中

  解除绑定:  通过removeAttribue去除

  钝化:    将session对象持久化到存储设备上

  活化:    将session对象从存储设备上进行恢复

  session钝化机制:

    ①把服务器不常使用的session对象暂时序列化到系统文件或者是数据库中,当使用时反序列化到内存中,整个过程由服务器自动完成;

    ②session的钝化机制由SessionManager管理,创建一个普通的JavaBean绑定和接触需要实现HttpSessionBindingListener接口

四、Servlet3.0下监听器的使用

4.1 使用条件

  1、使用servlet3.0新标准的jar包

  2、JDK在1.6以上版本

  3、编译器的编译级别为6.0

  4、在web.xml文件中,使用3.0规范

  5、使用支持servlet3.0特性的web容器,比如tomcat7

4.2 servlet3.0下监听器的用法

使用注解 @WebListener 即可,无法去定义监听器的顺序

@WebListener的常用属性
属性名 类型 是否可选 描述
value String 该监听器的描述信息
@WebListener("This is a listener")
public class FirstListener impliements ServletRequestListener{}

该注解用于将类声明为监听器,被 @WebListener 标注的类必须实现以下至少一个接口:

  ServletContextListener

  ServletContextAttributeListener

  ServletRequestListener

  ServletRequestAttributeListener

  HttpSessionListener

  HttpSessionAttributeListener

时间: 2024-12-28 09:31:23

Java Web开发——Servlet监听器的相关文章

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验. 1.说一说Servlet生命周期(非常重要) Servlet生命周期包括三部分: 初始化:Web容器加载servlet,调用init()方法 只执行一次 处理请求:当请求到达时,运行其service()方法.service()自动调用与请求相对应的doXXX

初学 Java Web 开发,请远离各种框架,从 Servlet 开发

Web框架是开发者在使用某种语言编写Web应用服务端时关于架构的最佳实践.很多Web框架是从实际的Web项目抽取出来的,仅和Web的请求和响应处 理有关,形成一个基础,在开发别的应用项目的时候则可以从这个剥离出来的基础做起,让开发者更关注更具体的业务问题,而不是Web的请求和响应的控制. 框架很多,但套路基本类似,帮你隐藏很多关于 HTTP 协议细节内容,专注功能开发. 但对一个初学者来说,过早的接触框架往往是事倍功半!同样一个问题,换一种框架你可能需要从头开始研究. 下面是针对初学 Java

java web开发中,如何查看JSP和Servlet版本 (转)

原文出处:http://blog.163.com/qiu_yin_good/blog/static/16732934920123277481492/ 在看<struts2权威指南>的时候,书上很多处都提到环境要支持的JSP,Servlet版本.如果版本低,会出现异常.或者需要修改web.xml等. 现在记录下如何看自己java  web工程的JSP和servlet版本. 我的tomcat版本是7.0.26 方法:打开tomcat/lib,找到jsp-api.jar和servlet-api.ja

Java Web基础 --- Servlet 综述(实践篇)

摘要: 伴随 J2EE 6一起发布的Servlet 3.0规范是Servlet规范历史上最重要的变革之一,它的许多新的特性都极大的简化了 Java Web 应用的开发.本文从一个简单的 Servlet 例子开始,说明了如何开发.配置一个 Servlet.此外,还重点叙述了Servlet的一些新特性,包括Servlet 异步处理.Servlet 非阻塞IO 以及 Servlet 文件上传等内容,以便我们对Servlet有一个更全面的了解. 本篇主要介绍 Servlet 实践方面的知识,更多关注于S

(转)JavaWeb开发——Servlet监听器

一.Servlet监听器的概念 Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext.HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件. 监听对象: 1.ServletContext:application,整个应用只存在一个 2.HttpSession:session,针对每一个对话 3.ServletRequest:request,针对每一个客户请求 监听内容:创建.销毁.属性改变

Java Web开发笔记(2016-5-6 11:13、2016-5-10 11:13、2016-5-12 14:58)

http://localhost:8080/EquipmentSys/equipment/findEquipStateByEquipmentNumber.html?DEVEICEID=04:e6:76:df:f0:94 返回 1,1 设备状态(1运营,2维护,3锁定),是否更新的开关IsUpdate={1,0}(游戏APK更新条件:IsUpdate=1而且版本号不一样) /** * 接口 * @param request * @return * @throws UnsupportedEncodi

Java Web开发中MVC设计模式简介

一.有关Java Web与MVC设计模式 学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet,如何编写jsp及如何更新浏览器中显示的内容.但是我们之前自己编写的应用一般存在无条理性,对于一个小型的网站这样的编写没有任何问题,但是一但我们需要编写大型的web工程的话,我们现有的编写模式会造成web应用的可扩展性较差,而且一但出现问题不能准确的定位出问题出在哪里. Java是一门应用设计模式比较广泛的语言.目前主流提出的23种设计模式均可在Java语言编写的程序中所应用.目前

Java Web开发模式

一 Java Web开发模式的变迁 1 最初的Java web服务器端编程技术是Servlet,利用Servlet就可以开发出一个Web应用程序. 2 为了解决Servlet缺陷,SUN推出了JSP技术.但是开发人员又走向了另一个极端就是完全放弃了Servlet. 在JSP页面混合使用HTML标记和java代码编写的脚本元素标记来开发Web程序.采用这种方法虽然可以编写JSP页面变得简单,直观,然而,他只适合于业务流程简单,系统规模较小的应用系统. 如果系统较大的话,就会出现两个严重的缺点: 1

java web开发 高并发处理

java web开发 高并发处理 java 高并发 java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF.尤其是Web2.0的应用,数据库的响应是首先要解决的. 一般来说MySQL是最常用的,可能最初是一个mysql主机,当数据增加到100万以上,那么,MySQL的效能急剧下降.常用的优化措施是M-S(主-从)方式进行同步复制,将查询和操作和分别在不