Listener监听器

Servlet规范中定义的一种特殊的组件,用来监听Servlet容器产生的事件并进行相应的处理
容器产生的事件分类
- 生命周期相关的事件
- 设置和删除Attribute数据相关的事件
ServletContextListener监听器
    在ServletContext创建时和关闭时都会通知ServletContextListener
方法:
servletContextInitialized(ServletContextEvent sce)
当ServletContext创建的时候,将会调用这个方法
servletContextDestroyed(ServletContextEvent sce)
当ServletContext销毁的时候(例如关闭应用服务器或者重新加载应用),将会调用这个方法。
ServletContextAttributeListener监听器
当往Servlet Context添加、删除或者替换一个属性的时候,将会通知ServletContextAttributesListener
方法:
void attributeAdded(ServletContextAttributeEvent scab)
往ServletContext中加入一个属性的时候触发;
void attributeRemoved(ServletContextAttributeEvent scab)
从ServletContext中删除一个属性的时候触发;
void attributeReplaced(ServletContextAttributeEvent scab)
改变ServletContext中属性的时候触发。
HttpSessionListener监听器
当一个HttpSession刚被创建或者失效(invalidate)的时候,将会通知HttpSessionListener
方法:
void sessionCreated(HttpSessionEvent hse)
当一个HttpSession对象被创建时,将会调用这个方法;
void sessionDestroyed(HttpSessionEvent hse)
当一个HttpSession超时或者调用HttpSession的invalidate()方法让它销毁时,将会调用这个方法
HttpSessionAttributesListener监听器
HttpSession中添加、删除或者替换一个属性的时候,将会通知HttpSessionAttributesListener
方法:
void attributeAdded(HttpSessionBindingEvent e)
当往会话中加入一个属性的时候,将会调用这个方法;
void attributeRemoved(HttpSessionBindingEvent e)
当从会话中删除一个属性的时候,将会调用这个方法;
void attributeReplaced(HttpSessionBindingEvent e)
当改变会话中的属性的时候,将会调用这个方法 上面只是列举了一些常用的Listener,关于Listener中的方法,有一个规律,就是如果是Attribute的Listener那么就有三个抽象方法,如果是非Attribute的Listener就只有两个抽象方法。其实官方提供了8大Listener,其中有2个ServletContextEvents,4个HttpSessionEvents,2个ServeltRequestEvents ServletContextEvents:
  ServletContextListener Servlet上下文更改监听
  ServletContextAttributeListener  Servlet上下文属性更改监听 HttpSessionEvents:
  HttpSessionListener  会话更改监听
  HttpSessionAttributeListener  会话属性更改监听
  HttpSessionActivationListener  会话钝化或激活监听
  HttpSessionBindingListener  会话绑定或取消监听 ServetRequestEvents:
  ServletRequestAttributeListener  请求属性更改监听
  ServletRequestListener 请求更改监听
在web.xml中配置listener组件
<listener>
<listener-class>
cn.xdl.listener.ListenerName
</listener-class>
</listener>
看一个计算当前网站的在线人数案例: jsp文件:
<%@page import="cn.xdl.listener.MySessionListener"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>

demo.jsp

加载一个JSP文件,会自动有application对象,所以会自动ServletContext文件

web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>day09_listener</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>cn.xdl.listener.MySessionListener</listener-class>
</listener>
</web-app>

web.xml

配置监听器和配置过滤器不一样。
listener文件:
package cn.xdl.listener;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener; /**
* 获取当前网站 ,同时在线人数
*
*/
public class MySessionListener implements HttpSessionListener { public static int count = 0;
/**
* 当session创建时, 自动执行
*/
@Override
public void sessionCreated(HttpSessionEvent event) {
System.out.println("网站进了一个新用户");
count+=1;
} /**
* 当session销毁时 , 自动执行
*/
@Override
public void sessionDestroyed(HttpSessionEvent event) {
System.out.println("网站离开了一个用户");
count-=1;
} }

MySessionListener.java

【Servlet】Java Serlvet Listener 监听器的更多相关文章

  1. EL&Filter&Listener:EL表达式和JSTL,Servlet规范中的过滤器,Servlet规范中的监听器,观察着设计模式,监听器的使用,综合案例学生管理系统

    EL&Filter&Listener-授课 1 EL表达式和JSTL 1.1 EL表达式 1.1.1 EL表达式介绍 *** EL(Expression Language):表达式语言 ...

  2. [Java] JSP笔记 - Listener 监听器

    Java Web 开发时,可以使用 Listener 来监听来监听一些事件,从而实现一些功能.实际上这个监听器,原理就是 Delphi 中大家常用的各种事件. 1. 那么,监听器的主要用途用哪些呢: ...

  3. Java ---Listener监听器

    在我们的web容器中,一直不断的触发着各种事件,例如:web应用启动和关闭,request请求到达和结束等.但是这些事件通常对于开发者来说是透明的,我们可以根据这些接口开发符合我们自身需求的功能.在w ...

  4. JavaWeb(六)Listener监听器

    监听器 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行. Servlet监听器 在Se ...

  5. 面试之servlet、过滤器、监听器

    servlet.过滤器.监听器servlet是Java中WEB请求和响应的容器servlet的运行需要在类似tomcat容器中,一个 Web 应用对应一个 Context 容器,也就是 Servlet ...

  6. Listener监听器和Filter过滤器

    Listener监听器 WEB中的监听器 WEB 中的 Listener 和 Filter 是属于 Servlet 规范中的高级的技术.WEB中的监听器共有三类八种(监听三个域对象)* 事件源:Ser ...

  7. Servlet3.0的注解自定义原生Listener监听器实战

    简介:监听器介绍和Servlet3.0的注解自定义原生Listener监听器实战 自定义Listener(常用的监听器 servletContextListener.httpSessionListen ...

  8. SpringBoot------Servlet3.0的注解自定义原生Listener监听器

    前言 常用监听器: //contextListener可以监听数据库的连接,第三方组件的交互,还有静态文件加载等等 servletContextListener HttpSessionListener ...

  9. java web Listener的简单使用案例

    1.web.xml的配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi= ...

随机推荐

  1. [Algorithm] Reverse a linked list

    It helps to understands how recursive calls works. function Node(val) { return { val, next: null }; ...

  2. Office办公 SVG的图片文件如何保存为PNG

    用浏览器打开,然后右击图片另存为PNG   再用PS打开可以看到就是没有背景的PNG图片了        

  3. git 保存用户名密码

    打开本地的.git/config 加入 [credential] helper = store 保存,第一次需要输入用户名密码,输入一次密码后第二次就会记住密码了不会再提示输入用户名及密码

  4. 关于微服务、SOA、以及API的理解

    现在微服务.SOA.RESTful API设计等在各大公司很流行.微服务(micro services)这个概念不是新概念,很多公司已经在实践了,例如亚马逊.Google.FaceBook,Aliba ...

  5. Warning: Divide by zero.

    问题:如标题 解决方案:分母加上+eps   参考自:http://www.ilovematlab.cn/thread-43128-1-1.html

  6. 压力测试 JMeter3.3

    历史下载版本 https://archive.apache.org/dist/jmeter/source/

  7. 关于0xFFFFFFFF和alpha,温故而知新

    做图像处理都好多年了,今天随手做个小画板的时候,发现一个挺有趣的小坑.而其实这个小坑,以前也坑过自己,不过太久没处理了,又踩到坑里了. 先来看看:0xFFFFFFFF>>24 这个结果是什 ...

  8. Knockout学习之监控数组

    监控数组 单个监控属性.组合属性虽然可以解决大部分的问题,但是还有很多是他们无法做到的,比如在一组数据中进行移除添加,所以这节我们将要学习监控数组. 由于监控属性是由ko的observable构造,那 ...

  9. JUC-线程池

    一,问题 在没有使用线程池的时候,每次需要一个线程都得手动new Thread()方式创建线程,用完了再销毁. 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发 ...

  10. com.android.providers.telephony.MmsSmsDatabaseHelper

    SmsProvider, MmsProvider, MmsSmsProvider利用MmsSmsDatabaseHelper来操作数据库. 1. MmsSmsDatabaseHelper继承了SQLi ...