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

时间:2021-11-14 13:20:23

     一  定义框架配置项

   在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配置的为准。

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