zoukankan      html  css  js  c++  java
  • Struts2自定义初始化及Properties文件操作

    利用Struts框架开发java web项目,需要进行自己的初始化工作。这个过程常常需要操作配置文件Properties,而且要求在系统初始化的阶段完成。

    首先,需要建立properties文件:conf.properties,文件保存于src目录下。然后需要对该文件进行操作:

     /*******************

     * read and write properties file
     * @author 60874
     *
     
    */
    public class RWProp {

        private String propfile;

        protected String readProperty(String key) throws Exception {
            InputStream iStream = null;
            FileInputStream fis = null;
            try {
                Properties prop = new Properties();
                fis = new FileInputStream(propfile);
                iStream = new BufferedInputStream(fis);
                prop.load(iStream);
                return prop.getProperty(key);
            } catch (Exception e) {
                // TODO: handle exception
                throw e;
            } finally {
                if (fis != null) {
                    fis.close();
                }
                if (iStream != null) {
                    iStream.close();
                }
            }
        }

        @SuppressWarnings("unchecked")
        protected Map<String, String> readProperty() throws Exception{
            InputStream iStream = null;
            FileInputStream fis = null;
            try {
                Properties prop = new Properties();
                fis = new FileInputStream(propfile);
                iStream = new BufferedInputStream(fis);
                prop.load(iStream);
                Enumeration<String> en = (Enumeration<String>) prop.propertyNames();
                Map<String, String> propMap = new HashMap<String, String>();
                while (en.hasMoreElements()) {
                    String key = (String) en.nextElement();
                    String value = prop.getProperty(key);
                    propMap.put(key, value);
                }
                return propMap;
            } catch (Exception e) {
                // TODO: handle exception
                throw e;
            }finally {
                if (fis != null) {
                    fis.close();
                }
                if (iStream != null) {
                    iStream.close();
                }
            }
        }

        protected Boolean writeProperties(String key, String value) throws Exception {
            if (key == null || key.trim().length() == 0) {
                throw new Exception("parameter: key can not be null!");
            }
            FileInputStream fis = null;
            OutputStream oStream = null;
            try {
                fis = new FileInputStream(propfile);
                Properties prop = new Properties();
                prop.load(fis);
                oStream = new FileOutputStream(propfile);
                prop.setProperty(key, value);
                prop.store(oStream, "Update " + key + " value");
                return true;
            } catch (Exception e) {
                // TODO: handle exception
                throw e;
            } finally {
                if (fis != null) {
                    fis.close();
                }
                if (oStream != null) {
                    oStream.close();
                }
            }
        }

        protected int writeProperties(Map<String, String> propMap) throws Exception {
            if (propMap == null || propMap.size() == 0) {
                throw new Exception("parameter: propMap can not be null!");
            }
            FileInputStream fis = null;
            OutputStream oStream = null;
            try {
                fis = new FileInputStream(propfile);
                Properties prop = new Properties();
                prop.load(fis);
                oStream = new FileOutputStream(propfile);
                int count = 0;
                Iterator<Entry<String, String>> iterator = propMap.entrySet()
    .iterator();
                while (iterator.hasNext()) {
                    Entry<String, String> entry = iterator.next();
                    if (entry.getKey() != null && entry.getKey().length() > 0) {
                        prop.setProperty(entry.getKey(), entry.getValue());
                        prop.store(oStream, null);
                        count ++;
                    }
                }
                return count;
            } catch (Exception e) {
                // TODO: handle exception
                throw e;
            } finally {
                if (fis != null) {
                    fis.close();
                }
                if (oStream != null) {
                    oStream.close();
                }
            }
        }

        protected String getPropfile() {
            return propfile;
        }

        protected void setPropfile(String propfile) {
            this.propfile = propfile;
        }

    }

     该类可以读取、写入properties文件。这里的方法声明为protected,就是不希望外部的程序直接操作这些方法(尤其是修改配置文件的方法)。因为有些属性我们不希望外部应用程序直接修改。

    于是,在此基础上,再封装一层,命名为Property。该类中对配置文件的各个项进行操作并对外提供接口。对于不希望外部修改的属性,其set方法置为private或protected。并在该类中创建init()方法和reload(), save()方法。

    public static void init() {….}

    public static void reload() {….}

    public static void save() {….}

    public static void save(String key, String value) {….} 

     ======================================

    以上是操作配置文件的封装。OK, 现在我们需要在系统启动的时候自动加载配置文件的信息。编写一个类,实现ServletContextListener接口。

     public class InitSys implements ServletContextListener {


        private static Logger logger = Logger.getLogger(InitSys.class);

        public void contextDestroyed(ServletContextEvent sce) {
            // TODO Auto-generated method stub

        }

        public void contextInitialized(ServletContextEvent sce) {
            // TODO Auto-generated method stub
            logger.info("trying to initialize CMail >>>>>>");
            String propertyfile = sce.getServletContext().getRealPath(
                    "/WEB-INF/classes/" + SParam.PROPERTY_FILE);
            Property.setPropfile(propertyfile);
            Property.init();
            logger.info("**********************");
            logger.info("CMAIL SYSTEM VERSION " + Property.getVersion());
            logger.info("Domain at: " + Property.getDomain());
            logger.info("**********************");
            logger.info("<<<<<< initialize CMail");
        }

    }

     然后在web.xml配置文件中配置该类,使得系统初始化时自动加载它。

     <listener>

        <listener-class>com.csc.mail.jsh.config.inisys.InitSys</listener-class>
    </listener>

     DONE!

  • 相关阅读:
    javascript优化--10模式(设计模式)01
    javascript优化--09模式(代码复用)02
    限制字符个数显示
    title
    点选词高亮算法
    ng-repeat嵌套的$index
    console.log的问题
    outsideClick 功能,探索
    input 框的 placeholder 另类实现
    ie9 与 placeholder 问题
  • 原文地址:https://www.cnblogs.com/xuhn/p/2678116.html
Copyright © 2011-2022 走看看