【SSH项目实战】国税协同平台-3.资源文件分类&log4j&抽取BaseAction
2015-10-21 22:47
555 查看
上次我们搭建了SSH框架的环境,然后做了单元测试,下面我们继续来完善我们工厂的准备工作。
3.1资源文件分类
(1)将配置文件归类到新建config文件夹;
(2)源代码目录按照功能模块进行划分:cn.edu.hpu.子系统.功能模块.*
(3)Jsp放置到WEB-INF目录下;
(4)其它:
新建一个test源文件架(Source Folder),我们把上次所有测试的代码全部移入test文件夹下,然后专门为配置文件创建一个conf源文件夹,将配置文件移入,然后src中先建立一个包准备放新写的代码:
我们如果修改了数据库,我们要将数据库的修改部分加入database文件夹下的数据库变更文件中。所以我们要建立一个database文件夹。其它的文件夹如下:
然后我们还缺log4j日志信息的输出(不加的话在加载spring内部日志类的时候会报错)。
首先我们加入log4的jar包slf4j-log4j12-1.6.1.jar,
然后引入log4j.properties配置文件:
其中的意思分别是:输出位置(ConsoleAppender后台输出)、Target目标、输出的格式(PatternLayout),参数值配置。
创建测试文件,测试log4j的五个日志级别:
测试结果:
19:44:14,365 DEBUG [main] TestLog:12 - debug 级别日志
19:44:14,368 INFO [main] TestLog:13 - info 级别日志
19:44:14,369 WARN [main] TestLog:14 - warn 级别日志
19:44:14,369 ERROR [main] TestLog:15 - error 级别日志
19:44:14,370 FATAL [main] TestLog:16 - fatal 级别日志
我们把log4j.properties配置文件中的log4j.logger.cn.edu.hpu=debug中的debug改为error,得到的结果是:
19:45:22,496 ERROR [main] TestLog:15 - error 级别日志
19:45:22,500 FATAL [main] TestLog:16 - fatal 级别日志
说明我们只需要得到错误(error)的、严重(fatal)的信息。
我们现在是开发阶段,所以我们要将模式改为debug模式。
当我们的用户使用我们的项目的时候,在控制台输出的错误如果被后面的信息覆盖掉,那么我们就找不到当时发生的问题的输出信息,从而无法修改系统的bug,所以我们要将我们的错误信息存储到文本中。
当然,除了error与fatal之外的信息用户是不需要知道的,我们只输出这两个信息可以减轻日志文本文件的容量。
下面我们就配置日志的文本输出:
我们在中添加下面的语句:
我们的报错信息就会保存在F:/tax/tax.log下,并且每日新增日志文件(DailyRollingFileAppender)。
根据我们的配置,我们的日志信息不仅会显示在控制台,而且会输出到日志记录文件中:
我们的使用场景在哪里呢?
下面这个
package cn.edu.hpu.tax.test;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;
public class TestLog {
@Test
public void test(){
Log log=LogFactory.getLog(getClass());
try {
int i=1/0;
} catch (Exception e) {
log.error(e.getMessage());
e.printStackTrace();
}
}
}
我们如果做好了log日志记录,到时候出错的时候我们会在日志记录文件中看到下面的语句:
到时候我们再去排查服务器的错误的时候,就可以看到这个问题了,方便维护人员修改bug等。
好,我们的日志搭建完毕,接下来才是我们的重头戏,我们的初级增删改查业务。
2.6编写基类BaseDao
我们的增删改查都是有一个基本的固定模式的,所以我们为了避免写一些重复的代码造成代码冗余,所以我们可以写一个公用的增删改查基础类,让其他类去继承它来使用公用的增删改查的特性。
DAO基类中配备增删改查的操作:
实现类:
这就是我们的基础增删改查类。详细的功能开发下一篇继续。
转载请注明出处:http://blog.csdn.net/acmman/article/details/49312581
3.1资源文件分类
(1)将配置文件归类到新建config文件夹;
(2)源代码目录按照功能模块进行划分:cn.edu.hpu.子系统.功能模块.*
(3)Jsp放置到WEB-INF目录下;
(4)其它:
新建一个test源文件架(Source Folder),我们把上次所有测试的代码全部移入test文件夹下,然后专门为配置文件创建一个conf源文件夹,将配置文件移入,然后src中先建立一个包准备放新写的代码:
我们如果修改了数据库,我们要将数据库的修改部分加入database文件夹下的数据库变更文件中。所以我们要建立一个database文件夹。其它的文件夹如下:
然后我们还缺log4j日志信息的输出(不加的话在加载spring内部日志类的时候会报错)。
首先我们加入log4的jar包slf4j-log4j12-1.6.1.jar,
然后引入log4j.properties配置文件:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p [%t] %c{1}:%L - %m%n log4j.rootLogger=warn, stdout log4j.logger.cn.edu.hpu=debug
其中的意思分别是:输出位置(ConsoleAppender后台输出)、Target目标、输出的格式(PatternLayout),参数值配置。
创建测试文件,测试log4j的五个日志级别:
package cn.edu.hpu.tax.test; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Test; public class TestLog { @Test public void test(){ Log log=LogFactory.getLog(getClass()); log.debug("debug 级别日志"); log.info("info 级别日志"); log.warn("warn 级别日志"); log.error("error 级别日志"); log.fatal("fatal 级别日志"); } }
测试结果:
19:44:14,365 DEBUG [main] TestLog:12 - debug 级别日志
19:44:14,368 INFO [main] TestLog:13 - info 级别日志
19:44:14,369 WARN [main] TestLog:14 - warn 级别日志
19:44:14,369 ERROR [main] TestLog:15 - error 级别日志
19:44:14,370 FATAL [main] TestLog:16 - fatal 级别日志
我们把log4j.properties配置文件中的log4j.logger.cn.edu.hpu=debug中的debug改为error,得到的结果是:
19:45:22,496 ERROR [main] TestLog:15 - error 级别日志
19:45:22,500 FATAL [main] TestLog:16 - fatal 级别日志
说明我们只需要得到错误(error)的、严重(fatal)的信息。
我们现在是开发阶段,所以我们要将模式改为debug模式。
当我们的用户使用我们的项目的时候,在控制台输出的错误如果被后面的信息覆盖掉,那么我们就找不到当时发生的问题的输出信息,从而无法修改系统的bug,所以我们要将我们的错误信息存储到文本中。
当然,除了error与fatal之外的信息用户是不需要知道的,我们只输出这两个信息可以减轻日志文本文件的容量。
下面我们就配置日志的文本输出:
我们在中添加下面的语句:
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender log4j.appender.R.File=F:/tax/tax.log log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d [%t] %5p %c - %m%n
我们的报错信息就会保存在F:/tax/tax.log下,并且每日新增日志文件(DailyRollingFileAppender)。
根据我们的配置,我们的日志信息不仅会显示在控制台,而且会输出到日志记录文件中:
我们的使用场景在哪里呢?
下面这个
package cn.edu.hpu.tax.test;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;
public class TestLog {
@Test
public void test(){
Log log=LogFactory.getLog(getClass());
try {
int i=1/0;
} catch (Exception e) {
log.error(e.getMessage());
e.printStackTrace();
}
}
}
我们如果做好了log日志记录,到时候出错的时候我们会在日志记录文件中看到下面的语句:
2015-10-20 20:03:33,431 [main] ERROR cn.edu.hpu.tax.test.TestLog - / by zero
到时候我们再去排查服务器的错误的时候,就可以看到这个问题了,方便维护人员修改bug等。
好,我们的日志搭建完毕,接下来才是我们的重头戏,我们的初级增删改查业务。
2.6编写基类BaseDao
我们的增删改查都是有一个基本的固定模式的,所以我们为了避免写一些重复的代码造成代码冗余,所以我们可以写一个公用的增删改查基础类,让其他类去继承它来使用公用的增删改查的特性。
DAO基类中配备增删改查的操作:
package cn.edu.hpu.tax.core.dao; import java.io.Serializable; import java.util.List; public interface BaseDao<T> { //新增 public void save(T entity); //更新 public void update(T enetity); //根据id删除 public void delete(Serializable id); //根据id查找 public T findObjectById(Serializable id); //查找列表 public List<T> findObjects(); }
实现类:
package cn.edu.hpu.tax.core.dao.impl; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.util.List; import org.hibernate.Query; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import cn.edu.hpu.tax.core.dao.BaseDao; public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T>{ Class<T> clazz; //拿到泛型实体类T public BaseDaoImpl(){ //BaseDaoImpl<User>获取此类泛型框中的第一个泛型 ParameterizedType pt=(ParameterizedType)this.getClass().getGenericSuperclass(); clazz=(Class<T>)pt.getActualTypeArguments()[0]; } @Override public void save(Object entity) { getHibernateTemplate().save(entity); } @Override public void update(Object enetity) { getHibernateTemplate().update(enetity); } @Override public void delete(Serializable id) { getHibernateTemplate().delete(findObjectById(id)); } @Override public T findObjectById(Serializable id) { return getHibernateTemplate().get(clazz, id); } @Override public List<T> findObjects() { Query query=getSession() .createQuery("FROM "+clazz.getSimpleName()); return query.list(); } }
这就是我们的基础增删改查类。详细的功能开发下一篇继续。
转载请注明出处:http://blog.csdn.net/acmman/article/details/49312581
相关文章推荐
- js格式化时间格式
- Windows: Environment Variables for MinGW
- php5.5版本之后 对象复制就是直接引用
- 关于luci的几个问题<一>
- discuz!nt 关于用户头像无法显示、无法重新设置的解决办法
- 实例——自动选项卡
- Cookie / Session / URL重写
- 再读大道至简第四章
- 《代码阅读方法与实践》读书笔记2
- 项目39.2求满足条件n=a!+b!+c!的所有三位数n并输出,其中a,b,c分别为n的百、十、个位数。
- STL学习笔记-list容器(双链表)
- DP动态规划问题(1)
- 2015南阳CCPC H - Sudoku 暴力
- c语言/c++常见面试题
- Linux - 磁盘分区
- SqlServer+Json+S2SH+Android实现访问数据库
- 设计模式总结(经典)
- ListView多项选择功能的实现
- 51nod 1163:最高的奖励 优先队列
- 2015南阳CCPC G - Ancient Go 暴力