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. js获取对象值的方式

    js获取对象值的方式 var obj = {abc:"ss",nn:90}; var v1 = obj.abc;//使用点的方式 var v2 = obj["abc&qu ...

  2. 【Python】使用torrentParser1.02对多文件torrent的分析结果

    C:\Users\horn1\Desktop\python\41-torrentParser>python torrentParser.py 文件名=./6.torrent 文件结构: anno ...

  3. jQuery的md5加密插件及其它js md5加密代码

    /** * jQuery MD5 hash algorithm function * * <code> * Calculate the md5 hash of a String * Str ...

  4. 微信小程序 - 自定义弹窗组件

    2019-01-06:简化了一些代码,以及增加了可用性. // 弹窗配置 dialogConfig: { // 弹窗 dialogvisible: false, options: { // 显示关闭按 ...

  5. C#和网页js互调代码

    C#和网页js互调代码 1.先写个网页放在主程序目录下:test.html <!DOCTYPE html> <html lang="en" xmlns=" ...

  6. mybatis+spring配置

    可参考:http://www.javacodegeeks.com/2014/02/building-java-web-application-using-mybatis-with-spring.htm ...

  7. angularjs初始化时不显示模板内容, 不显示html, 不显示template

    template的内容可能在需要的数据准备好之前就显示出来了, ng-cloak可以解决这个问题 ng-cloak <div id="template1" ng-cloak& ...

  8. kube-proxy源代码分析

    摘要:假设你对kube-proxy的工作原理有一定的了解.本文基于kubernetes v1.5代码对kube-proxy的源代码文件夹结构进行了分析,并以iptables mode为例进行了完整流程 ...

  9. ReactNative踩坑日志——代码执行方式(面向对象)

    在ReactNative中,是以面向对象的方式执行代码的.处于同一{}內的代码以对象的形式执行,也就是说,程序虽然会自上而下执行代码,但是它会保证当前整个代码块內的语句执行完毕才执行下一代码块. 举个 ...

  10. PCI(Payment Card Industry)合规

     PCI-DSS(Payment Card Industry-Data Security Standard) 1.构建并维护安全的网络 2.保护持卡人数据 3.维护漏洞管理程序 4.执行严格的访问控制 ...