context容器上下文件
在web项目中想要获取哪个bean,得先得到容器上下文context
 public class MyLoaderListener extends ContextLoader implements ServletContextListener {
     private static final Logger logger = LoggerFactory.getLogger(MyLoaderListener.class);
     @Override
     public void contextInitialized(ServletContextEvent servletContextEvent) { 
 7         ApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContextEvent.getServletContext());
         MyBeanFactory.setContext(context);
     }
     @Override
     public void contextDestroyed(ServletContextEvent servletContextEvent) {
     }
 }
ContextLoader 类能获取WebApplicationContext
ServletContextListener 接口的
public void contextInitialized(ServletContextEvent servletContextEvent) 方法初始化
public void contextDestroyed(ServletContextEvent servletContextEvent) 方法销毁
MyLoaderListener 类将ApplicationContext 塞比例MyBeanFactory类
 public final class MyBeanFactory {
     private static ApplicationContext context;
     public static void setContext(ApplicationContext context) {
         MyBeanFactory.context = context;
     }
     public static Object getBean(String beanName) {
         return context.getBean(beanName);
     }
 }
MyBeanFactory 类的静态方法,可以随时获取任务bean
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() 方法被调用,所以在里面保存缓存的更改。将更改后的缓存保存回文件或者数据库,更新原来的内容。
context容器上下文件的更多相关文章
- 深入理解Tomcat系列之五:Context容器和Wrapper容器
		
前言 Context容器是一个Web项目的代表,主要管理Servlet实例,在Tomcat中Servlet实例是以Wrapper出现的.如今问题是怎样才干通过Context容器找到详细的Servlet ...
 - Tomcat  Context容器和Wrapper容器
		
前言 Wrapper容器 前言 Context容器是一个Web项目的代表,主要管理Servlet实例,在Tomcat中Servlet实例是以Wrapper出现的,现在问题是如何才能通过Context容 ...
 - 一个或多个listeners启动失败,更多详细信息查看对应的容器日志文件
		
碰到这个问题很多次,每次碰到都是去百度找.但是,不尽人意,好在最后还是解决了,所以写下总结. 报错内容: org.apache.catalina.core.StandardContext.startI ...
 - k8s容器拷贝文件到本地、本地文件拷贝到k8s容器
		
k8s容器拷贝文件到本地 kubectl cp qzcsbj/order-b477c8947-tr8rz:/tmp/jstack.txt /root/test/jstack.txt 本地文件拷贝到k8 ...
 - Tomcat下使用C3P0配置JNDI数据源(在项目的META-INF目录下创建context.xml的文件)
		
一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar 下载完成之后得到一个压缩包
 - asp.net core 发布到 docker 容器时文件体积过大及服务端口的配置疑问
		
在 asp.net core 发布时,本人先后产生了3个疑问. 1.发布的程序为什么不能在docker容器中运行 当时在window开发环境中发布后,dotnet xxx.dll可以正常运行:但放入d ...
 - docker 非root用户修改mount到容器的文件出现“Operation not permitted
		
使用环境centos7 x86-64 内核版本4.19.9 docker使用非root用户启动,daemon.json配置文件内容如下: # cat daemon.json { "usern ...
 - docker容器中文件的上传与下载
		
原文地址:传送门 1.上传文件 docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH [OPTIONS]:保持源目标中的链接,例: docker cp ...
 - require.context批量引入文件
		
require.context 是什么 require.context 是由webpack内部实现,require.context在构建时,webpack 在代码中进行解析. 当需要引入文件夹内多个文 ...
 
随机推荐
- linux下mysql定时备份,数据保存周期一周
			
以下脚本来自网络,版权归原作者所有(推荐放在夜间自动备份,用cron制定计划任务) crontab -e 0 3 * * * /var/erp/data/mysql_backup.sh #!/bin/ ...
 - Eclipse常用快捷方式
			
Suggestions (Ctrl+1) 建议,比如创建局部变量 File Search (Ctrl+H) 在所有文件中查找关键字 Open Resource (Ctrl+Shift+R) 打开资源 ...
 - CnPack开发包基础库
			
unit CnCommon; {* |<PRE> ===================================================================== ...
 - MYSQL中重命名procedure的一种方法
			
最近有用到对存储过程(procedure)重命名的功能,在网上找了一下资料都没有讲到在mysql中是如何实现的,当然可以删掉再重建,但是应该有别的方法,在"mysql"这个数据库( ...
 - PHP-T
			
TP5目录结构 ├─application 应用目录 ├─extend 扩展类库目录(可定义) ├─public 网站对外访问目录 ├─runtime 运行时目录(可定义) ├─vendor 第三方类 ...
 - 【VS开发】C++线程安全
			
我们是多么渴望各种C++类都是多线程安全的,然而一旦涉及到对象间的交互,这样的渴望可能就只能是奢望了.下面,我们以设计一个双向链结点为例,看看要使其多线程安全将会带来一些什么问题. class Dou ...
 - nginx - 反向代理 - 配置文件 header - 日志log格式
			
server { listen ; server_name paas.service.consul; client_max_body_size 512m; access_log /data/bkdat ...
 - SolidWorks学习笔记2草图
			
几何约束 显示和隐藏约束 单个直线的约束 绘制一个直线,点击左侧的中的水平或者竖直,, 如果要删除改约束,右键绿色的小矩形,相关被约束的对象变成分红,点击删除即可. 两个对象之间的约束 点击一个对象, ...
 - mybatis学习(一)不使用 XML 构建 SqlSessionFactory
			
如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中: <dependency> <groupId>org.mybatis&l ...
 - ideal中运行manven常用操作
			
ideal中对项目打包,输入命令如下图所示: clean install -Dmaven.test.skip=true