异常处理的作用
(1)系统出问题后,方便开发人员快速定位和找到问题。
(2)最好使用细粒度的自定义异常,人性化提示和处理。
DAO层的异常处理。
1.SSH4框架抛出异常,DAO层无需再显式抛出。DataAccessException 和 HibernateException都是运行时异常(unchecked非检测型异常)
(1)DAO 使用Hibernate3时,Spring提供继承HibernateDaoSupport,获得getHibernateTemplate().
默认抛出org.springframework.dao.DataAccessException异常(getHibernateTemplate()方法抛出的)
(2)DAO 使用Hibernate4时,Spring不提供HibernateDaoSupport,自己写的模板getSessionFactory().getCurrentSession()实现
默认抛出org.hibernate.HibernateException异常
2.DAO 的异常被上面两个异常之一封装,不会再抛出SqlException(检测型异常),所以即使接口中抛出SqlException也捕捉不到。
即使抛出也没意义,因为service层处理不了这异常。
所以DAO层的异常通常不处理(不throws 也不try-catch) ,要抛出的只是自定义异常(业务需要时)。
Service层的异常处理 :需要定义业务异常类,对异常进行细分。
1.除了调用了抛checked的异常的方法外,没必要在每个方法后都加throws Exception或者throws XXXException,
因为没有意义,加不加如果出异常了都会往上抛出。
2.即使调用了抛checked的异常的方法,也最好try-catch处理,转化成自定义的业务异常。
3.业务异常BusinessException定义成继承runtimeExeption。也不需要
写法是:
//业务代码 if(业务状态){ throw new BusinessException("XXXX"); }
如果方法中调用了抛checked的异常的方法抛出了xxxException:
try{ }cath(xxxException e){ //转化成业务异常 throw new BusinessException("XXXX",e); //throw new BusinessException("XXXX");--不推荐,因为这样的话就丢失了异常堆栈信息 }
4.spring事务管理默认回滚条件是runtimeExcetion,因为SQLException等异常被转化成了HibernateException或者DataAccessException,都属于runtimeExeption异常。
如果希望设置为Checked异常也可以配置实现:<tx:method name="*" rollback-for="java.lang.Exception"/>
但是不推荐,Spring和Hibernate对Dao层异常的处理都倾向于使用runtimeExeption异常,因为调用者能抛出或者catch,但是并不能解决问题。
5. 需要注意:从Hibernate 3.X.X版本(不知道具体版本)开始HibernateException定义成RunTimeException异常。
所以,对于低版本的Hibernate,由于HibernateException异常含有(或属于)Checked异常,
需要注意下因为抛出的是checked异常导致事务不会回滚的情况。
Action层的异常处理
只捕获自定义应用异常,其他异常可以上抛(不管它不使用throws 也不try-catch,其实也是上抛),也可以封装成errorMessage。
Action层的异常,是上抛给Struts2框架,通过配置文件配置跳转的页面,还是直接转化成errorMessage返回给用户,需要看情况。
即:给用户看到的是一个提示,还是一个错误提示的页面,可以自己选择。
action层日志:
1.Struts2提供了异常拦截器,拦截器会将定义的异常捕获,记录日志,然后根据配置的异常的类型顺序跳转到相应的页面。
2.如果觉得Struts2自己的异常拦截器不够完善,可以自己写个异常拦截器。这也是一劳永逸的做法。
3.灵活日志的做法是每个action中都new一个logger对象,直接记录日志,不过需要自己编码,可能有人觉得复杂。
3个日志
系统运行日志:记录系统的运行情况,跟踪代码运行时轨迹;
异常和错误日志:记录异常堆栈信息,以供开发人员查看分析;
业务日志:记录业务信息和用户操作,例如用户登录、删除数据、更新数据等。
哪些操作需要产生操作日志,可以做成配置,甚至把用户IP、登录名、系统、时间、操作等保存到数据库。
相关推荐
ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh框架项目源码ssh...
SSH配置详细步骤及异常处理 该文章详细介绍了SSH的配置步骤与工程代码。 配置步骤见:http://blog.csdn.net/sipsir/archive/2009/10/23/4721526.aspx 代码下载:http://sipsir.download.csdn.net/
ssh2项目错误锦集ssh2项目错误锦集ssh2项目错误锦集ssh2项目错误锦集ssh2项目错误锦集ssh2项目错误锦集ssh2项目错误锦集ssh2项目错误锦集ssh2项目错误锦集ssh2项目错误锦集ssh2项目错误锦集ssh2项目错误锦集ssh2项目...
ssh2完整项目ssh2完整项目ssh2完整项目ssh2完整项目ssh2完整项目ssh2完整项目ssh2完整项目ssh2完整项目ssh2完整项目ssh2完整项目ssh2完整项目ssh2完整项目ssh2完整项目ssh2完整项目ssh2完整项目ssh2完整项目ssh2完整...
SSH异常和日志处理方案.
完整的ssh项目 完整的ssh项目完整的ssh项目 完整的ssh项目完整的ssh项目 完整的ssh项目
完整SSH项目,完整SSH项目,完整SSH项目
javaweb structs2 ssprint Hibernate经典入门案例 聊天项目
用idea开发工具创一个SSH框架的java web 项目实例,以及项目相关配置
一个ssh项目的源码,还有一半,注意下全
SSH2项目,个人做的,增删改查,个人觉得还不错!
extjs4 ssh 项目源码
简单概述java ssh项目的分层结构,了解企业中ssh框架的使用规范
这是整合的项目,具有项目框架搭建完成,去除了hibernate配置文件,由于某些原因原项目不能上传
ssh项目
SSH经典项目源码,绝对 好用 SSH经典项目源码,绝对 好用
一个经典的ssh框架整合例子,很适合新手,可以看看
Android+SSH综合项目实践 在我们集成struts2+spring+hibernate,也就是所谓的S2SH,不可避免的要引入struts2-spring- plugin.jar插件。当引入这个插件后,原先所struts创建的action类,交给了spring创建。在struts2-...