`
等牛奶的咖啡
  • 浏览: 7463 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Servlet 之 Listener

    博客分类:
  • web
 
阅读更多

1. 事件监听器

在事件源上发生某个变动事件的时候,触发实现了特定接口的程序,通过该接口,可以从变动事件上拿到事件源,从而对事件源上的操作进行处理。

 

在这个体系中,有三个主体,事件源、事件本身、事件监听器

以 ServletContext 为例

事件源:ServletContext,在 Context 创建或者销毁的时候,会出发 ServletContextEvent 事件

事件:ServletContextEvent,getServletContext 获取到 ServletContext

事件监听器:ServletContextListener,接受 ServletContextEvent,可以获取到 ServletContext 进行处理

 

2. servlet 中的 Listener

2.1 ServletContextListener

在 ServletContext 创建和销毁的时候触发,调用 contextInitialized、contextDestroyed,多被框架类实现,用于在启动 web 工程的时候加入框架所需的处理

2.2 ServletContextAttributeListener

若有对象加入为 application (ServletContext) 对象的属性,则会调用 attributeAdded,同理在置换属性与移除属性时,会分别调用 attributeReplaced、attributeRemoved

2.3 ServletRequestListener

在 Request (HttpServletRequest) 对象创建或被销毁时,调用 requestInitialized、requestDestroyed

2.4 ServletRequestAttributeListener

若有对象加入为 Request (HttpServletRequest) 对象的属性,则会调用 attributeAdded,同理在置换属性与移除属性时,会分别调用 attributeReplaced、 attributeRemoved

2.5 HttpSessionListener

在 Session (HttpSession) 对象建立或被消灭时,会分别调用 sessionCreated、sessionDestroyed

2.6 HttpSessionAttributeListener

若有对象加入为 Session  (HttpSession) 对象的属性,则会调用 attributeAdded,同理在置换属性与移除属性时,会分别调用 attributeReplaced、 attributeRemoved

2.7 HttpSessionActivationListener

Activate 与 Passivate 是用于置换对象的动作,当 Session 对象为了资源利用或负载平衡等原因而必须暂时储存至硬盘或其它储存器时(透过对象序列化),所作的动作称之为 Passivate,而硬盘或储存器上的Session 对象重新加载JVM时所采的动作称之为 Activate,所以容易理解的,sessionDidActivate 与  sessionWillPassivate 分别于 Activeate 后与将 Passivate 前调用

2.8 HttpSessionBindingListener

HttpSessionBindingListener 与其他的监听器不同,HttpSessionListener 只需要设置到 web.xml 中就可以监听整个应用中的所有session,HttpSessionBindingListener必须实例化后放入某一个session中,才可以进行监听,而且只能一对一的监听。实现 HttpSessionBindingListener 接口的对象被绑定到 Session 时调用 valueBound,解除绑定时调用 valueUnbound

 

3. web 工程中的 Listener

<context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<context-param>
        <param-name>log4jRefreshInterval</param-name>
        <param-value>60000</param-value>
</context-param>

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:coffeeTest-application.xml
        </param-value>
</context-param>

<listener>
        <listener-class>
                org.springframework.web.util.Log4jConfigListener
        </listener-class>
</listener>

<listener>
        <listener-class>
                org.springframework.web.context.ContextLoaderListener
        </listener-class>
</listener>

 

3.1 初始化 Log4j 日志配置

Log4jConfigListener 用于启动 Log4j 日志,log4jConfigLocation 表示日志配置文件的路径,log4jRefreshInterval 为6000表示开一条 watchdog 线程每6秒扫描一下配置文件的变化

  

使用 Log4jConfigListener 最大的好处就是动态的改变记录级别和策略,不需要重启Web应用

这种动态的实现逻辑,规定一个具体配置文件,用一个线程每隔一段时间去取这个文件的最后修改时间,和上一次取的最后修改时间比较,如果大于,则重新加载这个配置文件

 

帖几段代码

 

class XMLWatchdog extends FileWatchdog {
    XMLWatchdog(String filename) {
    super(filename);
}

  /**
     Call {@link DOMConfigurator#configure(String)} with the
     <code>filename</code> to reconfigure log4j. */
public void doOnChange() {
    new DOMConfigurator().doConfigure(filename, 
				      LogManager.getLoggerRepository());
    }
}
 

 

    FileWatchdog

protected void checkAndConfigure() {
        boolean fileExists;
        try {
            fileExists = file.exists();
        } catch(SecurityException  e) {
            LogLog.warn("Was not allowed to read check file existance, file:["+
                    filename+"].");
            interrupted = true; // there is no point in continuing
            return;
        }

        if(fileExists) {
            long l = file.lastModified(); // this can also throw a SecurityException
            if(l > lastModif) {           // however, if we reached this point this
                lastModif = l;              // is very unlikely.
                doOnChange();
                warnedAlready = false;
            }
        } else {
            if(!warnedAlready) {
                LogLog.debug("["+filename+"] does not exist.");
                warnedAlready = true;
            }
        }
}

 

 

3.2 初始化 spring 配置

ContextLoaderListener 的主要作用是在启动 Web 容器时,自动装配 Spring applicationContext.xml 的配置信息。其主要逻辑也是从 contextConfigLocation 处加载 spring 的配置文件,创建 spring 容器!具体的分析,待 spring 分析的时候再写吧!

分享到:
评论

相关推荐

    servlet+filter+listener 详解

    Servlet、Filter、Listener 详解 Servlet 是运行在服务器上的小程序,它可以使任何 Java 应用程序、浏览器或任何设备。Servlet 的客户端可以提出请求并获得该请求的响应。Servlet 在初始化后即驻留内存中,因此每次...

    servlet--listener 各种接口的简单例子

    在Java的Web开发中,Servlet和Listener是两个非常重要的组件,它们构成了动态Web应用程序的核心部分。Servlet主要负责处理客户端的请求并返回响应,而Listener则用于监听和响应各种Web应用程序中的事件。本教程将...

    Servlet中的八大Listener

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

    关于web.xml配置文件servlet,filter,listener加载顺序

    关于filter、servlet在web.xml配置及加载顺序

    ServletListener大全

    ### ServletListener大全 #### 概述 在Java Web开发中,`ServletListener`是一类特殊的设计模式,主要用于监听容器中的事件。例如,当一个HTTP会话被创建或销毁时,或者当请求开始或结束时,这些监听器可以执行特定...

    Servlet、Filter、Listener深入理解.docx

    Servlet、Filter和Listener是Java Web开发中的核心组件,它们在构建动态Web应用程序中扮演着重要角色。下面将分别深入解析这三个概念。 **Servlet接口** Servlet是Java编程语言中定义的一个接口,它允许开发者创建...

    SpringBoot整合Listener的两种方式.docx

    这个接口提供了两个方法:`contextInitialized()`和`contextDestroyed()`,分别在Servlet容器启动和关闭时被调用。 ```java @WebListener public class FirstListener implements ServletContextListener { @...

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

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

    servlet_filter_listener

    在Java Web开发中,`Servlet`、`Filter`和`Listener`是三个核心组件,它们在构建动态Web应用程序中扮演着重要角色。本篇将详细阐述这三个概念以及它们的工作原理和应用场景。 首先,我们来了解`Servlet`。Servlet是...

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

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

    JAVA Servlet监听器listener学习资料

    Java Servlet监听器(Listener)是Java Web开发中的一个重要组件,它们允许开发者在特定事件发生时执行自定义逻辑,而无需直接修改原有的业务代码。监听器是Servlet规范的一部分,通过实现特定的接口,开发者可以...

    Filter、Servlet、Listener的学习_动力节点Java学院整理

    在Java的Web开发中,Filter、Servlet和Listener是三个核心组件,它们共同构成了Web应用程序的基础架构。下面将分别详细介绍这三个概念及其功能。 1. **Filter(过滤器)** - **功能**:Filter的主要作用是在请求...

    servlet监视器

    ### 关于Servlet监视器(Listener)的详细解析 在Java Web开发中,Servlet技术一直扮演着重要的角色。其中,Servlet监听器(Listener)是Servlet容器提供的一个非常实用的功能,它能够帮助开发者监听某些特定事件的...

    servlet基础与servlet容器模型

    7. **监听器**(Listener):监听Web应用中特定事件,如会话创建、销毁、上下文初始化等,可执行相应操作。 Servlet容器模型的另一个关键特性是多线程模型。由于HTTP请求是无状态的,Servlet容器通常为每个请求创建...

    Servlet小例子源码

    Servlet、Filter和Listener是Java Web开发中的三大核心组件,它们在构建动态Web应用程序时起着至关重要的作用。这个"Servlet小例子源码"压缩包显然提供了关于这些概念的实际应用示例,非常适合初学者来理解和掌握。 ...

    servlet简单小练习

    在这个名为“servlet简单小练习”的压缩包文件中,包含了几个关于Servlet的简单示例,包括servlet_listener、servlet_resourceaccess、servlet_filter以及一个名为“servlet”的综合练习。 1. **servlet_listener**...

    Java WEB 篇九 Java servlet、filter、listener、interceptor ?.xmind

    Java WEB 篇九 Java servlet、filter、listener、interceptor 之间的区别和联系?

Global site tag (gtag.js) - Google Analytics