? 版权声明:本文为博主原创文章,转载请注明出处
目录:
1.搭建轻量级Jave Web框架----------框架说明
2.搭建轻量级Java Web框架----------读取配置文件
说明:
搭建框架的第一步就是配置文件的读取,这里使用jdk自带的Properties类读取配置文件。
为了准确获取配置文件中的各个键值对的信息,还需要一个工具类进行强制类型转换。
读取过程中还需要进行一些非空的校验等,因此还需要一个工具类对String的一些常用操作进行封装。
总结一下,需要四个java类完成配置文件的读取。
ConfigConstant:属性文件常量类。将配置文件中的键都对应到java中的一个常量。
原因:若不使用常量去对应键,后续修改键的话需要修改整个项目。对应之后再修改键只需修改常量类中的对应即可。
PropsUtil:属性文件工具类。加载并读取配置文件中的各项信息。
CastUtil:强制类型转换工具类。实现一些常用的强制类型转换方法,如强制转换为String、int、double、long、boolean等。
原因:将常用的类型转换方法封装后,使用、维护都更为方便。
StringUtil:String型数值工具类。实现一些常用的String型数值的方法,如空、非空的判断等。
原因:commons-lang3包中的StringUtils类毕竟是第三方的,后续不知会不会进行修改。因此再次进行封装,维护和使用更为方便。
代码:
1.项目结构
2.pom.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" 3 ?????????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 ?????????xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 ????<modelVersion>4.0.0</modelVersion> 6 ?7 ????<groupId>org.unicorn</groupId> 8 ????<artifactId>unicorn</artifactId> 9 ????<version>1.0-SNAPSHOT</version>10 ????<packaging>jar</packaging>11 12 ????<dependencies>13 ????????<!-- slf4j + log4j -->14 ????????<dependency>15 ????????????<groupId>org.slf4j</groupId>16 ????????????<artifactId>slf4j-log4j12</artifactId>17 ????????????<version>1.7.21</version>18 ????????</dependency>19 ????????<!-- commons-lang3 -->20 ????????<dependency>21 ????????????<groupId>org.apache.commons</groupId>22 ????????????<artifactId>commons-lang3</artifactId>23 ????????????<version>3.4</version>24 ????????</dependency>25 ????</dependencies>26 27 </project>
3.ConfigConstant.java
1 package org.unicorn.constant; 2 ?3 /** 4 ?* 属性文件常量类 5 ?*/ 6 public interface ConfigConstant { 7 ?8 ????// 配置文件名称 9 ????String CONFIG_FILE = "corn.properties";10 11 ????// 数据库相关常量12 ????final String JDBC_DATABASE = "jdbc_database";// 数据库类型13 ????final String JDBC_URL = "jdbc_url";// 数据库url14 ????final String JDBC_DRIVER = "jdbc_driver";// 数据库驱动15 ????final String JDBC_USERNAME = "jdbc_username";// 数据库连接名16 ????final String JDBC_PASSWORD = "jdbc_password";// 数据库连接密码17 18 ????// 项目相关常量19 ????final String PROJECT_BASE = "project_base_package";// java文件根目录20 ????final String PROJECT_JSP = "project_jsp";// jsp文件所在目录21 ????final String PROJECT_RESOURCES = "project_resources";// 资源文件所在目录(CSS、JS、image...)22 23 }
4.StringUtil.java
1 package org.unicorn.util; 2 ?3 import org.apache.commons.lang3.StringUtils; 4 ?5 /** 6 ?* String型数值工具类 7 ?*/ 8 public final class StringUtil { 9 10 ????/**11 ?????* 判断String型数值是否为空12 ?????*13 ?????* @param value14 ?????* ?????????????String型数值15 ?????* @return16 ?????* ?????????????true-空 false-非空17 ?????*/18 ????public static boolean isEmpty(String value) {19 20 ????????if (value != null) {21 ????????????value = value.trim();// 去空格22 ????????}23 ????????return StringUtils.isEmpty(value);24 25 ????}26 27 ????/**28 ?????* 判断String型数值是否非空29 ?????*30 ?????* @param value31 ?????* ?????????????String型数值32 ?????* @return33 ?????* ?????????????true-非空 false-空34 ?????*/35 ????public static boolean isNotEmpty(String value) {36 37 ????????return !isEmpty(value);38 39 ????}40 41 }
5.CastUtil.java
?1 package org.unicorn.util; ?2 ??3 /** ?4 ?* 强制类型转换工具类 ?5 ?*/ ?6 public final class CastUtil { ?7 ??8 ????/** ?9 ?????* 将Object型数值转为String型数值(不可指定默认值) 10 ?????* 11 ?????* @param obj 12 ?????* ?????????????Object型数值 13 ?????* @return 14 ?????* ?????????????String数值 15 ?????*/ 16 ????public static String castString(Object obj) { 17 ?18 ????????return castString(obj, ""); 19 ?20 ????} 21 ?22 ????/** 23 ?????* 将Object型数值转为String型数值(可指定默认值) 24 ?????* 25 ?????* @param obj 26 ?????* ?????????????Object型数值 27 ?????* @param defaultValue 28 ?????* ?????????????String型默认值 29 ?????* @return 30 ?????* ?????????????String数值 31 ?????*/ 32 ????public static String castString(Object obj, String defaultValue) { 33 ?34 ????????return obj == null ? String.valueOf(obj) : defaultValue; 35 ?36 ????} 37 ?38 ????/** 39 ?????* 将Object型数值转为int型数值(不可指定默认值) 40 ?????* 41 ?????* @param obj 42 ?????* ?????????????Object型数值 43 ?????* @return 44 ?????* ?????????????int型数值 45 ?????*/ 46 ????public static int castInt(Object obj) { 47 ?48 ????????return castInt(obj, 0); 49 ?50 ????} 51 ?52 ????/** 53 ?????* 将Object型数值转为int型数值(可指定默认值) 54 ?????* 55 ?????* @param obj 56 ?????* ?????????????Object型数值 57 ?????* @param defaultValue 58 ?????* ?????????????int型默认值 59 ?????* @return 60 ?????* ?????????????int型数值 61 ?????*/ 62 ????public static int castInt(Object obj, int defaultValue) { 63 ?64 ????????int value = defaultValue; 65 ????????if (obj != null) { 66 ????????????String strValue = castString(obj); 67 ????????????if (StringUtil.isNotEmpty(strValue)) { 68 ????????????????try { 69 ????????????????????value = Integer.parseInt(strValue); 70 ????????????????} catch (NumberFormatException e) { 71 ????????????????????value = defaultValue; 72 ????????????????} 73 ?74 ????????????} 75 ????????} 76 ????????return value; 77 ?78 ????} 79 ?80 ????/** 81 ?????* 将Object型数值转为boolean型数值(不可指定默认值) 82 ?????* 83 ?????* @param obj 84 ?????* ?????????????Object型数值 85 ?????* @return 86 ?????* ?????????????boolean型数值 87 ?????*/ 88 ????public static boolean castBoolean(Object obj) { 89 ?90 ????????return castBoolean(obj, false); 91 ?92 ????} 93 ?94 ????/** 95 ?????* 将Object型数值转为boolean型数值(可指定默认值) 96 ?????* 97 ?????* @param obj 98 ?????* ?????????????Object型数值 99 ?????* @param defaultValue100 ?????* ?????????????boolean型默认值101 ?????* @return102 ?????* ?????????????boolean型数值103 ?????*/104 ????public static boolean castBoolean(Object obj, boolean defaultValue) {105 106 ????????boolean value = defaultValue;107 ????????if (obj != null) {108 ????????????String strValue = castString(obj);109 ????????????if (StringUtil.isNotEmpty(strValue)) {110 ????????????????try {111 ????????????????????value = Boolean.parseBoolean(strValue);112 ????????????????} catch (NumberFormatException e) {113 ????????????????????value = defaultValue;114 ????????????????}115 ????????????}116 ????????}117 ????????return value;118 119 ????}120 121 ????/**122 ?????* 将Object型数值转为long型数值(不可指定默认值)123 ?????*124 ?????* @param obj125 ?????* ?????????????Object型数值126 ?????* @return127 ?????* ?????????????long型数值128 ?????*/129 ????public static long castLong(Object obj) {130 131 ????????return castLong(obj, 0L);132 133 ????}134 135 ????/**136 ?????* 将Object型数值转为long型数值(可指定默认值)137 ?????*138 ?????* @param obj139 ?????* ?????????????Object型数值140 ?????* @param defaultValue141 ?????* ?????????????long型默认值142 ?????* @return143 ?????* ?????????????long型数值144 ?????*/145 ????public static long castLong(Object obj, long defaultValue) {146 147 ????????long value = defaultValue;148 ????????if (obj != null) {149 ????????????String strValue = castString(obj);150 ????????????if (StringUtil.isNotEmpty(strValue)) {151 ????????????????try {152 ????????????????????value = Long.parseLong(strValue);153 ????????????????} catch (NumberFormatException e) {154 ????????????????????value = defaultValue;155 ????????????????}156 ????????????}157 ????????}158 ????????return value;159 160 ????}161 162 ????/**163 ?????* 将Object型数值转为double型数值(不可指定默认值)164 ?????*165 ?????* @param obj166 ?????* ?????????????Object型数值167 ?????* @return168 ?????* ?????????????double型数值169 ?????*/170 ????public static double castDouble(Object obj) {171 172 ????????return castDouble(obj, 0d);173 174 ????}175 176 ????/**177 ?????* 将Object型数值转为double型数值(可指定默认值)178 ?????*179 ?????* @param obj180 ?????* ?????????????Object型数值181 ?????* @param defaultValue182 ?????* ?????????????double型默认值183 ?????* @return184 ?????* ?????????????double型数值185 ?????*/186 ????public static double castDouble(Object obj, double defaultValue) {187 188 ????????double value = defaultValue;189 ????????if (obj != null) {190 ????????????String strValue = castString(obj);191 ????????????if (StringUtil.isNotEmpty(strValue)) {192 ????????????????try {193 ????????????????????value = Double.parseDouble(strValue);194 ????????????????} catch (NumberFormatException e) {195 ????????????????????value = defaultValue;196 ????????????????}197 ????????????}198 ????????}199 ????????return value;200 201 ????}202 203 }
6.PropsUtil.java
?1 package org.unicorn.util; ?2 ??3 import org.slf4j.Logger; ?4 import org.slf4j.LoggerFactory; ?5 ??6 import java.io.FileNotFoundException; ?7 import java.io.IOException; ?8 import java.io.InputStream; ?9 import java.util.Properties; 10 ?11 /** 12 ?* 属性文件工具类 13 ?*/ 14 public final class PropsUtil { 15 ?16 ????private static final Logger LOGGER = LoggerFactory.getLogger(PropsUtil.class); 17 ?18 ????/** 19 ?????* 加载属性文件 20 ?????* 21 ?????* @param fileName 22 ?????* ?????????????????文件名称 23 ?????* @return 24 ?????* ?????????????????Properties对象 25 ?????*/ 26 ????public static Properties loadProps(String fileName) { 27 ?28 ????????Properties props; 29 ????????InputStream inputStream = null; 30 ????????try { 31 ????????????inputStream = Thread.currentThread().getContextClassLoader() 32 ????????????????????.getResourceAsStream(fileName); 33 ????????????if (inputStream == null) { 34 ????????????????LOGGER.error("文件[" + fileName + "]没有被发现"); 35 ????????????????throw new FileNotFoundException("文件[" + fileName + "]没有被发现"); 36 ????????????} 37 ????????????props = new Properties();// 创建属性文件对象 38 ????????????props.load(inputStream);// 加载属性文件 39 ????????} catch (IOException e) { 40 ????????????LOGGER.error("加载属性文件失败", e); 41 ????????????throw new RuntimeException("加载属性文件失败", e); 42 ????????} finally { 43 ????????????if (inputStream != null) { 44 ????????????????try { 45 ????????????????????inputStream.close(); 46 ????????????????} catch (IOException e) { 47 ????????????????????LOGGER.error("输入流[" + inputStream.toString() + "]关闭失败"); 48 ????????????????} 49 ????????????} 50 ????????} 51 ????????return props; 52 ?53 ????} 54 ?55 ????/** 56 ?????* 获取String型属性值(不可指定默认值) 57 ?????* 58 ?????* @param props 59 ?????* ?????????????Properties对象 60 ?????* @param key 61 ?????* ?????????????键 62 ?????* @return 63 ?????* ?????????????键对应的String型数值 64 ?????*/ 65 ????public static String getString(Properties props, String key) { 66 ?67 ????????return getString(props, key, ""); 68 ?69 ????} 70 ?71 ????/** 72 ?????* 获取String型属性值(可指定默认值) 73 ?????* 74 ?????* @param props 75 ?????* ?????????????Properties对象 76 ?????* @param key 77 ?????* ?????????????键 78 ?????* @param defaultValue 79 ?????* ?????????????String型默认值 80 ?????* @return 81 ?????* ?????????????键对应的String型数值 82 ?????*/ 83 ????public static String getString(Properties props, String key, String defaultValue) { 84 ?85 ????????String value = defaultValue; 86 ????????if (props.containsKey(key)) { 87 ????????????value = props.getProperty(key); 88 ????????} 89 ????????return value; 90 ?91 ????} 92 ?93 ????/** 94 ?????* 获取int型属性值(不可指定默认值) 95 ?????* 96 ?????* @param props 97 ?????* ?????????????Properties对象 98 ?????* @param key 99 ?????* ?????????????键100 ?????* @return101 ?????* ?????????????键对应的int型数值102 ?????*/103 ????public static int getInt(Properties props, String key) {104 105 ????????return getInt(props, key, 0);106 107 ????}108 109 ????/**110 ?????* 获取int型属性值(可指定默认值)111 ?????*112 ?????* @param props113 ?????* ?????????????Properties对象114 ?????* @param key115 ?????* ?????????????键116 ?????* @param defaultValue117 ?????* ?????????????int型默认值118 ?????* @return119 ?????* ?????????????键对应的int型数值120 ?????*/121 ????public static int getInt(Properties props, String key, int defaultValue) {122 123 ????????int value = defaultValue;124 ????????if (props.containsKey(key)) {125 ????????????value = CastUtil.castInt(props.getProperty(key));126 ????????}127 ????????return value;128 129 ????}130 131 ????/**132 ?????* 获取boolean型属性值(不可指定默认值)133 ?????*134 ?????* @param props135 ?????* ?????????????Properties对象136 ?????* @param key137 ?????* ?????????????键138 ?????* @return139 ?????* ?????????????键对应的boolean型数值140 ?????*/141 ????public static boolean getBoolean(Properties props, String key) {142 143 ????????return getBoolean(props, key, false);144 145 ????}146 147 ????/**148 ?????* 获取boolean型属性值(可指定默认值)149 ?????*150 ?????* @param props151 ?????* ?????????????Properties对象152 ?????* @param key153 ?????* ?????????????键154 ?????* @param defaultValue155 ?????* ?????????????boolean型默认值156 ?????* @return157 ?????* ?????????????键对应的boolean型数值158 ?????*/159 ????public static boolean getBoolean(Properties props, String key, boolean defaultValue) {160 161 ????????boolean value = defaultValue;162 ????????if (props.containsKey(key)) {163 ????????????value = CastUtil.castBoolean(props.getProperty(key));164 ????????}165 ????????return value;166 167 ????}168 169 ????/**170 ?????* 获取long型属性值(不可指定默认值)171 ?????*172 ?????* @param props173 ?????* ?????????????Properties对象174 ?????* @param key175 ?????* ?????????????键176 ?????* @return177 ?????* ?????????????键对应的long型数值178 ?????*/179 ????public static long getLong(Properties props, String key) {180 181 ????????return getLong(props, key, 0L);182 183 ????}184 185 ????/**186 ?????* 获取long型属性值(可指定默认值)187 ?????*188 ?????* @param props189 ?????* ?????????????Properties对象190 ?????* @param key191 ?????* ?????????????键192 ?????* @param defaultValue193 ?????* ?????????????long型默认值194 ?????* @return195 ?????* ?????????????键对应的long型数值196 ?????*/197 ????public static long getLong(Properties props, String key, long defaultValue) {198 199 ????????long value = defaultValue;200 ????????if (props.containsKey(key)) {201 ????????????value = CastUtil.castLong(props.getProperty(key));202 ????????}203 ????????return value;204 205 ????}206 207 ????/**208 ?????* 获取double型属性值(不可指定默认值)209 ?????*210 ?????* @param props211 ?????* ?????????????????Properties对象212 ?????* @param key213 ?????* ?????????????????键214 ?????* @return215 ?????* ?????????????????键对应的double型数值216 ?????*/217 ????public static double getDouble(Properties props, String key) {218 219 ????????return getDouble(props, key, 0d);220 221 ????}222 223 ????/**224 ?????* 获取double型属性值(可指定默认值)225 ?????*226 ?????* @param props227 ?????* ?????????????????Properties对象228 ?????* @param key229 ?????* ?????????????????键230 ?????* @param defaultValue231 ?????* ?????????????????double型默认值232 ?????* @return233 ?????* ?????????????????键对应的double型数值234 ?????*/235 ????public static double getDouble(Properties props, String key, double defaultValue) {236 237 ????????double value = defaultValue;238 ????????if (props.containsKey(key)) {239 ????????????value = CastUtil.castDouble(props.getProperty(key));240 ????????}241 ????????return value;242 243 ????}244 245 }
搭建轻量级Jave Web框架----------读取配置文件
原文地址:http://www.cnblogs.com/jinjiyese153/p/7452292.html