web.xml监听器 - listener

(面向事件编程概念)

<listener>
    <listener-class>com.kiqi.listener.MyListener</listener-class>
  </listener>

一、监听器类型 
1.Listener是Servlet的监听器 
2.可以监听客户端的请求、服务端的操作等。 
3.通过监听器,可以自动激发一些操作,如监听在线用户数量,当增加一个HttpSession时,给在线人数加1。 
4.编写监听器需要实现相应的接口 
5.编写完成后在web.xml文件中配置一下,就可以起作用了 
6.可以在不修改现有系统基础上,增加web应用程序生命周期事件的跟踪

二、监听器类型 
按监听的对象(环境对象)划分:

1. 用于监听应用程序环境对象(ServletContext的事件监听器 - application

//ServletContextListener:用于对Servlet整个上下文进行监听(创建、销毁)。
public void contextInitialized(ServletContextEvent sce);//上下文初始化
public void contextDestroyed(ServletContextEvent sce);//上下文销毁
public ServletContext getServletContext();//ServletContextEvent事件:取得一个ServletContext(application)对象

//ServletContextAttributeListener:对Servlet上下文属性的监听(增删改属性)。
public void attributeAdded(ServletContextAttributeEvent scab);//增加属性
public void attributeRemoved(ServletContextAttributeEvent scab);//属性删除
public void attributeRepalced(ServletContextAttributeEvent scab);//属性替换(第二次设置同一属性)
//ServletContextAttributeEvent事件:能取得设置属性的名称与内容
public String getName();//得到属性名称
public Object getValue();//取得属性的值

2. 用于监听用户会话对象(HttpSession Listener)的事件监听器 - session

//HttpSessionListener接口:对Session的整体状态的监听。
public void sessionCreated(HttpSessionEvent se);//session创建
public void sessionDestroyed(HttpSessionEvent se);//session销毁
//HttpSessionEvent事件:
public HttpSession getSession();//取得当前操作的session

//HttpSessionAttributeListener接口:对session的属性监听。
public void attributeAdded(HttpSessionBindingEvent se);//增加属性
public void attributeRemoved(HttpSessionBindingEvent se);//删除属性
public void attributeReplaced(HttpSessionBindingEvent se);//替换属性
//HttpSessionBindingEvent事件:
public String getName();//取得属性的名称
public Object getValue();//取得属性的值
public HttpSession getSession();//取得当前的session
public void invalidate();//使session失效方法 - session.invalidate();

3. 用于监听请求消息对象(ServletRequest Listener)的事件监听器 - request

//ServletRequestListener:用于对Request请求进行监听(创建、销毁)
public void requestInitialized(ServletRequestEvent sre);//request初始化
public void requestDestroyed(ServletRequestEvent sre);//request销毁
//ServletRequestEvent事件:
public ServletRequest getServletRequest();//取得一个ServletRequest对象
public ServletContext getServletContext();//取得一个ServletContext(application)对象

//ServletRequestAttributeListener:对Request属性的监听(增删改属性)。
public void attributeAdded(ServletRequestAttributeEvent srae);//增加属性
public void attributeRemoved(ServletRequestAttributeEvent srae);//属性删除
public void attributeReplaced(ServletRequestAttributeEvent srae);//属性替换(第二次设置同一属性)

//ServletRequestAttributeEvent事件:能取得设置属性的名称与内容
public String getName();//得到属性名称
public Object getValue();//取得属性的值

按监听的事件类项划分

  1. 用于监听域对象自身的创建和销毁的事件监听器
  2. 用于监听域对象中的属性的增加和删除的事件监听器
  3. 用于监听绑定到HttpSession域中的某个对象的状态的事件监听器
 1 import javax.servlet.ServletContextEvent;
 2 import javax.servlet.ServletContextListener;
 3
 4 public class MyListener implements ServletContextListener {
 5     public void contextDestroyed(ServletContextEvent sce) {
 6            System.out.println("die");
 7     }
 8
 9     public void contextInitialized(ServletContextEvent sce) {
10            System.out.println("init");
11     }
12 }
 1 public class HttpSessionListenerImpl implements HttpSessionListener {
 2     public void sessionCreated(HttpSessionEvent event) {
 3         ServletContext app = event.getSession().getServletContext();
 4         int count = Integer.parseInt(app.getAttribute("onLineCount").toString());
 5         count++;
 6         app.setAttribute("onLineCount", count);
 7         int maxOnLineCount = Integer.parseInt(app.getAttribute("maxOnLineCount").toString());
 8         if (count > maxOnLineCount) {
 9             //记录最多人数是多少
10             app.setAttribute("maxOnLineCount", count);
11             DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
12             //记录在那个时刻达到上限
13             app.setAttribute("date", df.format(new Date()));
14         }
15     }
16     //session注销、超时时候调用,停止tomcat不会调用
17     public void sessionDestroyed(HttpSessionEvent event) {
18         ServletContext app = event.getSession().getServletContext();
19         int count = Integer.parseInt(app.getAttribute("onLineCount").toString());
20         count--;
21         app.setAttribute("onLineCount", count);
22     }
23 }

参考:Listener 监听器

原文地址:https://www.cnblogs.com/kiqi/p/10455344.html

时间: 2024-08-21 02:47:31

web.xml监听器 - listener的相关文章

web.xml中Listener的作用

Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁.主要作用是: 做一些初始化的内容添加工作.设置一些基本的内容.比如一些参数或者是一些固定的对象等等.下面利用监听器对数据库连接池DataSource的初始化演示它的使用: MyServletContextListener.java package dc.gz.listeners; i

web.xml中listener作用及使用

一.WebContextLoaderListener 监听类 它能捕捉到server的启动和停止,在启动和停止触发里面的方法做对应的操作! 它必须在web.xml 中配置才干使用,是配置监听类的 二.以下是搜集的一些listener方面的知识 简例一 监听用户上线与退出,显示在线用户 1.登陆页面 Login.jsp <%@page pageEncoding="gb2312" contentType="text/html; charset=gb2312" %&

Java Web(五) 监听器Listener

监听器概述 在上一篇里介绍了过滤器Filter,而Listener是Servlet的另一个高级特性.Listener用于监听Java Web程序中的事件,例如创建,修改,删除Session,request,context等,并触发相应的事件.Listener主要用于对Session,request,context等进行监控,目前共有8种Listener,分别完成对不同事件的监听. 使用Listener不需要关注事件是怎样触发的或者怎么调用相应的Listener,只要记住该类事件触发时一定会调用相

【java web】监听器listener

一.简介 Java的监听器,也是系统级别的监听.监听器随web应用的启动而启动.Java的监听器在c/s模式里面经常用到,它会对特定的事件产生产生一个处理.监听在很多模式下用到,比如说观察者模式,就是一个使用监听器来实现的,在比如统计网站的在线人数. 1.1 监听器分类 1) 按监听的对象划分,可以分为: ServletContext对象监听器 HttpSession对象监听器 ServletRequest对象监听器 2)按监听的事件划分 对象自身的创建和销毁的监听器 对象中属性的创建和消除的监

java web用监听器listener简单的实现在线统计人数

今天又重新学习了java web的基础 监听器技术,用sessionListener简单的实现了网页统计在线人数 (有一个bug就是当关闭网页的时候 session不会关闭依旧存在,除非关闭服务器),代码如下(前端网页代码就不显示了): LoginServlet.java: 1 import javax.servlet.ServletException; 2 import javax.servlet.annotation.WebServlet; 3 import javax.servlet.ht

web.xml 相关 listener filter servlet

突然发现知识忘记了···记一下··· 配置节的加载顺序: context-param -> listener -> filter -> servlet (同个类型之间的实际程序调用的时候的顺序是根据对应的 mapping 的顺序进行调用的) Filter:  在请求一个资源或者从一个资源返回信息的时候执行过滤操作的插件(形如权限控制) javax.servlet.Filter接口 对用户请求的预处理    Filter不是一个servlet,它不能产生一个response,它能够在一个r

服务器启动时Webapp的web.xml中配置的加载顺序

一 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文. 3.容器将<context-param>转换为键值对,并交给servletContext. 4.容器创建<listener>中的类实例,创建监听器. 二  Load-on-startup Lo

JSP之监听器Listener(一)————————ServletContextListener

摘要:        当web应用在web容器中运行时,web应用内部会不断地发生各种事件:如web应用被启动东,web应用被停止,用户session开始,用户session结束,用户请求到达等等……,这些web事情对开发者是透明的,通过监听器我们可以知道web容器里面发生的任何事情. ServletContextListener 常用的监听器有 ServletContextListener:用来监听web应用的启动和关闭 contextInitialized(ServletContextEve

web.xml相关知识摘录整理

web.xml 中的listener. filter.servlet 加载顺序及其详解 在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter.最终得出的结论是:listener -> filter -> serv