1.web.xml中配置

  <!-- 加载配置文件 -->
  <listener
    <description>ServletContextListener</description
    <listener-class>com.lanhetech.application.ContextInitListener</listener-class
  </listener>

2.加载

import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.log4j.Logger;
// 加载配置文件到application中
// test -- ok
public class ContextInitListener implements ServletContextListener {
    private static Logger logger = Logger.getLogger(ContextInitListener.class);
    // web项目通常来说,一般来说相对路径是在/WEB-INF目录下
    private static final String BUSINESS_LOGIC_CONFIG_FILE_NAME = "business_logic.properties"// 业务逻辑的配置文件名
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        logger.info("自定义加载配置文件监听器销毁!");
    }
    @Override
    public void contextInitialized(ServletContextEvent contextEvent) {
        logger.info("自定义加载配置文件监听器初始化!");
        // 1.装载配置文件
        Map<String, String> configsMap = this.loadBusinessLogicConfig(contextEvent);
        // 2.将配置加载到内存中Application
        this.loadConfigToApplication(contextEvent, configsMap);
        logger.info("自定义加载配置文件监听器初始化!完成!");
    }
    // 装载配置文件
    private Map<String, String> loadBusinessLogicConfig(ServletContextEvent contextEvent) {
        logger.info("开始装载配置文件!");
        // 加载配置文件
        Properties props = new Properties();
        try {
            String web_inf = contextEvent.getServletContext().getRealPath("/WEB-INF"); // 防止转义
            String loadPath = web_inf + "//" + BUSINESS_LOGIC_CONFIG_FILE_NAME;
            logger.info("加载配置文件路径:" + loadPath);
            props.load(new FileInputStream(loadPath));
        catch (Exception ex) {
            logger.error("加载配置文件失败!!!!");
            return null;
        }
        // 解析配置文件
        Map<String, String> map = new HashMap<String, String>((Map) props);
        logger.info("开始装载配置文件!完成!");
        return map;
    }
    // 将配置加载到内存中Application
    private void loadConfigToApplication(ServletContextEvent contextEvent, Map<String, String> configsMap) {
        logger.info("开始写入配置到内存中!");
        if (configsMap == null) {
            logger.error("配置参数为null,写入失败!!!");
            return;
        }
        // 将配置文件里的值装入context属性,这样可以在JSP,SERVLET里调用
        ServletContext context = contextEvent.getServletContext();
        for (Entry<String, String> entry : configsMap.entrySet()) {
            logger.info("写入的key:" + entry.getKey() + "  value:" + entry.getValue());
            context.setAttribute(entry.getKey(), entry.getValue());
        }
        logger.info("开始写入配置到内存中!完成!");
    }
}

3.Spring中使用:

WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();    
ServletContext servletContext = webApplicationContext.getServletContext(); 
       
logger.info("info获取请求:用户登录方法执行!"+  servletContext.getAttribute("sm2_sign_ip"));

web 中加载配置文件的更多相关文章

  1. Spring中加载配置文件的方式

    原文:http://blog.csdn.net/snowjlz/article/details/8158560 Spring 中加载XML配置文件的方式,好像有3种, XML是最常见的Spring 应 ...

  2. Java中加载配置文件的集中方式,以及利用ClassLoader加载文件 .

    我们往常进行文件的加载的时候 用到的都是  FileInputStream进行 文件的加载比如下面一个例子 : InputStream in=FileInputStream("1.prope ...

  3. spring controller中@Value取不到applicationContext.xml中加载配置文件的问题

    原因还未查证: http://sunjun041640.blog.163.com/blog/static/256268322014127113844746/ 在使用spring mvc时,实际上是两个 ...

  4. .Net Core Web应用加载读取Json配置文件

    ⒈添加Json配置文件并将“复制到输出目录”属性设置为“始终复制” { "Logging": { "LogLevel": { "Default&quo ...

  5. 想要配置文件生效 需要通过添加到web.xml加载到内存中

    想要配置文件生效 需要通过添加到web.xml加载到内存中

  6. spring的配置文件在web.xml中加载的方式

    web.xml加载spring配置文件的方式主要依据该配置文件的名称和存放的位置不同来区别,目前主要有两种方式. 1.如果spring配置文件的名称为applicationContext.xml,并且 ...

  7. Spring中加载xml配置文件的六种方式

    Spring中加载xml配置文件的六种方式 博客分类: Spring&EJB XMLSpringWebBeanBlog  因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件的形式装 ...

  8. unreal3对象属性自动从配置文件中加载的机制

    unrealscript中有两个与属性自动配置相关的关键字: config/globalconfig 当把它们应用于属性时,对象在创建后,该属性的初始值会被自动设置为相对应ini文件中的值. 举例来说 ...

  9. springboot属性类自动加载配置文件中的值

    springboot属性类自动加载配置文件中的值,如Person类加载在yml中配置的name,age等属性值,可以通过如下步骤获取: 类上添加@ConfigurationProperties注解,p ...

随机推荐

  1. Android推送使用--文章集锦

    Android之基于百度云推送IM Android实现推送方式解决方案 Android消息推送(一)--AndroidPn(XMPP协议)Demo版到正式上线 采用XMPP协议实现Android推送 ...

  2. Linux emacs考场配置及对拍脚本

    emacs配置(待补) (global-set-key [f9] 'compile) (global-set-key [f10] 'gud-gdb) (global-set-ket (kbd &quo ...

  3. cube中的判断类型

    import { createAddAPI } from '../util' const DATE_RE = /^(1|2)\d{3}[.\-/]\d{1,2}[.\-/]\d{1,2}$/ cons ...

  4. Python学习笔记 - day2 - PyCharm的基本使用

    什么是IDE 开始学习的小白同学,一看到这三个字母应该是懵逼的,那么我们一点一点来说. 既然学习Python语言我们就需要写代码,那么代码写在哪里呢? 在记事本里写 在word文档里写 在sublim ...

  5. [Shell] shell 脚本循环恢复的问题

    在一个shell脚本中,我大概执行了如下一个脚本: ...} do ...} do ...} do done done done 假设上面的sleep 10秒就是代表我的程序需要执行10秒之久.而现在 ...

  6. 内核中的多点触摸协议文档 Multi【转】

    转自:http://www.arm9home.net/read.php?tid=24754 前段时间改写了一个GT801的内核驱动,仔细阅读 MT Event 上报的时候,发现这个驱动是针对 Andr ...

  7. 关于preempt_enable 和 preempt_disable 【转】

    转自:http://blog.chinaunix.net/uid-8478094-id-2031177.html 关于preempt_enable 和 preempt_disable 允许抢占和禁止抢 ...

  8. Linux C程序异常退出怎么办——core文件帮你忙

    Linux C程序异常退出怎么办——core文件帮你忙 http://blog.csdn.net/zhu2695/article/details/51512138

  9. [ kvm ] 进程的处理器亲和性和vCPU的绑定

    cpu调用进程或线程的方式: Linux内核的进程调度器根据自有的调度策略将系统中的一个进程调度到某个CPU上执行.一个进程在前一个执行时间是在cpuM上运行,而在后一个执行时间则是在cpuN上运行, ...

  10. selenium 消息框元素定位处理

    以下内容来自于“风少”的博客 <元素定位:selenium消息框处理 (alert.confirm.prompt)> 基础普及 alert对话框 .细分三种,Alert,prompt,co ...