手写web框架之加载配置项目

Posted duan2

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手写web框架之加载配置项目相关的知识,希望对你有一定的参考价值。

一  定义框架配置项

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

1 smart.framework.jdbc.driver=com.mysql.jdbc.Driver
2 smart.framework.jdbc.url=jdbc:mysql://localhost:3306/jack
3 smart.framework.jdbc.username=root
4 smart.framework.jdbc.password=root
5  
6 smart.framework.app.base_package=org.jack.smart4j
7 smart.framework.app.jsp_path=/WEB_INF/view/
8 smart.framework.app.asset_path=/asset/

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

 1 package org.smart4j.framework;
 2  
 3 /**
 4  * Created by jack on 2017/5/22.
 5  * 提供相关常量配置项
 6  */
 7 public interface ConfigConstant {
 8     String CONFIG_FILE="smart.properties";
 9     String JDBC_DRIVER="smart.framework.jdbc.driver";
10     String JDBC_URL="smart.framework.jdbc.url";
11     String JDBC_USERNAME="smart.framework.jdbc.username";
12     String JDBC_PASSWORD="smart.framework.jdbc.password";
13  
14     String APP_BASE_PACKAGE="smart.framework.app.base_package";
15     String APP_JSP_PATH="smart.framework.app.jsp_path";
16     String APP_ASSET_PATH="smart.framework.app.asset_path";
17 }

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

 

  1 package org.smart4j.framework.org.smart4j.framework.util;
  2  
  3 import org.slf4j.Logger;
  4 import org.slf4j.LoggerFactory;
  5 import java.io.FileNotFoundException;
  6 import java.io.IOException;
  7 import java.io.InputStream;
  8 import java.util.Properties;
  9  
 10 /**
 11  * Created by jack on 2015/12/26.
 12  * 属性文件工具类
 13  */
 14 public final class PropsUtil {
 15     private static final Logger LOGGER = LoggerFactory.getLogger(PropsUtil.class);
 16  
 17     /*
 18     * 加载属性文件
 19     *
 20     * */
 21     public static Properties loadProps(String fileName) {
 22         Properties properties = null;
 23         InputStream inputStream = null;
 24         try {
 25             inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
 26             if (inputStream == null) {
 27                 throw new FileNotFoundException(fileName + " file is not found!");
 28             }
 29             properties = new Properties();
 30             properties.load(inputStream);
 31         } catch (IOException e) {
 32             LOGGER.error("load properties file failure", e);
 33         } finally {
 34             if (inputStream != null) {
 35                 try {
 36                     inputStream.close();
 37                 } catch (IOException e) {
 38                     LOGGER.error("close input stream failure", e);
 39                 }
 40             }
 41         }
 42         return properties;
 43     }
 44  
 45     /*
 46     * 获取字符型属性(默认为空字符串)
 47     *
 48     * */
 49     public static String getString(Properties props, String key) {
 50         return getString(props, key, "");
 51     }
 52  
 53     /*
 54     * 获取字符型属性(可指定默认值)
 55     * */
 56     public static String getString(Properties props, String key, String
 57             defaultValue) {
 58         String value = defaultValue;
 59         if (props.containsKey(key)) {
 60             value = props.getProperty(key);
 61         }
 62         return value;
 63     }
 64  
 65     /*
 66     * 获取数值类型属性(默认为0)
 67     * */
 68     public static int getInt(Properties props, String key) {
 69         return getInt(props, key, 0);
 70     }
 71  
 72     /*
 73     * 获取数值类型属性(可指定默认值)
 74     * */
 75     public static int getInt(Properties props, String key, int defaultValue) {
 76         int value = defaultValue;
 77         if (props.containsKey(key)) {
 78             value = CastUtil.castInt(props.getProperty(key));
 79         }
 80         return value;
 81     }
 82  
 83     /*
 84     * 获取布尔型属性(默认值为false)
 85     * */
 86     public static boolean getBoolean(Properties props, String key) {
 87         return getBoolean(props, key, false);
 88     }
 89  
 90     /*
 91     * 获取布尔型属性(可指定默认值)
 92     * */
 93     public static boolean getBoolean(Properties props, String key, Boolean defaultValue) {
 94         boolean value = defaultValue;
 95         if (props.containsKey(key)) {
 96             value = CastUtil.castBoolean(props.getProperty(key));
 97         }
 98         return value;
 99     }
100 }

 

 

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

 1 package org.smart4j.framework.helper;
 2  
 3 import org.smart4j.framework.ConfigConstant;
 4 import org.smart4j.framework.org.smart4j.framework.util.PropsUtil;
 5  
 6 import java.util.Properties;
 7  
 8 /**
 9  * Created by jack on 2017/5/22.
10  * 属性文件助手类
11  */
12 public class ConfigHelper {
13     private static final Properties CONFIG_PROPS = PropsUtil.loadProps(ConfigConstant.CONFIG_FILE);
14     /**
15      * 获取JDBC驱动
16      */
17     public static String getJdbcDriver(){
18         return PropsUtil.getString(CONFIG_PROPS, ConfigConstant.JDBC_DRIVER);
19     }
20     /**
21      * 获取JDBC URL
22      */
23     public static String getJdbcUrl(){
24         return PropsUtil.getString(CONFIG_PROPS,ConfigConstant.JDBC_URL);
25     }
26     /**
27      * 获取JDBC 用户名
28      */
29     public static String getJdbcUsername(){
30         return PropsUtil.getString(CONFIG_PROPS,ConfigConstant.JDBC_USERNAME);
31     }
32     /**
33      * 获取JDBC 密码
34      */
35     public static String getJdbcPassword(){
36         return PropsUtil.getString(CONFIG_PROPS,ConfigConstant.JDBC_PASSWORD);
37     }
38     /**
39      * 获取应用基础包名
40      */
41     public static String getAppBasePackage(){
42         return PropsUtil.getString(CONFIG_PROPS,ConfigConstant.APP_BASE_PACKAGE);
43     }
44     /**
45      * 获取应用jsp路径
46      */
47     public static String getAppJspPath(){
48         return PropsUtil.getString(CONFIG_PROPS,ConfigConstant.APP_JSP_PATH,"/WEB-INF/view");
49     }
50     /**
51      * 获取应用静态资源路径
52      */
53     public static String getAppAssetPath(){
54         return PropsUtil.getString(CONFIG_PROPS,ConfigConstant.APP_ASSET_PATH,"/asset");
55     }
56 }

 

以上是关于手写web框架之加载配置项目的主要内容,如果未能解决你的问题,请参考以下文章

手写Spring MVC框架 实现简易版mvc框架

Spring Boot2.0之纯手写框架

web前端技术内容详解之Vue.js框架

前端面试题之手写promise

python web开发之flask框架学习 加载模版

手写一个Mybatis框架