zoukankan      html  css  js  c++  java
  • context容器上下文件

    在web项目中想要获取哪个bean,得先得到容器上下文context

     1 public class MyLoaderListener extends ContextLoader implements ServletContextListener {
     2     private static final Logger logger = LoggerFactory.getLogger(MyLoaderListener.class);
     3 
     4     @Override
     5     public void contextInitialized(ServletContextEvent servletContextEvent) { 
    7
    ApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContextEvent.getServletContext()); 8 MyBeanFactory.setContext(context); 15 } 16 17 @Override 18 public void contextDestroyed(ServletContextEvent servletContextEvent) { 20 } 21 }
    ContextLoader 类能获取WebApplicationContext
    ServletContextListener 接口的
    public void contextInitialized(ServletContextEvent servletContextEvent) 方法初始化
    public void contextDestroyed(ServletContextEvent servletContextEvent) 方法销毁

    MyLoaderListener 类将ApplicationContext 塞比例MyBeanFactory类
     1 public final class MyBeanFactory {
     2 
     3     private static ApplicationContext context;
     4 
     5     public static void setContext(ApplicationContext context) {
     6         MyBeanFactory.context = context;
     7     }
     8 
     9     public static Object getBean(String beanName) {
    10         return context.getBean(beanName);
    11     }
    12 }
    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() 方法被调用,所以在里面保存缓存的更改。将更改后的缓存保存回文件或者数据库,更新原来的内容。

  • 相关阅读:
    图片上传-下载-删除等图片管理的若干经验总结3-单一业务场景的完整解决方案
    图片上传-下载-删除等图片管理的若干经验总结2
    HDU 1195 Open the Lock
    HDU 1690 Bus System
    HDU 2647 Reward
    HDU 2680 Choose the best route
    HDU 1596 find the safest road
    POJ 1904 King's Quest
    CDOJ 889 Battle for Silver
    CDOJ 888 Absurdistan Roads
  • 原文地址:https://www.cnblogs.com/ngy0217/p/9016217.html
Copyright © 2011-2022 走看看