`

web中的listener应用

阅读更多
在使用web.xml配置文件的时候,会问listener起什么作用的?
Listener是一种监听的方式,我们可以把自定义的监听程序配置在web.xml文件中。Listener支持Servlet2.3或者2.4的版本,dtd定义的版本也必须是2.3或者2.4。
例如我们在web.xml文件中可以如此配置:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE web-app PUBLIC
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
   
<web-app>
  <display-name>Struts Examples</display-name>
 
  <listener>
      <listener-class>demo.listener.ContextLoader
      </listener-class>
  </listener>
  ... rest of web.xml

在每一个java的web应用中都只能又一个单独的servlet context。而这个context被放置在整个应用级别上,当应用一旦启动之后,servlet容器就会创建这样一个servlet context来服务于web应用。因此我们也可以创建一个类并实现了一个ServletContextListerner接口,用于通知这个context是否被创建了或者被销毁了。这样当Context被创建时,就会收到一个相关的通知,并且在Context被销毁前也会得到一个通知。
由于工作需要,最近在找一些解决方案,发现Listener是一个很好的东西, 能够监听到session,application的create,destroy,可以监听到session,application 属性绑定的变化,考虑了一下,可以应用在"在线人数统计","数据缓存"等各个方面,
下面是整理的一些资料.
Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个HttpSession时,就激发sessionCreated(HttpSessionEvent se)方法,这样就可以给在线人数加1。常用的监听接口有以下几个:
  • ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除、修改属性。
  • ServletContextListener监听ServletContext。当创建ServletContext时,激发contextInitialized(ServletContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法。
  • HttpSessionListener监听HttpSession的操作。当创建一个Session时,激发session Created(HttpSessionEvent se)方法;当销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se)方法。
  • HttpSessionAttributeListener监听HttpSession中的属性的操作。当在Session增加一个属性时,激发attributeAdded(HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se) 方法。

下面我们开发一个具体的例子,这个监听器能够统计在线的人数。在ServletContext初始化和销毁时,在服务器控制台打印对应的信息。当ServletContext里的属性增加、改变、删除时,在服务器控制台打印对应的信息。
要获得以上的功能,监听器必须实现以下3个接口:
  • HttpSessionListener
  • ServletContextListener
  • ServletContextAttributeListener

我们看具体的代码,见示例14-9。


 import javax.servlet.http.*;
 import javax.servlet.*;

 public class OnLineCountListener implements HttpSessionListener,
ServletContextListener,ServletContextAttributeListener
 {
  private int count;
  private ServletContext context = null;
  
  public OnLineCountListener()
  {
   count=0;
   //setContext();
  }
  //创建一个session时激发
  public void sessionCreated(HttpSessionEvent se)
  {
   count++;
   setContext(se);
   
  }
  //当一个session失效时激发
  public void sessionDestroyed(HttpSessionEvent se)
  {
   count--;
   setContext(se);
  }
  //设置context的属性,它将激发attributeReplaced或attributeAdded方法
  public void setContext(HttpSessionEvent se)
  {
   se.getSession().getServletContext().setAttribute("onLine",new Integer(count));
  }
   //增加一个新的属性时激发
  public void attributeAdded(ServletContextAttributeEvent event) {
 
  log("attributeAdded('" + event.getName() + "', '" +
      event.getValue() + "')");
 
     }
    
    //删除一个新的属性时激发
     public void attributeRemoved(ServletContextAttributeEvent event) {

  log("attributeRemoved('" + event.getName() + "', '" +
      event.getValue() + "')");
 
     }

  //属性被替代时激发
     public void attributeReplaced(ServletContextAttributeEvent event) {
 
   log("attributeReplaced('" + event.getName() + "', '" +
       event.getValue() + "')");
     }
     //context删除时激发
      public void contextDestroyed(ServletContextEvent event) {
 
   log("contextDestroyed()");
   this.context = null;
 
     }
 
     //context初始化时激发
     public void contextInitialized(ServletContextEvent event) {
 
   this.context = event.getServletContext();
   log("contextInitialized()");
 
     }
     private void log(String message) {
 
      System.out.println("ContextListener: " + message);
     }  
 }
分享到:
评论
2 楼 gongm_24 2012-07-17  
那个我没有用过,但如果没有的话就自己创建呗,文件名后缀自己写就好了。
1 楼 weivol 2012-07-11  
我想请教一下,我用的netbeans建立的项目就没有xml文件,怎么办啊?

相关推荐

    web.xml 中的listener、 filter、servlet 加载顺序及其详解.doc

    Web.xml 中的 listener、filter、servlet 加载顺序及其详解 在 Web 应用程序中,web.xml 文件扮演着非常重要的角色,它定义了 Web 应用的结构和配置。其中,listener、filter、servlet 是三个非常重要的概念,它们...

    web LIstener

    在大型的Web应用中,管理会话是非常关键的,因为会话存储了用户的个人信息和状态。当用户首次访问网站并创建会话时,`sessionCreated`方法会被调用;而当会话过期或者被显式地废弃时,`sessionDestroyed`方法会被...

    listener我的listener listener我的listener

    在Web开发,特别是基于Servlet和JSP的Java Web应用中,Listener被用来增强应用程序的功能。例如,ServletContextListener可以监听Web应用的启动和停止,用来进行一些初始化或清理工作。HttpSessionListener可以监控...

    Servlet中的八大Listener

    Servlet中的八大Listener是Java Web开发中的重要组成部分,它们允许开发者监听和响应Web应用程序中的特定事件。这些Listener提供了在Servlet容器(如Tomcat)管理的生命周期事件上的扩展点,使得我们能够在恰当的...

    深入解析Java中的Filter与Listener:功能与应用场景

    Filter和Listener是Java Servlet API中两个重要的组件,它们在Web应用程序中扮演着不同的角色。理解它们的区别和用途,可以帮助开发者更好地设计和实现应用程序的架构。本文详细介绍了Filter和Listener的概念、用途...

    Tomcat中用web.xml控制Web应用详解

    Tomcat 中 web.xml 文件是 Web 应用的核心配置文件,负责管理 Web 应用的生命周期、Servlet 的加载顺序、Filter 的配置等。下面对 web.xml 文件中的重要元素进行详细解释。 context-param 元素 context-param 元素...

    Tomcat中--Error listenerStart错误的解决方案

    该错误通常与`ContextLoaderListener`有关,而`ContextLoaderListener`是Spring Web应用中用于初始化上下文的关键组件之一。当Tomcat服务器启动时,会尝试加载这个监听器,并通过它来初始化Spring应用上下文。如果在...

    SpringBoot整合Listener的两种方式.docx

    在Spring Boot应用中,整合Listener主要是为了监听应用的生命周期事件,例如在应用启动或关闭时执行特定的操作。这里我们讨论两种整合Listener的方式。 ### 方式一:通过注解扫描完成Listener组件的注册 1. **创建...

    JavaWeb开发技术-Listener监听器.pptx

    监听器在JavaWeb开发中扮演着关键角色,它们允许开发者对Web应用程序的生命周期、用户交互以及域对象的状态变化进行监控和响应。 1. **监听器的基本概念** - **事件(Event)**:事件是应用程序中发生的一种状态...

    listener监听器demo

    @WebListener public class SessionCounter implements HttpSessionListener { private static int sessionCount = 0; @Override public void sessionCreated(HttpSessionEvent se) { sessionCount++; System...

    Java定时器在Web中的应用.doc

    Java定时器在Web应用中的实现主要涉及到`java.util.Timer`类和`ServletContextListener`接口,它们在Spring、Struts、Hibernate等框架环境下同样适用。本文将详细解释如何使用这两个核心组件来实现在Web环境中定时...

    Java web应用开发试卷

    3. **JavaBean**:JavaBean是一种遵循特定规范的Java类,通常用于封装数据和业务逻辑,可作为Web应用中的组件复用。JavaBean通过getter和setter方法暴露属性,并可能包含事件处理方法。试卷可能要求考生理解JavaBean...

    Web应用IPv6升级改造的主要工作.docx

    在 Web 应用 IPv6 升级改造中,主要涉及以下几个方面的工作: 1. 升级网络设备:基于 IPv4 标准协议设计、生产的网络设备需要报废,更换新设备,以支持 IPv6 协议。 2. 升级基础软件:基础软件包括操作系统、...

    如何在Web应用中去启动后台的任务

    【如何在Web应用中启动后台任务】 在Web应用程序开发中,有时我们需要在应用程序启动时自动运行某些服务或任务,例如定时任务、数据同步等。本文将介绍一种利用Servlet上下文监听器(ServletContextListener)和...

    Web_5_Listener和Filter1

    过滤器的优先级是指在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter。 过滤器的初始化参数可以在创建过滤...

    Java web 应用与开发教程 课件

    JavaBean则是一种符合特定规范的Java类,常作为业务逻辑层的组件在Web应用中使用。 课程可能涵盖以下关键知识点: 1. **Java Web环境搭建**:包括安装JDK、设置环境变量、配置Tomcat服务器,以及部署Web应用的基础...

    java jsp listener小用法

    在Java Web开发中,监听器主要用于监控和处理应用程序中的特定事件,如会话创建、销毁、请求到达等。它们是实现了特定接口的Java类,并通过在web.xml配置文件中声明来注册。常见的监听器接口有HttpSessionListener、...

    web服务器三大组件servlet、Filter、Listener——浅浅笔记

    Web服务器中的三大组件,即Servlet、Filter和Listener,是构建动态Web应用程序的关键元素。这些组件都是基于Java的,主要用于增强和扩展Web服务器的功能。 Servlet是Java中用于处理HTTP请求的核心组件,它是动态...

    Filter和Listener

    尽管Filter和Listener都可以在Web应用中扩展功能,但它们的作用范围和使用场景有所不同: - **作用时机**:Filter是在请求和响应过程中发挥作用,而Listener则是在特定事件(如应用启动、会话变化)时触发。 - **...

    过滤器filter和监听器listener的应用总结

    在Java Web开发中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们主要用于增强应用程序的功能和管理应用程序的状态。这篇文章将对这两者的应用进行深入的总结。 **过滤器Filter** 过滤器是在...

Global site tag (gtag.js) - Google Analytics