当Web应用在Web容器中运行时,Web应用内部会不断地发生各种事件:如Web应用被启动、Web应用被停止、用户session开始、用户session结束等。通常这些Web操作对开发者是透明的。但Servlet API也提供了相应的接口提供调用。

  当我们要使用Listener时,只需要两个步骤:

  ① 定义Listener实现类(实现对应的接口)

  ② 通过Annotation或在web.xml文件中配置Listener

1、实现Listener类

不同的Web事件对应的监听器也不同,常用的Web事件监听器接口有如下几个:

->ServletContextListener:用于监听Web应用的启动和关闭

->ServletContextAttributeListener:用于监听ServletContext范围(application)内属性的改变

->ServletRequestListener:用于监听用户请求

->ServletRequestAttributeListener:用于监听ServletRequest范围(request)内属性的改变

->HttpSessionListener:用于监听用户session的开始和结束

->HttpSessionAttributeListener:用于监听HttpSession范围(session)内属性的改变

一般来说,需要监听哪些Web时间就实现对应接口的方法即可。

2、配置Listener

实现了Listener类之后,还需要配置Listener。你可以选择Annotaion方式或web.xml方式。

Annotation方式:只需使用@WebListener修饰Listener实现类即可(要求Servlet3.0以上)

web.xml方式的配置:

<listener>
<!-- 指定Listener的实现类 -->
<listener-class>lee.GetConnListener</listener-class>
</listener>

下面举一个监听Web应用启动的例子:

首先,实现Listener类(实现ServletContextListener接口):

package com.chanshuyi.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; public class StartUpListener implements ServletContextListener { /**
* 关闭操作
*/
public void contextDestroyed(ServletContextEvent sc) {
System.out.println("------------------ Tomcat关闭! ------------------");
} /**
* 启动初始化
*/
public void contextInitialized(ServletContextEvent sc) {
//获取application。无法获取request/response/session
//ServletContext application = sc.getServletContext();
System.out.println("------------------ Tomcat启动! ------------------");
}
}

接着,在web.xml中配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<!-- 指定Listener的实现类 -->
<listener-class>com.chanshuyi.listener.StartUpListener</listener-class>
</listener>
</web-app>

MARK:使用@WebListener注解的时候出错,不知道是什么原因。(MARK CHENYR)

如果要监听其他Web应用事件,那么只是实现的接口不同而已。其他都是一样的。

Servlet的Listener介绍的更多相关文章

  1. ServletContextInitializer添加 servlet filter listener

    ServletContextInitializer添加 servlet filter listener https://www.cnblogs.com/pomer-huang/p/9639322.ht ...

  2. servlet filter listener interceptor 知识点

    这篇文章主要介绍 servlet filter listener interceptor 之 知识点.博文主要从 概念,生命周期,使命介绍其区别.详情如下:   概念 生命周期 使命 servlet ...

  3. JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)

    JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference

  4. SpringBoot学习笔记(6)----SpringBoot中使用Servlet,Filter,Listener的三种方式

    在一般的运用开发中Controller已经大部分都能够实现了,但是也不排除需要自己实现Servlet,Filter,Listener的方式,SpringBoot提供了三种实现方式. 1. 使用Bean ...

  5. spring boot中使用servlet、listener和filter

    spring boot中支持使用java Web三大组件(servlet.listener和filter),但是坑比较多,主要是spring boot内嵌tomcat和独立tomcat服务器有一些细节 ...

  6. SpringBoot---注册Servlet,Filter,Listener

    1.概述 1.1.当使用  内嵌的Servlet容器(Tomcat.Jetty等)时,将Servlet,Filter,Listener  注册到Servlet容器的方法: 1.1.1.直接注册Bean ...

  7. servlet/filter/listener/interceptor区别与联系

    转自:http://www.cnblogs.com/doit8791/p/4209442.html servlet.filter.listener是配置到web.xml中(web.xml 的加载顺序是 ...

  8. Java中Filter、Servlet、Listener的学习

    1.Filter的功能filter功能,它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个reques ...

  9. 转 Java中Filter、Servlet、Listener的学习

      1.Filter的功能filter功能,它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个requ ...

随机推荐

  1. F#周报2019年第19期

    新闻 介绍.NET 5 发布.NET Core 3.0预览版5以及F#的REPL OpenFsharp CFP开启 F#的Giraffe服务端stub生成器被添加到openapi-generator中 ...

  2. 如何查询正在运行的SQL Server agent job

    运行"msdb"系统数据库下的存储过程"dbo.sp_help_job",可以得知现在SQL Server中有多少个正在运行的agent job: USE [m ...

  3. web api 记录部署IIS获取服务器地址的类型

    获取服务器地址类型分多种,以下记录 1.HttpContext.Current.Server.MapPath("~/File") 返回的值为 D:\3Project\Code\Mo ...

  4. VS Code 自动修改和保存 代码风格 == eslint+prettier

    最近因为用到VS Code,需要统一所有人的代码风格(前端语言js/html/css等,或者后端语言 go/python等也可以这么用). 所以参考了一些网络资料,记录下设置步骤,以便后续查阅. St ...

  5. 深入浅出JVM的锁优化案例

    锁优化 适应性自旋(Adaptive Spinning) 线程阻塞的时候,让等待的线程不放弃cpu执行时间,而是执行一个自旋(一般是空循环),这叫做自旋锁. 自旋等待本身虽然避免了线程切换的开销,但它 ...

  6. 前端技术扫盲-rem和px以及em关系

    首先rem,em和px都是长度单位,下面单独介绍各个单位的概念: px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的.PC端用比较多的. em是相对长度单位.相对于当前对象内 ...

  7. xcode6新建工程

    xcode6中新建空工程 (2014-10-29 13:14:44) 转载▼ 标签: it ios 分类: iOS 升级xcode6之后,直接建立Empty工程后发现,这是太坑,真的是什么都没有啊.只 ...

  8. Django框架操作数据库的两种方式

    Django操作数据库的前提操作是成功连接数据库,详情见上篇:https://www.cnblogs.com/kristin/p/10791358.html Django查询数据库的方式一 from ...

  9. Mongodb分片 学习小结

    前一篇 https://www.cnblogs.com/frx9527/p/mongodb.html 学会搭建复制集Replication之后,就可以学习分片Sharding了. 教程建议看官方文档: ...

  10. windows10下Bad owner or permissions on .ssh/config的解决办法

    方法很简单,亲测有效. 1.进入如下路径C:\Users\用户名\.ssh,你会看到有config这个文件 2.右击config,属性→安全→高级→禁止继承→删除所有继承(忘了全称了,大概这个意思)→ ...