一  定义框架配置项

在项目的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-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的代码,中已经给出了在这里,我们在给出该代码

 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;
}
}

我们借助上面的帮助类,就可以获取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");
}
}

手写web框架之加载配置项目的更多相关文章

  1. 手写web框架之加载Controller,初始化框架

    1,加载Controller     我们需要创建 一个ControllerHelper类,让它来处理下面的逻辑:      通过ClassHelper我们可以获取所有定义了Controller注解的 ...

  2. VS2010 需要缺少的web组件才能加载该项目

    到的问题是解决方案中部分项目无法加载, 提示需要缺少的web组件才能加载该项目,是否通过WEB安装组件来网络安装, 点击确定以后就什么也没有了. 到微软网站去下载Microsoft Web Platf ...

  3. [jQuery插件]手写一个图片懒加载实现

    教你做图片懒加载插件 那一年 那一年,我还年轻 刚接手一个ASP.NET MVC 的 web 项目, (C#/jQuery/Bootstrap) 并没有做 web 的经验,没有预留学习时间, (作为项 ...

  4. 手写web框架之实现Bean容器

    实现Bean容器    使用ClassHelper可以获取所加载的类,但无法通过类来实例化对象,因此我们需要提供一个反射工具类,让它封装java反射相关的API,对外提供更好用的工具方法.将该类命名为 ...

  5. 手写web框架之开发一个类加载器

    ackage io.renren.common; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUti ...

  6. 手写web框架之实现依赖注入功能

    我们在Controller中定义了Service成员变量,然后在Controller的Action方法中调用Service成员变量的方法,那么如果实现Service的成员变量? 之前定义了@Injec ...

  7. web.xml的加载过程配置详解

      一:web.xml加载过程 简单说一下,web.xml的加载过程.当我们启动一个WEB项目容器时,容器包括(JBoss,Tomcat等).首先会去读取web.xml配置文件里的配置,当这一步骤没有 ...

  8. Web Service无法加载协定为“ServiceReference1.xxxxxx”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分

    Web Service 无法加载协定为“ServiceReference1.xxxxxx”的终结点配置部分,因为找到了该协定的多个终结点配置.请按名称指示首选的终结点配置部分   原因是在web.co ...

  9. 一起写一个Android图片加载框架

    本文会从内部原理到具体实现来详细介绍如何开发一个简洁而实用的Android图片加载缓存框架,并在内存占用与加载图片所需时间这两个方面与主流图片加载框架之一Universal Image Loader做 ...

随机推荐

  1. cursor:not-allowed

    今天发现了一个鼠标样式:not-allowed,是一个红色圈加一个斜杠,表示禁止的意思,似乎IE ,chrome firefox 都可以正常显示,很好用

  2. es中的相关知识一(基本知识和id的定义)

    一.es中文档的元数据包括: 1._index: 索引(index)类似于关系型数据库里的数据库(database),事实上,我们的数据被存储和索引在分片(shards)中,索引知识把一个或多个分片分 ...

  3. oracle exp 导出前执行分析计划

    记录一下小小问题: 当作为一个dmp 库导出的时候.如果我们在之前进行 对用户下的所有表进行分析.   那么在导入的时候 会连同分析计划数据一并导入 imp 导入dmp文件报错 IMP-00017: ...

  4. 微信小程序中concat 和push的区别

    push和concat二者功能很相像,但有两点区别. 先看如下例子: var arr = []; arr.push(1); arr.push(2); arr.push([3, 4]) arr.push ...

  5. C#中 委托和事件的关系

    首先,委托 是一个好东西.按我的理解,委托 是针对 方法 的更小粒度的抽象.比较interface,他精简了一些代码.使得 订阅-通知 (观察者模式)的实现变得非常简洁. 关于事件,我最初的理解是:事 ...

  6. Redis入门(二)——基本操作

    Redis作为独立的服务端,在Java中去操作redis需要通过Redis提供的jar z在这里特别申明,除了基本数据以及String外,其余对象,要想写入redis,必须序列化(即使是对象也要实现序 ...

  7. 02—mybatis的基本用法01

    深入mybatis的配置文件(mybatis-config.xml)   MyBatis的配置文档结构 顶层configuration 配置 properties 属性 settings 设置 typ ...

  8. 【线段树 矩阵乘法dp】8.rseq

    题目分析 #include<bits/stdc++.h> #define MO 998244353 ; struct Matrix { ][]; void init(int c, int ...

  9. redis主从+哨兵 安装配置二

    实验环境: 192.168.2.201 centos7 master sentinel 192.168.2.202 centos7 slave   sentinel 192.168.2.203 cen ...

  10. Java的值传递和引用传递的说法

    学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨论的话题又是充满争议:有的论坛帖子说Java ...