从零开始写javaweb框架笔记12-搭建轻量级JAVAWEB框架-定义框架配置项,加载配置项

     一  定义框架配置项

   在chapter3项目的src/main/resources目录下创建一个名为smart.propertiesd的文件,文件的内容如下:

smart.framework.jdbc.driver=com.mysql.jdbc.Driver
smart.framework.jdbc.url=jdbc:mysql://localhost:3306/jack
smart.framework.jdbc.username=root
smart.framework.jdbc.password=root

smart.framework.app.base_package=org.jack.smart4j
smart.framework.app.jsp_path=/WEB_INF/view/
smart.framework.app.asset_path=/asset/
前面几个配置比较好理解,就是数据库连接配置放到配置文件中,最后几个配置解释如下:


smart.framework.app.base_package=org.jack.smart4j

表示chapter3项目的基础包名  

smart.framework.app.jsp_path=/WEB_INF/view/
表示jsp的基础路径  
smart.framework.app.asset_path=/asset/
表示静态资源文件的基础路径,比如js,css,图片等


  二   加载框架配置项

          既然有了配置文件,那么我们需要获取配置文件的值。这是框架需要做的事情,我们在smart-frame项目中创建一个ConfigHelper助手类,让它来读取smart.properties配置文件。
   首先,我们需要在smart-frame项目中创建一个名为ConfigConstant的常量类,让它来维护配置文件中的相关配置项名称,代码如下:

package org.smart4j.framework;

/**
 * Created by jack on 2017/5/22.
 * 提供相关常量配置项
 */
public interface ConfigConstant {
    String CONFIG_FILE="smart.properties";
    String JDBC_DRIVER="smart.framework.jdbc.driver";
    String JDBC_URL="smart.framework.jdbc.url";
    String JDBC_USERNAME="smart.framework.jdbc.username";
    String JDBC_PASSWORD="smart.framework.jdbc.password";

    String APP_BASE_PACKAGE="smart.framework.app.base_package";
    String APP_JSP_PATH="smart.framework.app.jsp_path";
    String APP_ASSET_PATH="smart.framework.app.asset_path";
}

然后我们需要借助PropUtil工具类来实现ConfigHelper,PropUtil的代码,我们在前面chapter2的项目中已经给出了在这里,我们在给出该代码:

package org.smart4j.framework.org.smart4j.framework.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * Created by jack on 2015/12/26.
 * 属性文件工具类
 */
public final class PropsUtil {
    private static final Logger LOGGER = LoggerFactory.getLogger(PropsUtil.class);

    /*
    * 加载属性文件
    *
    * */
    public static Properties loadProps(String fileName) {
        Properties properties = null;
        InputStream inputStream = null;
        try {
            inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
            if (inputStream == null) {
                throw new FileNotFoundException(fileName + " file is not found!");
            }
            properties = new Properties();
            properties.load(inputStream);
        } catch (IOException e) {
            LOGGER.error("load properties file failure", e);
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    LOGGER.error("close input stream failure", e);
                }
            }
        }
        return properties;
    }

    /*
    * 获取字符型属性(默认为空字符串)
    *
    * */
    public static String getString(Properties props, String key) {
        return getString(props, key, "");
    }

    /*
    * 获取字符型属性(可指定默认值)
    * */
    public static String getString(Properties props, String key, String
            defaultValue) {
        String value = defaultValue;
        if (props.containsKey(key)) {
            value = props.getProperty(key);
        }
        return value;
    }

    /*
    * 获取数值类型属性(默认为0)
    * */
    public static int getInt(Properties props, String key) {
        return getInt(props, key, 0);
    }

    /*
    * 获取数值类型属性(可指定默认值)
    * */
    public static int getInt(Properties props, String key, int defaultValue) {
        int value = defaultValue;
        if (props.containsKey(key)) {
            value = CastUtil.castInt(props.getProperty(key));
        }
        return value;
    }

    /*
    * 获取布尔型属性(默认值为false)
    * */
    public static boolean getBoolean(Properties props, String key) {
        return getBoolean(props, key, false);
    }

    /*
    * 获取布尔型属性(可指定默认值)
    * */
    public static boolean getBoolean(Properties props, String key, Boolean defaultValue) {
        boolean value = defaultValue;
        if (props.containsKey(key)) {
            value = CastUtil.castBoolean(props.getProperty(key));
        }
        return value;
    }
}


在上面我们使用了CastUtil类,这个类,我们在前面也给出了,也是在chapter2项目中给出的,代码如下:

package org.smart4j.framework.org.smart4j.framework.util;

import org.apache.commons.lang3.StringUtils;

/**
 * Created by jack on 2017/5/22.
 * 转型操作工具类
 */
public class CastUtil {
    /*
    * 转为String型
    * */
    public static String castString(Object obj) {
        return CastUtil.castString(obj, "");
    }

    /*
    * 转为String型(提供默认值)
    * */
    public static String castString(Object obj, String defaultValue) {
        return obj != null ? String.valueOf(obj) : defaultValue;
    }

    /*
    * 转为double型
    * */
    public static double castDouble(Object obj) {
        return castDouble(obj, 0.0);
    }

    /*
    * 转为double型(提供默认值)
    * */
    public static double castDouble(Object obj, Double defaultValue) {
        double doubleValue = defaultValue;
        if (obj != null) {
            String strValue = castString(obj);
            if (StringUtils.isNotEmpty(strValue)) {
                try {
                    doubleValue = Double.parseDouble(strValue);
                } catch (NumberFormatException e) {
                    defaultValue = defaultValue;
                }

            }
        }
        return doubleValue;
    }

    /*
    * 转为long型
    * */
    public static long castLong(Object obj) {
        return castLong(obj, 0);
    }

    /*
     * 转为long型(提供默认值)
     * */
    public static long castLong(Object obj, long defaultValue) {
        long longValue = defaultValue;
        if (obj != null) {
            String strValue = castString(obj);
            if (StringUtils.isNotEmpty(strValue)) {
                try {
                    longValue = Long.parseLong(strValue);
                } catch (NumberFormatException e) {
                    longValue = defaultValue;
                }

            }
        }
        return longValue;
    }

    /*
    * 转为int型
    * */
    public static int castInt(Object obj) {
        return castInt(obj, 0);
    }

    /*
    * 转为int型(提供默值)
    * */
    public static int castInt(Object obj, int defaultValue) {
        int intValue = defaultValue;
        if (obj != null) {
            String strValue = castString(obj);
            if (StringUtils.isNotEmpty(strValue)) {
                try {
                    intValue = Integer.parseInt(strValue);
                } catch (NumberFormatException e) {
                    intValue = defaultValue;
                }

            }
        }
        return intValue;
    }

    /*
    * 转为boolean型
    * */
    public static boolean castBoolean(Object obj) {
        return castBoolean(obj, false);
    }

    /*
    * 转为boolean型(提供默认值)
    * */
    public static boolean castBoolean(Object obj, boolean defaultValue) {
        boolean booleanValue = defaultValue;
        if (obj != null) {
            booleanValue = Boolean.parseBoolean(castString(obj));
        }
        return booleanValue;
    }
}

 然后我们借助上面的帮助类,就可以获取smart.properties配置文件中的项,代码如下:

package org.smart4j.framework.helper;

import org.smart4j.framework.ConfigConstant;
import org.smart4j.framework.org.smart4j.framework.util.PropsUtil;

import java.util.Properties;

/**
 * Created by jack on 2017/5/22.
 * 属性文件助手类
 */
public class ConfigHelper {
    private static final Properties CONFIG_PROPS = PropsUtil.loadProps(ConfigConstant.CONFIG_FILE);
    /**
     * 获取JDBC驱动
     */
    public static String getJdbcDriver(){
        return PropsUtil.getString(CONFIG_PROPS, ConfigConstant.JDBC_DRIVER);
    }
    /**
     * 获取JDBC URL
     */
    public static String getJdbcUrl(){
        return PropsUtil.getString(CONFIG_PROPS,ConfigConstant.JDBC_URL);
    }
    /**
     * 获取JDBC 用户名
     */
    public static String getJdbcUsername(){
        return PropsUtil.getString(CONFIG_PROPS,ConfigConstant.JDBC_USERNAME);
    }
    /**
     * 获取JDBC 密码
     */
    public static String getJdbcPassword(){
        return PropsUtil.getString(CONFIG_PROPS,ConfigConstant.JDBC_PASSWORD);
    }
    /**
     * 获取应用基础包名
     */
    public static String getAppBasePackage(){
        return PropsUtil.getString(CONFIG_PROPS,ConfigConstant.APP_BASE_PACKAGE);
    }
    /**
     * 获取应用jsp路径
     */
    public static String getAppJspPath(){
        return PropsUtil.getString(CONFIG_PROPS,ConfigConstant.APP_JSP_PATH,"/WEB-INF/view");
    }
    /**
     * 获取应用静态资源路径
     */
    public static String getAppAssetPath(){
        return PropsUtil.getString(CONFIG_PROPS,ConfigConstant.APP_ASSET_PATH,"/asset");
    }
}

 在ConfigHelper类中,为smart.framework.app.jsp_path与smart.framework.app.asset_path配置项提供了默认值。也就是说,在smart.properties配置文件这两个配置项是可选的,如果不是特殊要求,可以修改这两个配置。最终以 smart.properties配置的为准。

在下一篇,我们开始开发一个类加载器。


 
  

你可能感兴趣的:(从零开始写javaweb框架笔记12-搭建轻量级JAVAWEB框架-定义框架配置项,加载配置项)