ServletContext 被 Servlet 程序用来与 Web 容器通信。例如写日志,转发请求。每一个 Web 应用程序含有一个Context,被Web应用内的各个程序共享。因为Context可以用来保存资源并且共享,所以我所知道的 ServletContext 的最大应用是Web缓存----把不经常更改的内容读入内存,所以服务器响应请求的时候就不需要进行慢速的磁盘I/O了。
ServletContextListener 是 ServletContext 的监听者,如果 ServletContext 发生变化,如服务器启动时 ServletContext 被创建,服务器关闭时 ServletContext 将要被销毁。
在JSP文件中,application 是 ServletContext 的实例,由JSP容器默认创建。Servlet 中调用 getServletContext()方法得到 ServletContext 的实例。
我们使用缓存的思路大概是:
-
服务器启动时,ServletContextListener 的 contextInitialized()方法被调用,所以在里面创建好缓存。可以从文件中或者从数据库中读取取缓存内容生成类,用 ervletContext.setAttribute()方法将缓存类保存在 ServletContext 的实例中。
-
程序使用 ServletContext.getAttribute()读取缓存。如果是 JSP,使用a pplication.getAttribute()。如果是 Servlet,使用 getServletContext().getAttribute()。如果缓存发生变化(如访问计数),你可以同时更改缓存和文件/数据库。或者你等 变化积累到一定程序再保存,也可以在下一步保存。
-
服务器将要关闭时,ServletContextListener 的 contextDestroyed()方法被调用,所以在里面保存缓存的更改。将更改后的缓存保存回文件或者数据库,更新原来的内容。
import User; //my own class
import 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定时器简介 Java定时器(`java.util.Timer`)是Java标准库中的一个实用工具类,它主要用于执行周期性的或一次性计划任务。通过设置定时器的间隔时间,可以在指定的时间间隔后执行预先定义的任务,即`...
#### 二、Comet4J简介 Comet4J是一个基于Java的轻量级Comet框架,它能够帮助开发者轻松地实现实时数据推送功能。Comet4J支持多种服务器环境,并且提供了丰富的API接口供开发者调用。通过使用Comet4J,开发者可以专注...
在Web应用中也可以使用定时器,可以通过监听 `ServletContextListener` 来启动和停止定时器。 ```java package org.lzstone.action; import javax.servlet.ServletContextEvent; import javax.servlet....
为了解决这些弊端,我们可以使用ServletContextListener监听Web应用的启动,在Web应用启动时加载Spring的配置文件,创建应用上下文对象ApplicationContext,并将其存储到ServletContext域中。这样,我们就可以在任意...
**1.2 规范简介** 此规范旨在为所有基本Java编程提供一套统一的标准,包括但不限于JavaBeans、Applet、Application、Servlet、JSP以及EJB中的Class和Interface等。其目的不仅在于提升开发效率,更重要的是提高代码...
- 配置 ServletContextListener:用于初始化 Spring MVC 的应用上下文。 3. **控制器(Controller)** - 使用 `@Controller` 注解标记类为控制器,通过 `@RequestMapping` 注解定义请求映射。 - `@GetMapping` ...
### 一、RESTEasy简介 RESTEasy是JAX-RS规范的一个开源实现,它为Java开发者提供了一种简单而强大的方式来创建RESTful Web服务。RESTEasy不仅仅是一个框架,它还包含了一系列的工具和特性,帮助开发者在不同的环境...
- 常见的监听器包括ServletContextListener、HttpSessionListener等。 ### 进阶技术与框架 1. **Spring框架**: - Spring是一个开源框架,用于简化Java应用程序的开发。 - 包括Spring Core、Spring MVC、Spring...
1. **Quartz简介** - Quartz是一个轻量级的作业调度框架,支持Cron表达式和复杂的作业触发器。 - 它提供了API来定义作业(Job)和触发器(Trigger),可以灵活地安排作业的执行时间。 2. **Web环境下的Quartz** ...
- `ServletContextListener`:监听`ServletContext`的初始化和销毁。 - `HttpSessionListener`:监听`HttpSession`的创建和销毁。 - `ServletRequestListener`:监听`ServletRequest`的初始化和销毁。 ### ...
1. **JSP简介** JSP是一种基于Java的服务器端脚本语言,它允许开发者在HTML或XML文档中嵌入Java代码,从而简化了动态网页的开发。JSP文件会被Web容器(如Tomcat)转换成Servlet,然后由Servlet处理请求并生成响应。...
#### 一、课程简介与目标 本教程旨在帮助读者了解如何构建简单的Spring Boot框架。Spring Boot是一种流行的Java框架,它简化了基于Spring的应用程序的开发过程。通过本教程,读者将学会如何整合Servlet、Filter、...
MVC模式简介 MVC模式不是Java Web项目独有的,MVC是一种软件工程中的软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),即为MVC。它是一种软件设计的典范,最早为...
Java Listener 简介 Java Listener 是一种特殊的类,用于监听 ServletContext、HttpSession、ServletRequest 等域对象的创建、销毁、以及属性的变化等。监听器可以在事件发生前、发生后进行一些处理,例如统计用户...
监听器简介 监听器是一种特殊的技术,用于监测服务器端对象(如`ServletContext`、`HttpSession`、`ServletRequest`)的创建和销毁等事件,并在此基础上执行相应的业务逻辑。这种机制使得开发者能够在系统层面做...
### Quartz简介 Quartz 提供了一个完全线程化的事件调度器,支持复杂的时间表和触发器,可以实现精确的任务调度。它支持Cron表达式,可以方便地设置任务执行的时间规则。同时,Quartz还提供了持久化能力,即使应用...
### 监听器简介 监听器是Java Servlet API提供的一种机制,它允许我们注册到特定事件源,当该事件源发生特定事件时,监听器会接收到通知并执行相应的操作。在Web应用中,监听器可以用来跟踪用户的会话、监控上下文...