`
thinkerAndThinker
  • 浏览: 282473 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SSH异常和日志处理方案

 
阅读更多


1         异常和日志的作用
1.1.    异常的作用

Java异常机制是为了对程序中可能出现的已知错误进行捕获,并进行相应处理。从是否反馈给用户来看,存在两类异常:

系统异常:这类异常由系统本身的低级异常引起,例如数据库连接失败、内存溢出、空指针异常等等,这类异常不需要出现在前台,因为用户看不懂也没有必要看到这些异常信息。这类异常需要在日志中进行完整记录以供日后开发人员进行查看分析。

应用异常:即自定义异常,这类异常需要通过前台反馈给用户,友好提示用户当前操作异常。应用异常通过系统异常转换而来,例如新建用户时,发生“主键冲突异常”,则需要在UserinfoDao中将“主键冲突异常”捕获,并转换为应用异常,异常提示信息设为“该用户名XXX已存在,请使用其它用户名”,并将该异常信息反馈给前台。只要系统异常影响到的用户的当前操作,就必须给用户提示信息,比如“系统后台发生错误,请稍后再试”等。应用异常应按照提示方式的异常进行分类,对应不同的提示页面。


1.2.    日志的作用

系统运行日志:记录系统的运行情况,跟踪代码运行时轨迹;

异常和错误日志:记录异常堆栈信息,以供开发人员查看分析;

业务日志:记录业务信息和用户操作,例如用户登录、删除数据、更新数据等。


2.      异常的处理原则

1、避免过大的try块,不要把不会出现异常的代码放到try块里面,尽量保持一个try块对应一个或多个异常。

2、细化异常的类型,不要不管什么类型的异常都写成Excetpion。catch语句表示我们预期会出现某种异常,而且希望能够处理该异常。异常类的作用就是告诉Java编译器我们想要处理的是哪一种异常,然后针对具体的异常类进行不同的处理。例如在DAO层中我们应该只捕获SQLException或DataAccessException(Spring自定义的数据访问异常类)这些数据库异常类,其他的异常NullPointException、NumberFormatException等应通过检测代码增加其健壮性来解决,而不应该通过try..catch(Exception e)…语句捕获所有的异常。

3、不要把自己能处理的异常抛给别人,不要忽略捕获的异常,捕获到后要么处理,要么转译,要么重新抛出新类型的异常。。处理方式包括:

?  处理异常。针对该异常采取一些行动,例如修正问题、提醒某个人或进行其他一些处理,要根据具体的情形确定应该采取的动作。再次说明,调用printStackTrace算不上已经“处理好了异常”。

?  重新抛出异常。处理异常的代码在分析异常之后,认为自己不能处理它,重新抛出异常也不失为一种选择。

?  把该异常转换成另一种异常。大多数情况下,这是指把一个低级的异常转换成应用级的异常(其含义更容易被用户了解的异常)。

4、如果对catch块尽量保持一个块捕获一类异常,在catch语句中尽可能指定具体的异常类型,必要时使用多个catch。

 

例:

      try {

      } catch (Exception e) {

           e.printStackTrace();

           log.error("UserinfoDao execute() failed");

}

这段代码捕获了异常,但实际上对异常并没有进行处理,可以算得上Java编程中的杀手。按照这个方式,在DAO层发生异常被忽略,Service层就认为DAO层运行正确,就不会回滚,事务控制就没有任何作用!!!

?  printStackTrace对调试程序有帮助,但程序调试阶段结束之后,printStackTrace就不应再在异常处理模块中担负主要责任。

?  日志尽量在系统中的各个出口,例如Action、调度方法等处统一记录,可减少工作量,况且日志"UserinfoDao execute() failed”并没有说明异常的详细信息,没有必要向日志输出这句话。

?  即使catch中加入throw new RuntimeException(e);语句。如果捕获的异常是RuntimeException,更没有必要将异常再次转化为RuntimeException,这样不仅异常的本身的类型丢失,重新定义异常也造成一定消耗。

所以该处的处理原则应是:如果该处异常需要能转化为业务异常反馈给用户,则需要捕捉低级异常并转换成业务异常上抛,否则不做任何处理!!!

 

6、不要用try...catch参与控制程序流程,异常控制的根本目的是处理程序的非正常情况。


3.      开发中异常的处理方式

本系统使用SSH框架,DAO+Service+Action三层架构,捕获原则是只有将低级系统异常转化为应用异常的需要才进行捕捉。

各层的处理方式如下:

DAO层:引发DAO异常的问题往往是不可恢复的,如数据连接失败,SQL语句存在语法错误,强制捕捉的检查型异常除了限制开发人员的自由度以外,并没有提供什么有意义的作用。因此,Spring的异常体系都是建立在运行期异常的基础上,这些异常都继承于DataAccessException(RuntimeException异常子类),所以,除了出于将低级系统异常转化为应用异常的需要,没有必要捕获异常,让DAO类自动上抛异常即可。

Service层:只捕获自定义应用异常,其他异常上抛。

Action:只捕获自定义应用异常,其他异常上抛。Struts2提供了异常拦截器,拦截器会将定义的异常捕获,记录日志,然后根据配置的异常的类型顺序跳转到相应的页面。配置如下:

 

struts.xml配置文件

<interceptor-ref name="defaultStack">

       <param name="exception.logEnabled">true</param><!--开启日志记录 -->

       <param name="exception.logLevel">error</param><!-- 日志级别为ERROR -->

</interceptor-ref>

<global-exception-mappings><!—异常类和跳转页面配置 -->

       <exception-mapping result="basicerror" exception="com.yixun.police.exception.BasicException"/>

       <exception-mapping result="error" exception="java.lang.Exception"/>

</global-exception-mappings>

 

com.yixun.police.exception.BasicException为自定义应用异常,如果客户端的请求执行过过程中产生com.yixun.police.exception.BasicException异常,则会自动转到basicerror页面,从而给用户相应的提示。

 

basicerror页面

<%@ page language="java" contentType="text/xml; charset=UTF-8"       pageEncoding="UTF-8"%>${exception.message }


4.      自定义应用异常

异常名称

说明

com.yixun.police.exception.BasicException

基础异常类,本系统中所有的自定义异常类均需继承本类

com.yixun.police.exception. DuplicateKeyException

主键冲突异常,继承BasicException

 

 

例:

Userinfo save方法异常处理

@Override

       public void save(Userinfo entity) {

              try {

                     super.save(entity);

              } catch (DataIntegrityViolationException e) {

                     if(e.getCause().getCause() instanceof SQLException){

                            SQLException sqlE = (SQLException)e.getCause().getCause();

                            if(sqlE.getErrorCode()==1){//ORACLE主键冲突异常代码

                                   throw new DuplicateKeyException("用户名:"+entity.getUserid()+"已存在,请使用其他用户名");

                            }

                     }

              }

       }


5.      日志配置

系统中目前配置了三个日志记录器,一个为异常记录器,专门记录异常信息,日志文件到达一定大小后将产生新的日志文件,文件名称为exception.log,另一个为系统运行记录器,按照日期记录所有的日志信息。

 
分享到:
评论

相关推荐

    SSH异常和日志处理方案(开发人员必备)

    ### SSH异常和日志处理方案(开发人员必备) #### 一、异常与日志的作用 ##### 1.1 异常的作用 Java异常机制是一种重要的编程特性,它允许程序员识别和处理程序执行过程中可能发生的错误状况。根据是否需要直接...

    SSH配置详细步骤及异常处理

    SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全...通过细心配置和处理异常,可以构建出稳定且易于维护的企业级应用。记住,实践是检验真理的唯一标准,多动手尝试和调试,是掌握SSH配置的最好方法。

    SSH日志管理系统

    SSH日志管理系统是一种基于Spring、Struts和Hibernate(SSH)三大主流Java Web开发框架构建的日志管理解决方案。SSH框架组合提供了强大的数据持久层、业务逻辑层和表现层支持,是许多企业级应用开发的首选技术栈。在...

    ssh+aop+log4j+日志拦截器+注解

    它可以在方法执行前、执行后或异常时插入日志打印,帮助开发者跟踪程序运行状态,尤其在多线程和复杂业务逻辑中非常有用。 5. 注解:注解是Java SE 5.0引入的新特性,它允许元数据(关于代码的信息)直接嵌入到源...

    ssh开源框架日志心得.pdf

    SSH开源框架日志心得主要涵盖了Struts2、Spring和Hibernate这三个核心组件的集成与使用,以及Spring的装配策略和单例、多例模式的应用。以下是这些知识点的详细说明: 1. **Filter、Interceptor、AOP**: 这三个...

    juicessh1.4.7 和 1.3.6 安卓下最好用的SSH工具

    9. **通知与警报**:JuiceSSH可以设置警报和通知,当远程服务器发生特定事件时,例如服务停机或异常日志,用户将立即收到提醒。 10. **插件系统**:通过其插件系统,JuiceSSH可以扩展其功能,如添加Mosh支持、整合...

    SSH框架搭建源码

    7. **异常处理**:SSH框架通常会有统一的全局异常处理机制,对可能出现的异常进行捕获和处理。 8. **视图渲染**:登录成功或失败后,Struts2会根据配置的结果转发或重定向到相应的JSP页面进行显示。 通过这个...

    JavaWeb初级实例日志管理系统MVC,Struts,SSH

    JavaWeb初级实例中的日志管理系统是一个基于MVC(Model-View-Controller)设计模式的Web应用,它结合了Struts和SSH(Spring、Struts、Hibernate)两大主流框架,为开发者提供了一个简单但完整的日志记录和管理平台。...

    ssh2 注解 事物

    这可能涉及到异常处理和回滚机制,以确保数据一致性。 5. **错误处理**:SSH2可能会遇到各种错误,如网络问题、认证失败或服务器拒绝。良好的错误处理和日志记录是必不可少的,注解可以帮助简化这部分代码。 6. **...

    SSH整合遇到的问题及解决方案

    7. **异常处理**:Struts2和Spring都有自己的异常处理机制。在整合时,需要协调两者,统一异常处理策略,以避免信息泄露或错误处理不当。 8. **国际化和本地化**:SSH整合时,可能会涉及到多语言支持。确保在Struts...

    SSH可用jar包

    通常,选择兼容的SSH jar包是项目初始化阶段的关键步骤,因为不同版本的SSH组件可能存在兼容性问题,可能导致运行错误或功能异常。 在压缩包子文件的文件名称列表中提到的"SSH环境的搭建配置文件"可能包括以下内容...

    ssh 详细配置 视频

    定期检查这些日志,以便发现并处理任何异常登录尝试。 9. **端口转发**: SSH还支持端口转发,可用于安全地访问内部网络资源。本地端口转发(`-L`选项)将本地端口的流量转发到远程主机,而远程端口转发(`-R`选项)...

    SSH各种问题集合及解决方案

    ### SSH各种问题集合及解决方案 #### 一、SSH基础启动问题 **问题描述:** SSH服务启动时出现异常,导致无法正常连接。 **解决方案:** 1. **检查SSH配置文件**: - 需要确认`/etc/ssh/sshd_config`文件中的配置...

    ssh框架使用方法总结

    SSH框架,全称为Spring、Struts和Hibernate的组合,是一种常用的Java Web开发框架。...然而,实际开发中还需要考虑异常处理、安全性、性能优化等多个方面,这需要根据项目需求和最佳实践进行细致的配置和设计。

    ssh2用到的jar包

    6. **异常处理**:在SSH2开发中,需要处理各种可能的异常,例如网络中断、认证失败、权限问题等。良好的异常处理机制可以确保应用程序在遇到问题时能够优雅地恢复或退出。 7. **多线程支持**:如果需要并发地处理多...

    SSH仿51.com

    同时,Spring MVC作为Spring的一个模块,用于处理HTTP请求,提供了模型绑定、数据验证和异常处理等功能,使开发者能够更专注于业务逻辑的实现。 Struts2框架则作为Web层的控制器,它接收用户的请求,通过Action类来...

    SSH员工管理系统

    SSH员工管理系统是一个基于Java开发的综合管理应用,它利用了Spring、Struts2和Hibernate这三个核心框架,构建了一个高效、可扩展的企业级解决方案。SSH框架是Java Web开发中常用的技术栈,结合了Spring的依赖注入...

    (转)SSH项目编写规范示例

    4. **日志记录**:合理使用日志框架,记录关键操作和异常信息,方便问题排查。 5. **版本控制**:使用Git等版本控制系统,进行代码管理和协作。 6. **持续集成**:配置持续集成服务器,自动化构建和测试,保证代码...

    SSH协议连接远程服务器的java实现

    构造方法初始化输入输出流,`parse_inputStream` 和 `parse_outputStream` 方法用于处理输入输出流的创建。 - **登录方法**: ```java public boolean login(String server, int port, String user, String ...

    SSH视频演示SSH搭建

    Struts提供了强大的表单验证、国际化和异常处理机制,使得开发者可以更专注于业务逻辑的实现,而不是基础架构。 2. **Hibernate**:作为对象关系映射(ORM)工具,Hibernate消除了数据库访问层的复杂性,允许开发者...

Global site tag (gtag.js) - Google Analytics