您的位置:首页 > 手游攻略 > 将properties文件的配置设置为整个Web应用的全局变量实现方式做法实用指南

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

作者:互联网  时间: 2026-09-05 10:00:02  

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“将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应用的全局变量实现方法就是分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多兼容脚本之家。

最新游戏

更多

Copyright©2010-2019. All rights reserved | 波波三国游戏官网|[email protected]

备案编号:湘ICP备2022015115号-4