【SSH项目实战】国税协同平台-3.资源文件分类&log4j&抽取BaseAction

来源:互联网 发布:java transient 作用 编辑:程序博客网 时间:2024/05/17 20:28

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配置文件:
[plain] view plaincopy
  1. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
  2. log4j.appender.stdout.Target=System.out  
  3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  4. log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p [%t] %c{1}:%L - %m%n  
  5.   
  6. log4j.rootLogger=warn, stdout  
  7.   
  8. log4j.logger.cn.edu.hpu=debug  

其中的意思分别是:输出位置(ConsoleAppender后台输出)、Target目标、输出的格式(PatternLayout),参数值配置。

创建测试文件,测试log4j的五个日志级别:
[java] view plaincopy
  1. package cn.edu.hpu.tax.test;  
  2.   
  3. import org.apache.commons.logging.Log;  
  4. import org.apache.commons.logging.LogFactory;  
  5. import org.junit.Test;  
  6.   
  7. public class TestLog {  
  8.       
  9.     @Test  
  10.     public void test(){  
  11.         Log log=LogFactory.getLog(getClass());  
  12.         log.debug("debug 级别日志");  
  13.         log.info("info 级别日志");  
  14.         log.warn("warn 级别日志");  
  15.         log.error("error 级别日志");  
  16.         log.fatal("fatal 级别日志");  
  17.     }  
  18. }  

测试结果:
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之外的信息用户是不需要知道的,我们只输出这两个信息可以减轻日志文本文件的容量。

下面我们就配置日志的文本输出:
我们在中添加下面的语句:
[plain] view plaincopy
  1. log4j.appender.R=org.apache.log4j.DailyRollingFileAppender  
  2. log4j.appender.R.File=F:/tax/tax.log  
  3. log4j.appender.R.layout=org.apache.log4j.PatternLayout  
  4. log4j.appender.R.layout.ConversionPattern=%d [%t] %5p  %c - %m%n  

我们的报错信息就会保存在F:/tax/tax.log下,并且每日新增日志文件(DailyRollingFileAppender)。

根据我们的配置,我们的日志信息不仅会显示在控制台,而且会输出到日志记录文件中:


我们的使用场景在哪里呢?

下面这个

[java] view plaincopy
  1. package cn.edu.hpu.tax.test;  
  2.   
  3. import org.apache.commons.logging.Log;  
  4. import org.apache.commons.logging.LogFactory;  
  5. import org.junit.Test;  
  6.   
  7. public class TestLog {  
  8.       
  9.     @Test  
  10.     public void test(){  
  11.         Log log=LogFactory.getLog(getClass());  
  12.         try {  
  13.             int i=1/0;  
  14.         } catch (Exception e) {  
  15.             log.error(e.getMessage());  
  16.             e.printStackTrace();  
  17.         }  
  18.     }  
  19. }  

我们如果做好了log日志记录,到时候出错的时候我们会在日志记录文件中看到下面的语句:

[plain] view plaincopy
  1. 2015-10-20 20:03:33,431 [main] ERROR  cn.edu.hpu.tax.test.TestLog - / by zero  

到时候我们再去排查服务器的错误的时候,就可以看到这个问题了,方便维护人员修改bug等。

好,我们的日志搭建完毕,接下来才是我们的重头戏,我们的初级增删改查业务。

2.6编写基类BaseDao
我们的增删改查都是有一个基本的固定模式的,所以我们为了避免写一些重复的代码造成代码冗余,所以我们可以写一个公用的增删改查基础类,让其他类去继承它来使用公用的增删改查的特性。

DAO基类中配备增删改查的操作:
[java] view plaincopy
  1. package cn.edu.hpu.tax.core.dao;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.List;  
  5.   
  6. public interface BaseDao<T> {  
  7.       
  8.     //新增  
  9.     public void save(T entity);  
  10.     //更新  
  11.     public void update(T enetity);  
  12.     //根据id删除  
  13.     public void delete(Serializable id);  
  14.     //根据id查找  
  15.     public T findObjectById(Serializable id);  
  16.     //查找列表  
  17.     public List<T> findObjects();  
  18. }  

实现类:
[java] view plaincopy
  1. package cn.edu.hpu.tax.core.dao.impl;  
  2.   
  3. import java.io.Serializable;  
  4. import java.lang.reflect.ParameterizedType;  
  5. import java.util.List;  
  6.   
  7. import org.hibernate.Query;  
  8. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
  9.   
  10. import cn.edu.hpu.tax.core.dao.BaseDao;  
  11.   
  12. public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T>{  
  13.       
  14.     Class<T> clazz;  
  15.       
  16.     //拿到泛型实体类T  
  17.     public BaseDaoImpl(){  
  18.         //BaseDaoImpl<User>获取此类泛型框中的第一个泛型  
  19.         ParameterizedType pt=(ParameterizedType)this.getClass().getGenericSuperclass();  
  20.         clazz=(Class<T>)pt.getActualTypeArguments()[0];  
  21.     }  
  22.       
  23.     @Override  
  24.     public void save(Object entity) {  
  25.         getHibernateTemplate().save(entity);  
  26.     }  
  27.   
  28.   
  29.     @Override  
  30.     public void update(Object enetity) {  
  31.         getHibernateTemplate().update(enetity);  
  32.     }  
  33.       
  34.     @Override  
  35.     public void delete(Serializable id) {  
  36.         getHibernateTemplate().delete(findObjectById(id));  
  37.     }  
  38.   
  39.   
  40.     @Override  
  41.     public T findObjectById(Serializable id) {  
  42.         return getHibernateTemplate().get(clazz, id);  
  43.     }  
  44.   
  45.   
  46.     @Override  
  47.     public List<T> findObjects() {  
  48.         Query query=getSession()  
  49.             .createQuery("FROM "+clazz.getSimpleName());  
  50.         return query.list();  
  51.     }  
  52. }  
0 0
原创粉丝点击