`

web.xml 中 ServletListener 监听器作用

 
阅读更多
你的需求是当服务器启动后加载一些数据,我们就可以使用ServletContextListener来满足需求
这样获取是不可以的,当j2ee容器启动后会或获取一次spring上下文,如果使用该方式会在一次获取上下文。自己想想就知道.

ServletContextListener 不受spring管理我们应该如何获取呢?

实际上spring同样使用了ServletContextListener接口,我们可以通过实现一个自己的ServletContextListener
来得到spring上下文

作用:在启动Web 容器时,自动装配spring applicationContext.xml 的配置信息。
因为它实现了ServletContextListener 这个接口,在web.xml 配置这个监听器,启动容器时,就会默认执行它实现的方法。在ContextLoaderListener 中关联了ContextLoader 这个类,所以整个加载配置过程由ContextLoader 来完成

pring 在 web 下的入口在配置文件 web.xml 的监听器中
< listener >
        < listener-class >
           org.springframework.web.context.ContextLoaderListener
        </ listener-class >
</ listener >
<context-param>
     <param-name>contextConfigLocation</param-name>
      <param-value>classpath:conf/spring/applicationContext.xml</param-value>
</context-param>
上述是在web.xml 中的配置信息。

// 实现了接口 ServletContextListener, 也就是说他必须实现 contextDestroyed, contextInitialized 这两个方法
public class ContextLoaderListener implements ServletContextListener {
       private ContextLoader contextLoader;
       /**
       * Initialize the root web application context.
       */
//Spring 框架由此启动 , contextInitialized 也就是监听器类的 main 入口函数
       public void contextInitialized (ServletContextEvent event) {
              this.contextLoader = createContextLoader();
              this.contextLoader.initWebApplicationContext(event.getServletContext());
       }
       /**
       * Create the ContextLoader to use. Can be overridden in subclasses.
       * @return the new ContextLoader
       */                                           
       protected ContextLoader createContextLoader() {
              return new ContextLoader();
       }
       /**
       * Return the ContextLoader used by this listener.
       * @return the current ContextLoader
       */
       public ContextLoader getContextLoader() {
              return this.contextLoader;
       }
       /**
       * Close the root web application context.
       */
       public void contextDestroyed (ServletContextEvent event) {
              if (this.contextLoader != null) {
                     this.contextLoader.closeWebApplicationContext(event.getServletContext());
              }
       }
}

总的来说这个入口非常简单 , 所有实现都隐藏在 ContextLoader 类里 ,
如果你不知道为什么这里是程序的入口 , 那么复习一下 ServletContextListener 接口和监听器的相关知识吧
   ServletContext 被 Servlet 程序用来与 Web 容器通信。例如写日志,转发请求。每一个 Web 应用程序含有一个Context ,被Web 应用内的各个程序共享。因为Context 可以用来保存资源并且共享,所以我所知道的 ServletContext 的最大应用是Web 缓存---- 把不经常更改的内容读入内存,所以服务器响应请求的时候就不需要进行慢速的磁盘I/O 了。
   ServletContextListener 是 ServletContext 的监听者,如果 ServletContext 发生变化,如服务器启动时 ServletContext 被创建,服务器关闭时 ServletContext 将要被销毁。
       在JSP 文件中,application 是 ServletContext 的实例,由JSP 容器默认创建。Servlet 中调用 getServletContext() 方法得到 ServletContext 的实例。
我们使用缓存的思路大概是:
       1. 服务器启动时,ServletContextListener 的 contextInitialized() 方法被调用,所以在里面创建好缓存。可以从文件中或者从数据库中读取取缓存内容生成类,用 ervletContext.setAttribute() 方法将缓存类保存在 ServletContext 的实例中。
       2. 程序使用 ServletContext.getAttribute() 读取缓存。如果是 JSP ,使用a pplication.getAttribute() 。如果是 Servlet ,使用 getServletContext().getAttribute() 。如果缓存发生变化( 如访问计数) ,你可以同时更改缓存和文件/ 数据库。或者你等 变化积累到一定程序再保存,也可以在下一步保存。
       3. 服务器将要关闭时,ServletContextListener 的 contextDestroyed() 方法被调用,所以在里面保存缓存的更改。将更改后的缓存保存回文件或者数据库,更新原来的内容。


      你实现(implements) 了 ServletContextListener 编译后,把它放在正确的WEB-INF/classes 目录下,更改WEB-INF 目录下的 web.xml 文件,在web-app 节点里添加
<listener>
        <listener-class>MyServletContextListener</listener-class>
</listener>
包+类名
分享到:
评论

相关推荐

    web.xml配置详解, web.xml web.xml 配置实例

    * listener 元素:事件监听程序在建立、修改和删除会话或servlet 环境时得到通知。 * servlet 元素:在向 servlet 或 JSP 页面制定初始化参数或定制 URL 时,必须首先命名 servlet 或 JSP 页面。 * servlet-mapping ...

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

    容器将创建 listener 中的类实例,并将其作为监听器。监听器可以在 ServletContext 中注册监听器,以便在特定的生命周期事件中执行操作。 load-on-startup 元素 load-on-startup 元素用于指定 Servlet 的加载顺序...

    详解Spring mvc的web.xml配置说明

    `web.xml`中的监听器允许我们在特定事件发生时执行代码,例如应用程序启动或关闭。在Spring MVC中,`org.springframework.web.context.ContextLoaderListener`是一个关键监听器,它实现了`ServletContextListener`...

    web.xml文件中配置(servlet, spring, filter, listenr)的加载顺序

    ### web.xml文件中配置(servlet, spring, filter, listener)的加载顺序 在Java Web应用开发中,`web.xml`文件是整个Web应用程序的核心配置文件之一,它定义了Servlet容器如何启动、初始化以及配置各个组件如...

    web.xml配置详解

    web.xml 配置详解 web.xml 配置详解是指在 ...web.xml 配置详解是 Java Web 应用程序中一个非常重要的配置文件,它包含了很多描述 servlet/JSP 应用的各个方面的元素,对于 Java Web 应用程序的开发和配置非常重要。

    在web.xml中配置action或.do

    它不仅定义了Web应用的基本配置,还管理着诸如Servlet、过滤器(Filter)、监听器(Listener)等组件的配置信息。本文将详细介绍如何在`web.xml`中配置action或.do文件,以实现特定的功能需求。 #### 二、背景知识 在...

    一篇关于web.xml配置的详细说明

    在Java Web开发中,`web.xml`是Web应用程序的部署描述符,它是服务器理解和运行Web应用的关键配置文件。本文将详细解释`web.xml`配置的各个方面,帮助开发者更好地理解和掌握其使用。 1. **定义头和根元素** `web....

    web.xml各种配置

    - **listener**: 声明Web应用启动和终止时需要执行的监听器类。 - **filter**: 定义过滤器的配置信息,包括过滤器类的名称和URL模式映射。 - **filter-mapping**: 映射过滤器到具体的请求或请求模式。 - **servlet**...

    WEB.XML详解

    WEB.xml详解主要涉及了Java EE Web应用程序的标准配置文件web.xml的详细使用说明,这是Servlet规范中定义的一个配置文件,用于配置web应用的初始化参数、servlet和filter、监听器等组件。 首先,web.xml文件在Web...

    web.xml加载顺序与web.xml常用节点解析

    它遵循Java Servlet规范中的标准,为开发者提供了一种结构化的方式来配置Servlet、过滤器、监听器和其他组件。理解`web.xml`的加载顺序和各个节点的作用对于开发和维护高质量的Web应用至关重要。 1. **加载顺序**:...

    web.xml+详细解析.rar

    `web.xml`遵循XML规范,其根元素是`&lt;web-app&gt;`,它包含各种配置元素,如`&lt;servlet&gt;`, `&lt;servlet-mapping&gt;`, `&lt;filter&gt;`, `&lt;filter-mapping&gt;`, `&lt;listener&gt;`, `&lt;session-config&gt;`, `&lt;error-page&gt;`等。 3. **Servlet...

    tomcat配置文件web.xml与server.xml解析

    Tomcat 配置文件 web.xml 与 server.xml 解析 Tomcat 配置文件 web.xml 和 server.xml 是 Tomcat 自身的配置文件,用于配置...同时,事件监听器和过滤器也可以在 web.xml 文件中进行配置,以监听和处理 Servlet 事件。

    web.xml文件配置.doc

    《web.xml文件配置详解...合理配置和排序可以确保过滤器、监听器和servlet按照预期工作,提高应用的响应速度和效率。在开发过程中,应仔细调整这些元素,以满足具体需求,同时遵循最佳实践,确保代码的可读性和维护性。

    Tomcat(二) Tomcat实现:Servlet与web.xml介绍 以及 源码分析Tomcat实现细节1

    在web.xml文件中,你可以通过`&lt;listener&gt;`元素定义监听器,当Web应用启动时,Tomcat会实例化这些监听器并调用相应的初始化方法。 ```xml &lt;listener&gt; &lt;listener-class&gt;org.springframework.web.context....

    web.xml配置汇总(servlet2.3)

    `web.xml`作为Java Web应用程序的核心配置文件,在Servlet 2.3规范中扮演着至关重要的角色。该文件通常位于WEB-INF目录下,用于定义和配置Web应用程序的各种组件和服务。通过深入解析`web.xml`的关键元素和属性,...

    加载spring 文件,在web.xml中的配置

    在Spring框架中,Web应用程序的配置通常涉及到对`web.xml`文件的设置,这是传统的部署描述符,用于定义Servlet、监听器和其他Web组件。当我们谈论“加载Spring文件,在web.xml中的配置”时,主要是指如何在Web应用...

    java/jsp web.xml详解

    这个文件包含了关于Web应用程序的配置信息,包括Servlet的定义、过滤器、监听器、会话配置、MIME类型映射、错误页面设置等。下面我们将深入探讨`web.xml`的各个主要部分及其作用。 1. **Servlet定义** 在`web.xml`...

    Web.xml配置文件.pdf

    `Web.xml`文件是Servlet容器(如Tomcat、Jetty)解析的配置文件,它为Web应用程序提供了元数据,包括Servlet、过滤器、监听器、会话配置、错误页面等。该文件位于`WEB-INF`目录下,是Java Web应用的标准配置部分。 ...

    JSP Web.xml标准配置内容

    --第三种Servlet,监听器--&gt; &lt;listener&gt; &lt;listener-class&gt;test.ListenerDemo&lt;/listener-class&gt; &lt;/listener&gt; &lt;!--定义了Web应用程序中会话的超时时限--&gt; &lt;session-timeout&gt;10 &lt;/session-config&gt;

Global site tag (gtag.js) - Google Analytics