在使用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);
}
}
分享到:
相关推荐
Web.xml 中的 listener、filter、servlet 加载顺序及其详解 在 Web 应用程序中,web.xml 文件扮演着非常重要的角色,它定义了 Web 应用的结构和配置。其中,listener、filter、servlet 是三个非常重要的概念,它们...
在大型的Web应用中,管理会话是非常关键的,因为会话存储了用户的个人信息和状态。当用户首次访问网站并创建会话时,`sessionCreated`方法会被调用;而当会话过期或者被显式地废弃时,`sessionDestroyed`方法会被...
在Web开发,特别是基于Servlet和JSP的Java Web应用中,Listener被用来增强应用程序的功能。例如,ServletContextListener可以监听Web应用的启动和停止,用来进行一些初始化或清理工作。HttpSessionListener可以监控...
Servlet中的八大Listener是Java Web开发中的重要组成部分,它们允许开发者监听和响应Web应用程序中的特定事件。这些Listener提供了在Servlet容器(如Tomcat)管理的生命周期事件上的扩展点,使得我们能够在恰当的...
Filter和Listener是Java Servlet API中两个重要的组件,它们在Web应用程序中扮演着不同的角色。理解它们的区别和用途,可以帮助开发者更好地设计和实现应用程序的架构。本文详细介绍了Filter和Listener的概念、用途...
Tomcat 中 web.xml 文件是 Web 应用的核心配置文件,负责管理 Web 应用的生命周期、Servlet 的加载顺序、Filter 的配置等。下面对 web.xml 文件中的重要元素进行详细解释。 context-param 元素 context-param 元素...
该错误通常与`ContextLoaderListener`有关,而`ContextLoaderListener`是Spring Web应用中用于初始化上下文的关键组件之一。当Tomcat服务器启动时,会尝试加载这个监听器,并通过它来初始化Spring应用上下文。如果在...
在Spring Boot应用中,整合Listener主要是为了监听应用的生命周期事件,例如在应用启动或关闭时执行特定的操作。这里我们讨论两种整合Listener的方式。 ### 方式一:通过注解扫描完成Listener组件的注册 1. **创建...
监听器是Java Web应用中一个强大的工具,它提供了一种事件驱动的编程模型,帮助开发者实现模块间的解耦和功能的扩展。通过监听器,我们可以在事件发生时执行自定义的逻辑操作,以实现对特定事件的监控和响应。监听器...
监听器在JavaWeb开发中扮演着关键角色,它们允许开发者对Web应用程序的生命周期、用户交互以及域对象的状态变化进行监控和响应。 1. **监听器的基本概念** - **事件(Event)**:事件是应用程序中发生的一种状态...
@WebListener public class SessionCounter implements HttpSessionListener { private static int sessionCount = 0; @Override public void sessionCreated(HttpSessionEvent se) { sessionCount++; System...
在 Web 应用 IPv6 升级改造中,主要涉及以下几个方面的工作: 1. 升级网络设备:基于 IPv4 标准协议设计、生产的网络设备需要报废,更换新设备,以支持 IPv6 协议。 2. 升级基础软件:基础软件包括操作系统、...
Java定时器在Web应用中的实现主要涉及到`java.util.Timer`类和`ServletContextListener`接口,它们在Spring、Struts、Hibernate等框架环境下同样适用。本文将详细解释如何使用这两个核心组件来实现在Web环境中定时...
3. **JavaBean**:JavaBean是一种遵循特定规范的Java类,通常用于封装数据和业务逻辑,可作为Web应用中的组件复用。JavaBean通过getter和setter方法暴露属性,并可能包含事件处理方法。试卷可能要求考生理解JavaBean...
【如何在Web应用中启动后台任务】 在Web应用程序开发中,有时我们需要在应用程序启动时自动运行某些服务或任务,例如定时任务、数据同步等。本文将介绍一种利用Servlet上下文监听器(ServletContextListener)和...
过滤器的优先级是指在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter。 过滤器的初始化参数可以在创建过滤...
JavaBean则是一种符合特定规范的Java类,常作为业务逻辑层的组件在Web应用中使用。 课程可能涵盖以下关键知识点: 1. **Java Web环境搭建**:包括安装JDK、设置环境变量、配置Tomcat服务器,以及部署Web应用的基础...
在Java Web开发中,监听器主要用于监控和处理应用程序中的特定事件,如会话创建、销毁、请求到达等。它们是实现了特定接口的Java类,并通过在web.xml配置文件中声明来注册。常见的监听器接口有HttpSessionListener、...
Web服务器中的三大组件,即Servlet、Filter和Listener,是构建动态Web应用程序的关键元素。这些组件都是基于Java的,主要用于增强和扩展Web服务器的功能。 Servlet是Java中用于处理HTTP请求的核心组件,它是动态...
尽管Filter和Listener都可以在Web应用中扩展功能,但它们的作用范围和使用场景有所不同: - **作用时机**:Filter是在请求和响应过程中发挥作用,而Listener则是在特定事件(如应用启动、会话变化)时触发。 - **...