搭建轻量级Jave Web框架----------读取配置文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搭建轻量级Jave Web框架----------读取配置文件相关的知识,希望对你有一定的参考价值。

? 版权声明:本文为博主原创文章,转载请注明出处

目录:

  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>
pom.xml

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";// 数据库url
14     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 }
ConfigConstant.java

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 value
14      *              String型数值
15      * @return
16      *              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 value
31      *              String型数值
32      * @return
33      *              true-非空 false-空
34      */
35     public static boolean isNotEmpty(String value) {
36 
37         return !isEmpty(value);
38 
39     }
40 
41 }
StringUtil.java

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 defaultValue
100      *              boolean型默认值
101      * @return
102      *              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 obj
125      *              Object型数值
126      * @return
127      *              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 obj
139      *              Object型数值
140      * @param defaultValue
141      *              long型默认值
142      * @return
143      *              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 obj
166      *              Object型数值
167      * @return
168      *              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 obj
180      *              Object型数值
181      * @param defaultValue
182      *              double型默认值
183      * @return
184      *              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 }
CastUtil.java

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      * @return
101      *              键对应的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 props
113      *              Properties对象
114      * @param key
115      *              键
116      * @param defaultValue
117      *              int型默认值
118      * @return
119      *              键对应的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 props
135      *              Properties对象
136      * @param key
137      *              键
138      * @return
139      *              键对应的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 props
151      *              Properties对象
152      * @param key
153      *              键
154      * @param defaultValue
155      *              boolean型默认值
156      * @return
157      *              键对应的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 props
173      *              Properties对象
174      * @param key
175      *              键
176      * @return
177      *              键对应的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 props
189      *              Properties对象
190      * @param key
191      *              键
192      * @param defaultValue
193      *              long型默认值
194      * @return
195      *              键对应的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 props
211      *                  Properties对象
212      * @param key
213      *                  键
214      * @return
215      *                  键对应的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 props
227      *                  Properties对象
228      * @param key
229      *                  键
230      * @param defaultValue
231      *                  double型默认值
232      * @return
233      *                  键对应的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 }
PropsUtil.java

以上是关于搭建轻量级Jave Web框架----------读取配置文件的主要内容,如果未能解决你的问题,请参考以下文章

搭建轻量级java web框架

从零开始搭建论坛:Web服务器与Web框架

windows下如何快速搭建web.py开发框架

在windows下如何快速搭建web.py开发框架

基础篇-三大框架之一(struts2框架的搭建)

Flask一步步搭建web应用