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; } }
|
5.布署 ServletContextListener
你实现(implements)了 ServletContextListener 编译后,把它放在正确的WEB-INF/classes目录下,更改WEB-INF目录下的 web.xml文件,在web-app节点里添加
<listener>
<listener-class>MyServletContextListener</listener-class>
</listener>
|
分享到:
相关推荐
ServletContextListener的应用案例 项目启动:创建新的空表, 项目关闭:删除表 百度六祎,期...
ServletContextListener使用详解
通过创建ServletContextListener监听器,socket来实现tcp/ip协议客户端数据的接收功能。这是一个maven项目,直接导入eclipse即可运行,此处监听的是9092端口,将项目运行起后,可以对其端口使用情况进行查看,在...
NULL 博文链接:https://chenhua-1984.iteye.com/blog/374683
ServletContextListener完成在线人数统计和显示人员列表
在SpringMVC中利用ServletContextListener初始化数据到内存
主要介绍了Java基于ServletContextListener实现UDP监听,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
听众 ServletContextListener,sesson,请求侦听器
本方案的原理是写一个实现了ServletContextListener接口的类,该类中有两个方法:public void contextInitialized,它是在应用启动时调用;另一个方法是:public void contextDestroyed,该方法是在应用结束时调用。
JavaWeb新版教程. jsp--ServletContextListener监听器演示.avi
其中一种比较好的方式,是通过实现ServletContextListener接口进行坚挺,重写contextInitialized方法,实现自己需要进行的初始化操作,之后在web.xml中添加相应的listner,tomcat在启动服务时会调用相应方法。...
用于将 Web 应用程序用作 Web 套接字客户端的最小 Maven 脚手架。 基于Maven 包括嵌入式(默认情况下热重载)。 构建状态: 安装 克隆这个 repo mvn clean install 跑步 mvn jetty:run 控制台日志应如下所示。 ...
public class Test extends HttpServlet implements ServletContextListener { // 服务器停止时执行该事件 public void contextDestroyed(ServletContextEvent sce) { DeleteFile();// 删除启动服务器时建立的...
企业drp系统经典实现。 包括: v1.0 * 用户添加 v1.1 * 采用Ajax判断用户代码是否重复 ... * ServletContextListener v3.1 * JfreeChart的应用 v3.2 * 采用Ajax实现下拉列表的联动 v3.3 * 验证码的使用
有时候在开发Web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法。 可以采用在WEB-INF/...
编写程序,提供用户登录界面。 登录成功后,提示用户上次登录时间,登录IP地址信息。 保存用户的登录信息可以使用XML,也可以使用纯文本文件。... 要求使用ServletContextListener,要求理解Listener.
为应用添加Servlet,Filter或ServletContextListener ii. 64.2. 改变HTTP端口 iii. 64.3. 使用随机未分配的HTTP端口 iv. 64.4. 发现运行时的HTTP端口 v. 64.5. 配置SSL vi. 64.6. 配置Tomcat vii. 64.7. 启用Tomcat...
该框架的主要目标是以快速简单的方式提供舒适的开发Web应用程序的经验。 许多想法都来自Node.js Express,因此名称为JExpress-Jago Express。 我也受到Golang,.Net,Python的启发。 这是最小,最简单的Web框架,可...
介绍了Java定时执行任务,给出了如何使用ServletContextListener实现定时运行java某个方法的例子,简单易用。