将properties文件的配置设置为整个Web应用的全局变量实现方法

四大作用域:

Web应用中的变量存放在不同的jsp对象中,会有不一样的作用域,四种不同的作用域排序是 pageContext < request < session < application;

1、pageContext:页面域,仅当前页面有效,离开页面后,不论重定向还是转向(即无论是redirect还是forward),pageContext的属性值都失效;

2、request:请求域,在一次请求中有效,如果用forward转向,则下一次请求还可以保留上一次request中的属性值,而redirect重定向跳转到另一个页面则会使上一次request中的属性值失效;

3、session:会话域,在一次会话过程中(从浏览器打开到浏览器关闭这个过程),session对象的属性值都保持有效,在这次会话过程,session中的值可以在任何页面获取;

4、application:应用域,只要应用不关闭,该对象中的属性值一直有效,并且为所有会话所共享。

利用ServletContextListener监听器,一旦应用加载,就将properties的值存储到application当中

现在需要在所有的jsp中都能通过EL表达式读取到properties中的属性,并且是针对所有的会话,故这里利用application作用域,

那么什么时候将properties中的属性存储到application呢?因为是将properties的属性值作为全局的变量以方便任何一次EL的获取,所以在web应用加载的时候就将值存储到application当中,

这里就要利用ServletContextListener:

ServletContextListener是Servlet API 中的一个接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。

当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,该事件由ServletContextListener 来处理。

具体步骤如下:

1、新建一个类PropertyListenter实现 ServletContextListener接口的contextInitialized方法;

2、读取properties配置文件,转存到Map当中;

3、使用ServletContext对象将Map存储到application作用域中;

/**
 * 设值全局变量
 * @author meikai
 * @version 2017年10月23日 下午2:15:19
 */
public class PropertyListenter implements ServletContextListener {

 /* (non-Javadoc)
  * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
  */
 @Override
 public void contextDestroyed(ServletContextEvent arg0) {
  // TODO Auto-generated method stub

 }

 /* (non-Javadoc)
  * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
  */
 @Override
 public void contextInitialized(ServletContextEvent sce) {

  /**
   * 读取properties文件
   *
   */
  final Logger logger = (Logger) LoggerFactory.getLogger(PropertyListenter.class);

  Properties properties = new Properties(); 

  InputStream in = null;
  try {
   //通过类加载器进行获取properties文件流
   in = PropertiesUtil.class.getClassLoader().getResourceAsStream("kenhome-common.properties");
   properties.load(in);

  } catch (FileNotFoundException e) {
   logger.error("未找到properties文件");
  } catch (IOException e) {
   logger.error("发生IOException异常");
  } finally {
   try {
    if(null != in) {
     in.close();
    }
   } catch (IOException e) {
    logger.error("properties文件流关闭出现异常");
   }
  }

  /**
   * 将properties文件转存到map
   */
  Map<String, String> pros = new HashMap<String,String>((Map)properties);

  /**
   * 将Map通过ServletContext存储到全局作用域中
   */
  ServletContext sct=sce.getServletContext(); 

  sct.setAttribute("pros", pros);

 }

}

4、在web.xml中配置上面的的监听器PropertyListenter:

<!-- 全局变量监听器,读取properties文件,设值为全局变量 -->
 <listener>
  <listener-class>com.meikai.listener.PropertyListenter</listener-class>
 </listener> 

配置好后,运行Web应用,就能在所有的jsp页面中用EL表达式获取到properties中的属性值了。

以上这篇将properties文件的配置设置为整个Web应用的全局变量实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 将properties文件的配置设置为整个Web应用的全局变量实现方法

    四大作用域: Web应用中的变量存放在不同的jsp对象中,会有不一样的作用域,四种不同的作用域排序是 pageContext < request < session < application; 1.pageContext:页面域,仅当前页面有效,离开页面后,不论重定向还是转向(即无论是redirect还是forward),pageContext的属性值都失效: 2.request:请求域,在一次请求中有效,如果用forward转向,则下一次请求还可以保留上一次request中的属性值,

  • 基于redis.properties文件的配置及说明介绍

    在使用到redis连接池时,需要进行一些redis相关配置,redis.properties文件是由编程者自己在项目classpath路径(如eclipse的src)下建立的,并非从redis安装包中获取的. 1.redis.properties文件的建立 在eclipse中找到相应的项目,选择File-->New-->File,选中项目中的src目录,填入文件名称redis.properties,然后Finish就可以了. 2.redis.properties文件的配置与说明 redis.t

  • Spring中配置和读取多个Properties文件的方式方法

    一个系统中通常会存在如下一些以Properties形式存在的配置文件 1.数据库配置文件demo-db.properties: database.url=jdbc:mysql://localhost/smaple database.driver=com.mysql.jdbc.Driver database.user=root database.password=123 2.消息服务配置文件demo-mq.properties: #congfig of ActiveMQ mq.java.namin

  • Spring加载配置和读取多个Properties文件的讲解

    一个系统中通常会存在如下一些以Properties形式存在的配置文件 1.数据库配置文件demo-db.properties: database.url=jdbc:mysql://localhost/smaple database.driver=com.mysql.jdbc.Driver database.user=root database.password=123 2.消息服务配置文件demo-mq.properties: #congfig of ActiveMQ mq.java.namin

  • springboot代码,注解配置获取yml,properties文件的map即键值对

    目录 注解配置获取yml,properties文件map即键值对 yml获取自定义键值对 properties 获取自定义键值对 properties配置应用,为什么需要使用properties文件 注解配置获取yml,properties文件map即键值对 yml获取自定义键值对 yml中的键值对 test:   map:     key1: value1     key2: value2     key3: value3 pom中的依赖配置 <dependency>     <gro

  • .properties文件读取及占位符${...}替换源码解析

    前言 我们在开发中常遇到一种场景,Bean里面有一些参数是比较固定的,这种时候通常会采用配置的方式,将这些参数配置在.properties文件中,然后在Bean实例化的时候通过Spring将这些.properties文件中配置的参数使用占位符"${}"替换的方式读入并设置到Bean的相应参数中. 这种做法最典型的就是JDBC的配置,本文就来研究一下.properties文件读取及占位符"${}"替换的源码,首先从代码入手,定义一个DataSource,模拟一下JDB

  • springboot加载一个properties文件转换为map方式

    目录 加载一个properties文件转换为map 1.创建一个properties文件 2.在java中将该properties文件转换为map properties配置文件出现乱码 加载一个properties文件转换为map springboot中比较常见的获取properties中的值,就是直接在字段上面添加@Value的属性. 但有时候我们不确定key有多少,但是会有一定的规律(这个规律是根据业务来定的,如下),这时候我们就可以考虑将properties中的信息转换为一个map,然后根

  • java遍历properties文件操作指南

    在java项目开发过程中,使用properties文件作为配置基本上是必不可少的,很多如系统配置信息,文件上传配置信息等等都是以这种方式进行保存. 同时学会操作properties文件也是java基础. 复制代码 代码如下: public class PropertiesUtil { public static Map getFileIO(String fileName){ Properties prop = new Properties(); Map propMap=new HashMap()

  • SpringMVC配置多个properties文件之通配符解析

    目录 SpringMVC配置多个properties文件之通配符 xml文件中配置如下 解决方案是:利用通配符 多个SpringMVC项目配置统一管理 1.首先是properties文件 2.针对各类xml配置文件 SpringMVC配置多个properties文件之通配符 在springmvc中配置加载properties文件一般会在 xml文件中配置如下 <context:property-placeholder location="classpath:resources/proper

  • 如何通过properties文件配置web.xml中的参数

    目录 前言 实现思路 web.xml中需要修改的部分 filter.properties文件 PropUtils工具类 查看web.xml参数 启动服务器进行测试 web.xml 前言 因为公司项目需要,目前有本地环境.测试环境.开发环境.每次在将项目打包成war包的时候,都需要修改多处的配置,而使用maven的profile打包项目的时候,可以根据执行打包命令时所带的参数来进行自动修改. 但是这种方式只对properties文件生效,即可以自动修改properties中的参数,但是公司的项目有

随机推荐