J2EE的web项目里经常用到的类(3)

原创 2008年09月28日 17:21:00

Property文件在J2EE项目里经常储存一些“无关痛痒”的数据,但也要有专门的类来管理,因为是多线程访问,所以要实现线程的同步,毕竟property的数据不是存放在数据库里。

  1. import java.util.*;
  2. import java.io.*;
  3. import org.apache.commons.logging.Log;
  4. import org.apache.commons.logging.LogFactory;
  5. public class PropertyManager {
  6.     static protected Log log = LogFactory.getLog(PropertyManager.class);
  7.     private static PropertyManager manager = null;
  8.     private static Object managerLock = new Object();
  9.     private static String propsName = "/mypro.properties";
  10.     /**
  11.      * Returns a property.
  12.      *
  13.      * @param name the name of the property to return.
  14.      * @return the property value specified by name.
  15.      */
  16.     public static String getProperty(String name) {
  17.         if (manager == null) {
  18.             synchronized (managerLock) {
  19.                 if (manager == null) {
  20.                     manager = new PropertyManager(propsName);
  21.                 }
  22.             }
  23.         }
  24.         return manager.getProp(name);
  25.     }
  26.     /**
  27.      * Sets a property. If the property doesn't already exists, a new
  28.      * one will be created.
  29.      *
  30.      * @param name the name of the property being set.
  31.      * @param value the value of the property being set.
  32.      */
  33.     public static void setProperty(String name, String value) {
  34.         if (manager == null) {
  35.             synchronized (managerLock) {
  36.                 if (manager == null) {
  37.                     manager = new PropertyManager(propsName);
  38.                 }
  39.             }
  40.         }
  41.         manager.setProp(name, value);
  42.     }
  43.     /**
  44.      * Deletes a property. If the property doesn't exist, the method
  45.      * does nothing.
  46.      *
  47.      * @param name the name of the property to delete.
  48.      */
  49.     public static void deleteProperty(String name) {
  50.         if (manager == null) {
  51.             synchronized (managerLock) {
  52.                 if (manager == null) {
  53.                     manager = new PropertyManager(propsName);
  54.                 }
  55.             }
  56.         }
  57.         manager.deleteProp(name);
  58.     }
  59.     /**
  60.      * Returns the names of properties.
  61.      *
  62.      * @return an Enumeration of the Yazd property names.
  63.      */
  64.     public static Enumeration propertyNames() {
  65.         if (manager == null) {
  66.             synchronized (managerLock) {
  67.                 if (manager == null) {
  68.                     manager = new PropertyManager(propsName);
  69.                 }
  70.             }
  71.         }
  72.         return manager.propNames();
  73.     }
  74.     /**
  75.      * Returns true if the properties are readable. This method is mainly
  76.      * valuable at setup time to ensure that the properties file is setup
  77.      * correctly.
  78.      */
  79.     public static boolean propertyFileIsReadable() {
  80.         if (manager == null) {
  81.             synchronized (managerLock) {
  82.                 if (manager == null) {
  83.                     manager = new PropertyManager(propsName);
  84.                 }
  85.             }
  86.         }
  87.         return manager.propFileIsReadable();
  88.     }
  89.     /**
  90.      * Returns true if the properties are writable. This method is mainly
  91.      * valuable at setup time to ensure that the properties file is setup
  92.      * correctly.
  93.      */
  94.     public static boolean propertyFileIsWritable() {
  95.         if (manager == null) {
  96.             synchronized (managerLock) {
  97.                 if (manager == null) {
  98.                     manager = new PropertyManager(propsName);
  99.                 }
  100.             }
  101.         }
  102.         return manager.propFileIsWritable();
  103.     }
  104.     /**
  105.      * Returns true if the properties file exists where the path property
  106.      * purports that it does.
  107.      */
  108.     public static boolean propertyFileExists() {
  109.         if (manager == null) {
  110.             synchronized (managerLock) {
  111.                 if (manager == null) {
  112.                     manager = new PropertyManager(propsName);
  113.                 }
  114.             }
  115.         }
  116.         return manager.propFileExists();
  117.     }
  118.     private Properties properties = null;
  119.     private Object propertiesLock = new Object();
  120.     private String resourceURI;
  121.     /**
  122.      * Creates a new PropertyManager. Singleton access only.
  123.      */
  124.     private PropertyManager(String resourceURI) {
  125.         this.resourceURI = resourceURI;
  126.     }
  127.     /**
  128.      * 
  129.      * @param name the name of the property to get.
  130.      * @return the property specified by name.
  131.      */
  132.     protected String getProp(String name) {
  133.         //If properties aren't loaded yet. We also need to make this thread
  134.         //safe, so synchronize...
  135.         if (properties == null) {
  136.             synchronized (propertiesLock) {
  137.                 //Need an additional check
  138.                 if (properties == null) {
  139.                     loadProps();
  140.                 }
  141.             }
  142.         }
  143.         String property = properties.getProperty(name);
  144.         if (property == null) {
  145.             return null;
  146.         } else {
  147.             return property.trim();
  148.         }
  149.     }
  150.     /**
  151.      * Sets a property. Because the properties must be saved to disk
  152.      * every time a property is set, property setting is relatively slow.
  153.      */
  154.     protected void setProp(String name, String value) {
  155.         //Only one thread should be writing to the file system at once.
  156.         synchronized (propertiesLock) {
  157.             //Create the properties object if necessary.
  158.             if (properties == null) {
  159.                 loadProps();
  160.             }
  161.             properties.setProperty(name, value);
  162.             saveProps();
  163.         }
  164.     }
  165.     protected void deleteProp(String name) {
  166.         //Only one thread should be writing to the file system at once.
  167.         synchronized (propertiesLock) {
  168.             //Create the properties object if necessary.
  169.             if (properties == null) {
  170.                 loadProps();
  171.             }
  172.             properties.remove(name);
  173.             saveProps();
  174.         }
  175.     }
  176.     protected Enumeration propNames() {
  177.         //If properties aren't loaded yet. We also need to make this thread
  178.         //safe, so synchronize...
  179.         if (properties == null) {
  180.             synchronized (propertiesLock) {
  181.                 //Need an additional check
  182.                 if (properties == null) {
  183.                     loadProps();
  184.                 }
  185.             }
  186.         }
  187.         return properties.propertyNames();
  188.     }
  189.     /**
  190.      * Loads Yazd properties from the disk.
  191.      */
  192.     private void loadProps() {
  193.         properties = new Properties();
  194.         InputStream in = null;
  195.         try {
  196.             in = getClass().getResourceAsStream(resourceURI);
  197.             properties.load(in);
  198.         } catch (Exception e) {
  199.             log.error("Error reading  properties in PropertyManager.loadProps() ", e);
  200.         } finally {
  201.             try {
  202.                 in.close();
  203.             } catch (Exception e) {
  204.             }
  205.         }
  206.     }
  207.     /**
  208.      * Saves Yazd properties to disk.
  209.      */
  210.     private void saveProps() {
  211.         //Now, save the properties to disk. In order for this to work, the user
  212.         //needs to have set the path field in the properties file. Trim
  213.         //the String to make sure there are no extra spaces.
  214.         String path = properties.getProperty("path").trim();
  215.         OutputStream out = null;
  216.         try {
  217.             out = new FileOutputStream(path);
  218.             properties.store(out, "yazd.properties -- " + (new java.util.Date()));
  219.         } catch (Exception ioe) {
  220.             log.error(
  221.                 "There was an error writing yazd.properties to "
  222.                     + path
  223.                     + ". "
  224.                     + "Ensure that the path exists and that the Yazd process has permission "
  225.                     + "to write to it -- ",
  226.                 ioe);
  227.         } finally {
  228.             try {
  229.                 out.close();
  230.             } catch (Exception e) {
  231.             }
  232.         }
  233.     }
  234.     /**
  235.      * Returns true if the properties are readable. This method is mainly
  236.      * valuable at setup time to ensure that the properties file is setup
  237.      * correctly.
  238.      */
  239.     public boolean propFileIsReadable() {
  240.         try {
  241.             InputStream in = getClass().getResourceAsStream(resourceURI);
  242.             return true;
  243.         } catch (Exception e) {
  244.             return false;
  245.         }
  246.     }
  247.     /**
  248.      * Returns true if the yazd.properties file exists where the path property
  249.      * purports that it does.
  250.      */
  251.     public boolean propFileExists() {
  252.         String path = getProp("path");
  253.         if (path == null) {
  254.             return false;
  255.         }
  256.         File file = new File(path);
  257.         if (file.isFile()) {
  258.             return true;
  259.         } else {
  260.             return false;
  261.         }
  262.     }
  263.     /**
  264.      * Returns true if the properties are writable. This method is mainly
  265.      * valuable at setup time to ensure that the properties file is setup
  266.      * correctly.
  267.      */
  268.     public boolean propFileIsWritable() {
  269.         String path = getProp("path");
  270.         File file = new File(path);
  271.         if (file.isFile()) {
  272.             //See if we can write to the file
  273.             if (file.canWrite()) {
  274.                 return true;
  275.             } else {
  276.                 return false;
  277.             }
  278.         } else {
  279.             return false;
  280.         }
  281.     }
  282. }


java web项目常用的工具类——项目经验分享

数据库连接工具类   数据库连接工具类——仅仅获得连接对象 ConnDB.java [java] view plaincopy package ...
  • u011436878
  • u011436878
  • 2014年08月19日 16:24
  • 2462

J2EE项目中异常的设计与处理

异常设计 0.J2EE中的异常设计 3层结构 Dao,Service,Controller 异常处理原则: 应该在Controller...
  • he90227
  • he90227
  • 2015年10月22日 13:41
  • 2013

eclipse_j2ee运行web项目如何发布到Tomcat

看这篇博客之前呢,如果你的eclipse不小心没有配置Tomcat,那么请到我的另一篇博客中去配置吧~~~ 传送门 :http://blog.csdn.net/xujin_chen/article/...
  • xujin_chen
  • xujin_chen
  • 2016年12月08日 08:51
  • 2661

J2EE: Convention 零配置及其在springside3 mini-web中的使用

原文地址 从 struts2.1 版本开始, Convention Plugin 作为替换替换 Codebehind Plugin 来实现 Struts2 的零配置。 零配置并不...
  • hundsong
  • hundsong
  • 2011年11月18日 11:47
  • 1064

(转)J2EE WEB项目中获取相对路径与绝对路径的方法

Java中使用的路径,分为两种:绝对路径和相对路径。归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从...
  • lishirong
  • lishirong
  • 2014年12月02日 09:48
  • 346

j2ee的web项目,中文怎么被保存到数据库中的(其实最终是保存在计算机上的)

j2ee的web项目,中文怎么被保存到数据库中的(其实最终是保存在计算机上的)。 1第一步,提交form,post。 将页面中的中文,变成如上图的urlencode编码的格式,即%XX的形式。这个...
  • Ideality_hunter
  • Ideality_hunter
  • 2017年03月22日 12:40
  • 821

J2EE WEB项目中获取相对路径与绝对路径的方法

Java中使用的路径,分为两种:绝对路径和相对路径。归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从...
  • linzhichao12345
  • linzhichao12345
  • 2013年09月24日 16:04
  • 1097

AutoEE-自动智能开发平台-简单快速高效开发Web项目的J2EE开发平台

AutoEE-自动智能开发平台是一款使用当前主流框架搭建,并结合Velocity模板引擎和MyBatis Generator实现的高度可自定义、高度可配置的自动智能生成代码的开源的快速开发平台。 使用...
  • heishuang
  • heishuang
  • 2015年10月13日 16:21
  • 1641

标准版eclipse配置J2EE插件,使用maven创建web项目(spring JDBC)

1.标准版eclipse配置J2EE插件 网上教程很多,我只介绍一种傻瓜式的安装方法 help---->install new software-----> 在work with出键入你...
  • u014305991
  • u014305991
  • 2015年04月02日 22:16
  • 1261

j2ee的web项目中什么是转义?你真的了解转义吗?

一、例子1: 我想把“A”原样(是“A”而不是A)放入一个字符串。 String a=" "A" "; 这样会出问题,要么java编译器报错,要么变量a中不是我想要的“A”。 这时候,就要使用...
  • Ideality_hunter
  • Ideality_hunter
  • 2017年06月28日 10:09
  • 148
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:J2EE的web项目里经常用到的类(3)
举报原因:
原因补充:

(最多只允许输入30个字)