手写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 }

原文地址:https://www.cnblogs.com/duan2/p/11747746.html

时间: 2024-10-14 09:21:57

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

手写web框架之实现Bean容器

实现Bean容器 使用ClassHelper可以获取所加载的类,但无法通过类来实例化对象,因此我们需要提供一个反射工具类,让它封装java反射相关的API,对外提供更好用的工具方法.将该类命名为ReflectionUtil,代码如下: 1 package org.smart4j.framework.org.smart4j.framework.util; 2 3 import org.slf4j.Logger; 4 import org.slf4j.LoggerFactory; 5 import

自己手写WEB程序框架并运行

1.新建文件夹,起名MyWeb 2.文件夹下,新建两个文件夹 WEB-INF, META-INF,,还可以新建一些jsp,html文件 ,如 index.html 3在WEB-INF中必须存在一个文件WEB.xml, 还包含两个文件夹 lib, classes 4 在WEB.xml中写入最简单的<web-app> ....  </web-app>,,,,,编辑一下index.html 下面是要运行了 1,cmd 2,切换到MyWeb的文件夹,jar 命令查看一下各个参数的含义 3,

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

本文会从内部原理到具体实现来详细介绍如何开发一个简洁而实用的Android图片加载缓存框架,并在内存占用与加载图片所需时间这两个方面与主流图片加载框架之一Universal Image Loader做出比较,来帮助我们量化这个框架的性能.通过开发这个框架,我们可以进一步深入了解Android中的Bitmap操作.LruCache.LruDiskCache,让我们以后与Bitmap打交道能够更加得心应手.若对Bitmap的大小计算及inSampleSize计算还不太熟悉,请参考这里:高效加载Bit

(二)springMvc原理和手写springMvc框架

我们从两个方面了解springmvc执行原理,首先我们去熟悉springmvc执行的过程,然后知道原理后通过手写springmvc去深入了解代码中执行过程. (一)SpringMVC流程图 (二)SpringMVC流程 1.  用户发送请求至前端控制器DispatcherServlet. 2.  DispatcherServlet收到请求调用HandlerMapping处理器映射器. 3.  处理器映射器找到具体的处理器(可以根据xml配置.注解进行查找),生成处理器对象及处理器拦截器(如果有则

手写SpringMVC 框架

手写SpringMVC框架 细嗅蔷薇 心有猛虎 背景:Spring 想必大家都听说过,可能现在更多流行的是Spring Boot 和Spring Cloud 框架:但是SpringMVC 作为一款实现了MVC 设计模式的web (表现层) 层框架,其高开发效率和高性能也是现在很多公司仍在采用的框架:除此之外,Spring 源码大师级的代码规范和设计思想都十分值得学习:退一步说,Spring Boot 框架底层也有很多Spring 的东西,而且面试的时候还会经常被问到SpringMVC 原理,一般

手写Spring框架,加深对Spring工作机制的理解!

在我们的日常工作中,经常会用到Spring.Spring Boot.Spring Cloud.Struts.Mybatis.Hibernate等开源框架,有了这些框架的诞生,平时的开发工作量也是变得越来越轻松,我们用 Spring Boot 分分钟可以新建一个Web项目. 记得自己刚开始工作的时候还是在用Servlet写Web项目,自己写数据库连接池,用原生JDBC操作数据库,好了不发散了.回到这篇文章的主题,今天通过手写Spring框架,帮大家深入了解一下Spring的工作机制,文中涉及的代码

SpringMVC加载配置Properties文件的几种方式

最近开发的项目使用了SpringMVC的框架,用下来感觉SpringMVC的代码实现的非常优雅,功能也非常强大, 网上介绍Controller参数绑定.URL映射的文章都很多了,写这篇博客主要总结一下SpringMVC加载配置Properties文件的几种方式 通过读取Config文件的配置例如: Map<String, String> group = ConfigurationManager.GetConfiguration("config1"); this.setBcp

纯手写SpringBoot框架之注解方式启动SpringMVC容器

使用Java语言创建Tomcat容器,并且通过Tomcat执行Servlet,接下来,将会使用Java语言在SpringBoot创建内置Tomcat,使用注解方式启动SpringMVC容器. 代码实现.1.pom.xml文件,需要依赖的jar包. <dependencies> <!--Java语言操作Tomcat--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <arti

手撸WEB框架

手撸web框架 软件开发的架构 C/S架构: 客户端 / 服务端 B/S架构: 浏览器 / 服务端 bs的本质也是cs HTTP协议 http是一种超文本传输协议 1.四大特性 基于TCP/I P之上作用于应用层 基于请求响应 无状态 (cookie session token..) 无连接 (长连接 websocket ( http 协议的大补丁)) 2.数据格式 请求格式 请求首行(请求方式, 协议版本.) 请求头(是一大堆k: v键值对) 注意请求头和请求体之间的空格\r\n 请求体(真正