http://blog.csdn.net/taijianyu/archive/2008/09/08/2898468.aspx
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()方法被调用,所以在里面保存缓存的更改。将更改后的缓存保存回文件或者数据库,更新原来的内容。
import User; //my own
classimport DatabaseManager; // my own class
import javax.servlet.ServletContext;
import javax.servlet.ServletContextListener;
public class MyContextListener implements ServletContextListener {
private ServletContext context = null;
public void contextInitialized(ServletContextEvent event) {
context = event.getServletContext();
User user = DatabaseManager.getUserById(1);
context.setAttribute("user1", user);
}
public void contextDestroyed(ServletContextEvent event) {
User user = (User)context.getAttribute("user1");
DatabaseManager.updateUserData(user);
this.context = null;
}
}
布署 ServletContextListener
你实现(implements)了 ServletContextListener 编译后,把它放在正确的WEB-INF/classes目录下,更改WEB-INF目录下的 web.xml文件,在web-app节点里添加
<listener>
<listener-class>MyServletContextListener</listener-class>
</listener>
分享到:
相关推荐
在Java Web开发中,`ServletContextListener`、`Timer`和`...了解并熟练掌握这些概念,对于提升应用的稳定性和效率有着重要的作用。在实际开发中,可以根据具体需求灵活运用这些技术,构建出高效、可靠的系统。
这个接口的主要作用是监听Servlet上下文(`ServletContext`)的生命周期事件,比如Web应用的启动和停止。在`web.xml`配置文件中,我们可以通过注册`ServletContextListener`来实现特定的功能。 ### ...
它实现了 ServletContextListener 接口,在 web.xml 文件中配置这个监听器,启动容器时,就会默认执行它实现的方法。 ContextLoaderListener 的作用可以分为三个方面: 首先,ContextLoaderListener 会关联 ...
本篇将深入讲解`Listener`的概念、作用以及如何通过实例代码进行实现,特别关注在Web应用程序中的三种主要域对象:`request`、`session`和`servletContext`。 一、`Listener`的基本概念 `Listener`是Java中的接口,...
接下来,我们将详细介绍Servlet中的八大Listener,包括它们的作用、触发条件以及如何在实际项目中使用它们。 1. **ServletContextListener** - **事件方法**: - `contextInitialized()`:在Web应用启动时调用。...
5)ServletContextListener监听器的主要作用 a、初始化的工作:初始化对象 初始化数据 ---- 加载数据库驱动 连接池的初始 化 b、加载一些初始化的配置文件 --- spring的配置文件 c、任务调度----定时器----Timer/...
本文将深入探讨Spring框架中的监听器,特别是`ContextLoaderListener`的作用及其配置。 `ContextLoaderListener`是Spring框架提供的一个核心监听器,主要用于初始化和销毁Spring的WebApplicationContext。它是...
通过实现ServletContextListener接口和操作application作用域,可以有效地将properties文件的配置设置为整个Web应用的全局变量。这样配置的好处是,无论用户访问应用的任何页面,都能通过EL表达式等方式方便地读取到...
#### 一、Servlet Listener的概念与作用 Servlet Listener是一种特殊的Servlet组件,它主要用来监听和响应应用中的某些生命周期事件。这些事件包括但不限于应用程序的初始化和销毁、HTTP会话的创建和销毁、以及HTTP...
首先,我们来看一下Java监听器的作用。在Java Web应用中,监听器的种类主要有以下几种: 1. ServletContextListener:这个监听器能够监听到Servlet上下文(application)的创建和销毁。它有两个重要的方法,context...
为了实现这一目标,你需要创建一个事件监听器,该监听器会在Web应用程序启动时构造偏好工厂,并将其存储在应用程序作用域中供后续使用。同时,这个工厂需要从部署描述符中获取数据库URL,如下所示: ```xml ...
该类的主要作用是: 1. 在Servlet上下文启动时,创建一个List对象用于存放在线用户名。 2. 在用户登录成功时,将用户名添加到List对象中。 3. 在用户注销会话时,从List对象中删除用户名。 以下是OnlineListener类...
1. **监听器的概念与作用** - 监听器是Java Servlet API的一部分,它们是实现了特定监听接口的类,用于监听服务器、Servlet上下文(ServletContext)、HttpSession以及请求对象等发生的事件。 - 监听器可以自动...
这些监听器通过实现特定的接口,如javax.servlet.ServletContextListener,来响应这些事件。 1. **监听器的作用** 监听器的主要作用在于提供预处理和后处理功能。它们可以在Web应用程序启动时执行初始化任务,例如...
监听器在实际应用中的作用: - **配置管理**:可以在应用程序启动时加载配置文件,或者在关闭时保存配置。 - **资源初始化**:如数据库连接池的初始化和关闭。 - **日志记录**:跟踪应用程序的生命周期事件。 - **...
下面我们将深入探讨Web监听器的概念、作用、实现方式以及与Servlet的关系。 **Web监听器的作用** 1. **上下文监听器**: 当Web应用启动和关闭时,可以执行一些初始化和清理工作,例如加载配置信息、数据库连接池的...
在IT行业中,Listener是一个非常关键的概念,特别是在Java和Web开发领域。Listener是一种接口或类,它们用于监听特定事件的发生,并在...理解并熟练运用Listener,对于提升软件的用户体验和系统性能有着显著的作用。
监听器的主要作用是对对象状态的改变进行跟踪,并在特定事件发生时执行相应的操作。Servlet监听器则专注于Web应用中的特定事件,如Web应用启动、会话创建、请求开始等。它们可以帮助开发者实现数据统计、资源初始化...
8. JSTL和EL:JSTL提供了一组标签库,简化了JSP页面的编写,而EL则是一种轻量级的表达式语言,用于访问和操作页面作用域、请求作用域、会话作用域和应用作用域的对象。源码中可能包含使用这些技术的例子。 通过这个...
ServletContextListener接口用于监听Web应用的启动和销毁事件,可以在此基础上加载应用启动时的初始化信息。 一个基本的监听器实现包括创建监听器类并实现相应的接口,如HttpSessionListener。然后需要在web.xml...