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. 关于JAVA正则匹配空白字符的问题(全角空格与半角空格)

    今天遇到一个字符串,怎么匹配空格都不成功!!! 我把空格复制到test.properties文件 显示“\u3000” ,这是什么? 这是全角空格!!! 查了一下    \s    不支持全角 1.& ...

  2. Java多线程调试如何完成信息输出处理

    转载自:http://developer.51cto.com/art/201003/189078.htm Java多线程调试是很繁琐的,但是还是需要我们不断进行相关的学习.下面我们就来看看在Java多 ...

  3. webpack 配置学习笔记

    最简单的 webpack 配置 const path = require('path') module.exports = { entry: './app/index.js', output: { p ...

  4. [BZOJ1010][HNOI2008]玩具装箱toy 解题报告

    Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...

  5. bzoj 2330 SCOI2011糖果 查分约束系统

    就根据题目中给的约束条件建图就行了 需要注意的是,我们要做的是最长路,因为需要约束每个点都是大于0 那么可以建一个超级源指向所有点,超级源的dis是1,边长为0 那么这样做最长路就可以了 好了我们这么 ...

  6. 智能合约安全-parity多重签名钱包安全漏洞

    漏洞原因: 因为initWallet函数是公开函数( public function) , 攻击者调用initWallet,重新初始化钱包会把之前合约钱包所有者覆盖, 即可改变钱包所有者. 漏洞代码: ...

  7. python3 time、random、hashlib模块

    一.时间模块时间的几种形式:时间戳,结构化时间,字符串时间 import time print(time.time()) # 仅仅是当前时间的时间戳 float print(time.localtim ...

  8. 转:selenium webdriver+python基本操作

    转自: http://blog.163.com/ly676830315@126/blog/static/1017337222013102310617946/ 导入模块: from selenium i ...

  9. System and method for parallel execution of memory transactions using multiple memory models, including SSO, TSO, PSO and RMO

    A data processor supports the use of multiple memory models by computer programs. At a device extern ...

  10. (接口自动化)Python3操作MySQL数据库

    基础语法: import pymysql #导入模块 conn = pymysql.connect(host='localhost',user='root', passwd='123456', db= ...