- 浏览: 307282 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
wst0350:
点赞,有空深入讲解下原理
Servlet、Filter 和 Listener 调用顺序、生命周期的实验分析 -
tuspark:
Eclipse中高亮设置内容还有很多细节选项可以设置的,可以看 ...
Eclipse 设置匹配代码高亮 -
xichao1929:
这个时候,怎么启动发布的项目呢?????
JBoss设置为Windows服务 -
xiaozi7:
非常感谢,楼主的英语水平不一般那
WebSphere MQ Version 7 发布订阅相关配置 -
qtlkw:
slave没玩过
Hudson: java.lang.OutOfMemoryError: Java heap space error
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()方法被调用,所以在里面创建好缓存。可以从文件中或者从数据库中读取取缓存内容生成类,用 ServletContext.setAttribute()方法将缓存类保存在 ServletContext 的实例中。
2.程序使用 ServletContext.getAttribute()读取缓存。如果是 JSP,使用application.getAttribute()。如果是 Servlet,使用 getServletContext().getAttribute()。如果缓存发生变化(如访问计数),你可以同时更改缓存和文件/数据库。或者你等变化积累到一定程序再保存,也可以在下一步保存。
3.服务器将要关闭时,ServletContextListener 的 contextDestroyed()方法被调用,所以在里面保存缓存的更改。将更改后的缓存保存回文件或者数据库,更新原来的内容。
布署 ServletContextListener:
你实现(implements)了 ServletContextListener 编译后,把它放在正确的WEB-INF/classes目录下,更改WEB-INF目录下的 web.xml文件,在web-app节点里添加
Another example:
ServletContextListener 是 ServletContext 的监听者,如果 ServletContext 发生变化,如服务器启动时 ServletContext 被创建,服务器关闭时 ServletContext 将要被销毁。
在JSP文件中,application 是 ServletContext 的实例,由JSP容器默认创建。Servlet 中调用 getServletContext()方法得到 ServletContext 的实例。
我们使用缓存的思路大概是:
1.服务器启动时,ServletContextListener 的 contextInitialized()方法被调用,所以在里面创建好缓存。可以从文件中或者从数据库中读取取缓存内容生成类,用 ServletContext.setAttribute()方法将缓存类保存在 ServletContext 的实例中。
2.程序使用 ServletContext.getAttribute()读取缓存。如果是 JSP,使用application.getAttribute()。如果是 Servlet,使用 getServletContext().getAttribute()。如果缓存发生变化(如访问计数),你可以同时更改缓存和文件/数据库。或者你等变化积累到一定程序再保存,也可以在下一步保存。
3.服务器将要关闭时,ServletContextListener 的 contextDestroyed()方法被调用,所以在里面保存缓存的更改。将更改后的缓存保存回文件或者数据库,更新原来的内容。
import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class ApplicationInitListener implements ServletContextListener{ private ServletContext servletContext; public void contextInitialized(ServletContextEvent servletContextEvent){ System.out.println("[Application Init]ServletContext initialized"); servletContext = servletContextEvent.getServletContext(); servletContext.setAttribute("Application", "application"); String databaseType = servletContext.getInitParameter("databaseType"); System.out.println("[Application process]: "+databaseType); servletContext.setAttribute("databaseType", databaseType); } public void contextDestroyed(ServletContextEvent servletContextEvent){ System.out.println("[Application Destroy]ServletContext destroyed"); } }
布署 ServletContextListener:
你实现(implements)了 ServletContextListener 编译后,把它放在正确的WEB-INF/classes目录下,更改WEB-INF目录下的 web.xml文件,在web-app节点里添加
<context-param> <param-name>databaseType</param-name> <param-value>oracle</param-value> </context-param> <filter> <filter-name>RequestCharacterEncodingFilter</filter-name> <filter-class>filter.RequestCharacterEncodingFilter</filter-class> <init-param> <param-name>requestCharacterEncoding</param-name> <param-value>gb2312</param-value> </init-param> </filter> <filter-mapping> <filter-name>RequestCharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>ApplicationInitListener</listener-class> </listener>
Another example:
import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.apache.log4j.Logger; /** * Initialize the global web application context * when the Servlet Container are starting * * @version $Revision: 1.3 $ * @author */ public class ApplicationInitListener implements ServletContextListener { private static Logger logger = Logger.getLogger(FunctionUtil.class); /** * Initialize a FunctionUtil instance */ public void contextInitialized(ServletContextEvent servletContextEvent){ logger.info("[Application Init] ServletContext initialized"); ServletContext servletContext = servletContextEvent.getServletContext(); LoadCustomFunction.setServletContainerPath(servletContext.getRealPath("/")); FunctionUtil.INSTANCE.init(); } /** * Destroy the web context */ public void contextDestroyed(ServletContextEvent servletContextEvent){ logger.info("[Application Init] ServletContext destroyed"); } }
评论
1 楼
chian_xxp
2011-01-15
谢谢,让我理解清楚了ServletContext,其实是针对servlet容器而来,所有的servlet通用。
servletContext保存了上下文的参数。任何servlet都可以访问。
servletContext保存了上下文的参数。任何servlet都可以访问。
发表评论
-
es使用两种方式
2018-06-28 16:26 0第一种方式: 使用TransportClient packag ... -
hbase
2018-06-25 13:50 0package cn.com.duiba.appordersy ... -
guava
2017-09-22 18:03 6381.Guava Cache的get/getIfPresent方 ... -
转:架构
2017-06-23 08:13 493架构是软件的核心和灵魂,没有好的架构的软件经过一段时间的迭代后 ... -
使用 redis 减少 秒杀库存 超卖思路
2017-06-22 23:58 561612月份重构公司社群活动产品,原来自己不是很成熟,按传统的形式 ... -
经典笔试题
2017-06-21 23:30 495public class BaseTest { pu ... -
Restful vs RPC
2017-01-23 10:54 865传统的RPC一般是基于二 ... -
自动产生随机数
2016-11-11 10:54 555/** * java生成随机数字和字母组合 ... -
commons-lang常用工具类StringEscapeUtils
2016-11-10 20:12 8831.escapeSql 提供sql转移功能,防止sql注入攻击 ... -
Java8:Lambda表达式增强版Comparator和排序
2016-10-27 10:32 2693http://www.importnew.com/15259. ... -
Java序列化几点注意事项
2016-10-26 17:02 894静态变量不属于对象,属于类,不能被序列化.还有瞬态的变量也不能 ... -
Rest vs dubbo
2016-09-15 18:10 0Rest 基于http, 大数据量和安全性可能不佳 dubbo ... -
List删除element两种方式的不同
2016-07-26 12:41 679public class DateUtilTest { ... -
Xmemcached——比spymemcached更快
2016-07-18 10:23 467Xmemcached是一个高性能的 ... -
velocity 缓存设置
2016-07-04 20:54 1062#velocity 是否开启缓存 velocity.resou ... -
Java8 Stream用法
2016-07-04 18:58 01. collect(toList()) 由stream里的值 ... -
熔断器设计模式
2016-05-22 23:14 600转载: http://www.cnblogs.com/ ... -
Date 参数
2016-04-22 21:44 563Oracle TO_CHAR parameters: The ... -
Dubbo安装部署
2016-04-18 01:16 1609Jdk-1.6.30以上版本 Tomcat-7 ... -
java read也需要加锁
2016-02-27 18:11 643今天被问到read需不需要加锁,结果没答上来。自己写了一个程序 ...
相关推荐
这个类将在Web应用启动和关闭时分别调用`contextInitialized()`和`contextDestroyed()`方法。 ```java import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class ...
当我们想要在Web应用启动时执行某些初始化操作或者在Web应用关闭时进行清理工作时,`ServletContextListener`就显得非常有用。在这个场景中,我们将探讨如何使用`ServletContextListener`来实现在线人数的统计和显示...
在Java Web开发中,`ServletContextListener`是一个非常重要的接口,它是Servlet API的一...通过实现这个接口,开发者可以在项目启动和关闭时执行特定的操作,如创建或删除数据库表,从而保证应用的正确初始化和清理。
结合`ServletContextListener`和`Timer`,可以在Web应用程序启动时创建一个定时器,用于定时执行某些任务。例如,可以利用`contextInitialized`方法初始化`Timer`,并设置一个`TimerTask`来定期检查数据库连接池的...
ServletContextListener 使用详解 ServletContextListener ...ServletContextListener 是一个非常有用的接口,它允许我们在 Servlet 容器启动或终止 Web 应用时执行一些操作,例如加载数据库中的数据,初始化资源等。
在Spring Boot中,监听器是用来响应特定事件的组件,例如Web应用程序的启动和关闭。`MyListener`类实现了`ServletContextListener`接口,这个接口有两个主要方法:`contextInitialized`和`contextDestroyed`。当Web...
在`contextInitialized`方法中,你可以执行任何需要在应用启动时进行的初始化操作,例如创建数据库连接池、初始化缓存或者创建自定义对象容器。这正是这个例子的核心——创建一个自定义容器。你可以根据需求设计这个...
当Web应用程序启动时,服务器会调用`contextInitialized`方法,而在应用程序关闭时调用`contextDestroyed`。开发者可以重写这些方法以执行特定的初始化或清理任务。 在Spring MVC中,`ServletContextListener`的一...
tomcat启动|退出执行事件类: ...// 删除启动服务器时建立的文件 } // 服务器启动时执行该事件 public void contextInitialized(ServletContextEvent sce) { WriteFile();// 添加一个新的文本文件 }
通过创建ServletContextListener监听器,socket来实现tcp/ip协议客户端数据的接收功能。这是一个maven项目,直接导入eclipse即可运行,此处监听的是9092端口,将项目运行起后,可以对其端口使用情况进行查看,在...
1. 应用初始化:在Web应用启动时,执行一次性设置任务,如加载配置、数据库连接池初始化等。 2. 会话管理:监听Session的创建、销毁,以便统计在线用户、处理会话超时等。 3. 请求统计:记录请求次数、响应时间等,...
因此,我们可以在这两个方法中分别添加启动和停止后台任务的代码。 **使用Quartz进行任务调度** Quartz是一个强大的任务调度框架,支持复杂的定时任务设置。在Web应用中,我们可以利用Quartz来定义我们的任务(Job...
本案例“timer随tomcat启动案例”就是针对这种情况的一个实例,它利用了Java的定时器(Timer)类和Tomcat的生命周期管理来实现在Tomcat服务器启动时自动运行的任务。 首先,我们要理解`Timer`类是Java.util包下的一...
同时,需要使用ServletContextListener来监听Servlet上下文的创建和销毁,以便在Servlet上下文创建时启动UDP监听线程。 下面是使用ServletContextListener实现UDP监听的示例代码: 首先,需要创建一个实现...
1. **监听器**:通过`ServletContextListener`接口来监听Web容器的启动和关闭事件。 2. **定时器**:使用`java.util.Timer`类来实现任务的定时调度。 3. **自定义任务**:定义一个接口或抽象类来表示具体要执行的...
Java 提供了一个名为 ServletContextListener 的接口,该接口可以监听 Servlet 容器的生命周期事件,包括项目启动和关闭事件。我们可以实现这个接口,创建一个监听器类,来执行项目启动时的指定方法。 下面是一个...
1. **ServletContextListener**:监听ServletContext对象的生命周期事件,例如在Web应用程序启动和关闭时触发。 2. **ServletRequestListener**:监听ServletRequest对象的创建和销毁,通常与HTTP请求的开始和结束相...
在Java EE(Java Platform, Enterprise Edition)开发中,Tomcat是一个广泛应用的开源Servlet容器,它遵循Java Servlet和JavaServer ...这个机制在一些需要在服务器启动时进行预处理或者初始化任务的场景中非常有用。
结合 `ServletContextListener` 可以实现应用启动和关闭时的自动化管理,确保定时任务的生命周期与应用服务器同步。这种机制在许多实际应用场景中都非常实用,如监控、数据同步、定时邮件发送等。
- 缓存管理:在Web应用启动时加载缓存,在关闭时清除。 - 统计分析:统计在线用户、访问量等。 - 安全控制:监控敏感操作,防止非法访问。 配置监听器通常在`web.xml`部署描述符中完成,或者在Servlet 3.0及以上...