`
sxdtzhaoxinguo
  • 浏览: 216093 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java Web整体异常处理

 
阅读更多

在实际的J2EE项目中,系统内部难免会出现一些异常,就如Struts+Spring+Hibernate项目:通常一个页面请求到达后台以后,首先是到action(就是MVC中的controller),在action层会调用业务逻辑层service,而在service层会调用持久层dao进而获得数据,再将获得的数据一层一层返回到action层,然后通过action控制层转发到指定页面,而这期间都可能会发生异常,dao层可能会发生SQLException异常,service层可能会发生NullPointException异常,action层可能会发生IOException异常,如果这三层都不处理的话异常信息会抛到服务器,然后服务器会把异常信息打印到浏览器上(用户看不懂信息,体验十分不好,)处理得好可以使开发效率快速提升。

通常处理这些异常有两种方法:①直接throws,②try...catch...在catch块中不做任何处理,或者仅仅printStackTrace()把异常信息打印出来。第一种就是会在浏览器上打印出用户看不懂的异常信息,第二种方法则是页面不报错也不执行用户的请求。

如何更好的解决这些异常?

首先,在action类、service类、dao类,如果有必要就try...catch...,catch块内不记录log,通常是抛出一个新异常

//action层执行数据添加操作
public String save(){
   try{
         //调用service的save方法
         service.save(obj);
   }catch(Exception e){
      //抛出Runtime异常可使得不必再方法后写throws  xx
      throw new RuntimeException("添加数据时发生错误!",e);
  }
   return "success";
}

然后在异常拦截器对异常进行处理

public String intercept(ActionInvocation actioninvocation) {
 
  String result = null; // Action的返回值
  try {
   // 运行被拦截的Action,期间如果发生异常会被catch住
   result = actioninvocation.invoke();
   return result;
  } catch (Exception e) {
   /**
    * 处理异常
    */
   String errorMsg = "未知错误!";
   //通过instanceof判断到底是什么异常类型
   if (e instanceof BaseException) {
    BaseException be = (BaseException) e;
    be.printStackTrace(); //开发时打印异常信息,方便调试
    if(be.getMessage()!=null||Constants.BLANK.equals(be.getMessage().trim())){
     //获得错误信息
     errorMsg = be.getMessage().trim();
    }
   } else if(e instanceof RuntimeException){
    //未知的运行时异常
    RuntimeException re = (RuntimeException)e;
    re.printStackTrace();
   } else{
    //未知的严重异常
    e.printStackTrace();
   }
   //把自定义错误信息
   HttpServletRequest request = (HttpServletRequest) actioninvocation
     .getInvocationContext().get(StrutsStatics.HTTP_REQUEST);
   
   /**
    * 发送错误消息到页面
    */
   request.setAttribute("errorMsg", errorMsg);
  
   /**
    * log4j记录日志
    */
   Log log = LogFactory
     .getLog(actioninvocation.getAction().getClass());
   if (e.getCause() != null){
    log.error(errorMsg, e);
   }else{
    log.error(errorMsg, e);
   }
 
   return "error";
  }// ...end of catch
 }

需要注意的是,在使用instanceOf判断异常类型的时候一定要从子到父依次找,比如BaseException继承RunTimeException,则必须首先判断是否是BaseException再判断是RunTimeException,最后在error jsp页面显示出具体的错误信息

<body>
<s:if test="%{#request.errorMsg==null}">
 <p>对不起,系统发生了未知的错误</p>
</s:if>
<s:else>
 <p>${requestScope.errorMsg}</p>
</s:else>
</body>

以上方式可以拦截后台代码所有的异常,但如果出现数据库链接时异常不能被捕捉的则可使用struts2的全局异常处理机制处理

<global-results>
 <result name="error" >/Web/common/page/error.jsp</result>
</global-results>
   
<global-exception-mappings>
 <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>

文章转自:http://my.oschina.net/u/817908/blog/158056


其他关于J2EE项目异常处理机制请看:http://www.iteye.com/topic/1073599

分享到:
评论

相关推荐

    java web项目整体异常处理机制.doc

    实际的j2ee项目中,系统内部难免会出现一些异常,如果把异常放任不管直接打印到浏览器可能会让用户感觉莫名其妙,也有可能让某些用户找到破解系统的方法。

    Java Web项目整体异常处理机制

     出来工作一年时间了,我也大概对异常处理有了一些了解,在这呢小弟简单介绍下个人对异常处理的见解,抛砖引玉,希望各位大神提出宝贵的意见和建议。  拿spring+struts2+hibernate项目说明:通常一个页面请求到...

    精通Struts基于MVC的Java Web设计与开发 孙卫琴 光盘

    第8章到第9章介绍了开发Struts应用的一些实用技术,如Struts框架的扩展点、Struts应用的国际化,Validator验证框架和异常处理机制等。第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles...

    基于MVC的java Web设计与开发

    第8章到第9章介绍了开发Struts应用的一些实用技术,如Struts框架的扩展点、Struts应用的国际化,Validator验证框架和异常处理机制等。第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles...

    精通Struts_基于MVC的Java Web设计与开发

    第8章到第9章介绍了开发Struts应用的一些实用技术,如Struts框架的扩展点、Struts应用的国际化,Validator验证框架和异常处理机制等。第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles...

    精通struts:基于mvc的java web设计与开发part3

    第8章到第9章介绍了开发Struts应用的一些实用技术,如Struts框架的扩展点、Struts应用的国际化,Validator 验证框架和异常处理机制等。第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles...

    精通struts:基于mvc的java web设计与开发part2

    第8章到第9章介绍了开发Struts应用的一些实用技术,如Struts框架的扩展点、Struts应用的国际化,Validator 验证框架和异常处理机制等。第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles...

    精通struts:基于mvc的java web设计与开发part1

    第8章到第9章介绍了开发Struts应用的一些实用技术,如Struts框架的扩展点、Struts应用的国际化,Validator 验证框架和异常处理机制等。第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles...

    精通 Struts:基于 MVC 的 JavaWeb 设计与开发(PDF)

    第8章到第9章介绍了开发Struts应用的一些实用技术,如Struts框架的扩展点、Struts应用的国际化,Validator验证框架和异常处理机制等。第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles...

    java 面试题 总结

    finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 13、sleep()...

    超级有影响力霸气的Java面试题大全文档

    finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 16、sleep...

    ssm项目weixin217基于微信小程序的学生签到系统设计与实现ssmpf.zip

    5. **异常处理**: 对于未能正常签到的学生,系统提供了补签和请假流程,并记录异常原因。 6. **消息推送**: 通过微信小程序向学生推送签到提醒和结果通知,提高用户体验和互动性。 整个项目采用MVC设计模式,其中...

    ssm项目weixin077停车场微信小程序的设计与实现+ssmpf.zip

    8. **异常处理**:对于停车超时或其他异常情况,系统能够自动报警并提示管理人员进行处理。 整个项目采用MVC架构设计,Spring负责整体业务逻辑的处理和依赖注入,Spring MVC用于处理HTTP请求和页面跳转,而MyBatis...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    8.4.4 改变异常处理的方式 8.5 小结 第九章 CVS使用指南 9.1 CVS介绍 9.1.1 CVS简介 9.1.2 为什么要使用CVS 9.2 建立CVS的开发环境 9.2.1 下载CVS 9.2.2 配置CVS 9.3 CVS的使用方法 9.3.1 添加CVS资源库 9.3.2 提交...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    8.4.4 改变异常处理的方式 8.5 小结 第九章 CVS使用指南 9.1 CVS介绍 9.1.1 CVS简介 9.1.2 为什么要使用CVS 9.2 建立CVS的开发环境 9.2.1 下载CVS 9.2.2 配置CVS 9.3 CVS的使用方法 9.3.1 添加CVS资源库 9.3.2 提交...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    8.4.4 改变异常处理的方式 8.5 小结 第九章 CVS使用指南 9.1 CVS介绍 9.1.1 CVS简介 9.1.2 为什么要使用CVS 9.2 建立CVS的开发环境 9.2.1 下载CVS 9.2.2 配置CVS 9.3 CVS的使用方法 9.3.1 添加CVS资源库 9.3.2 提交...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    8.4.4 改变异常处理的方式 8.5 小结 第九章 CVS使用指南 9.1 CVS介绍 9.1.1 CVS简介 9.1.2 为什么要使用CVS 9.2 建立CVS的开发环境 9.2.1 下载CVS 9.2.2 配置CVS 9.3 CVS的使用方法 9.3.1 添加CVS资源库 9.3.2 提交...

    ssm项目weixin077停车场微信小程序的设计与实现+ssm.zip

    8. **客服支持**:设置在线客服功能,解答用户疑问和处理异常情况。 整个项目采用MVC设计模式,Spring负责整体业务逻辑的处理和依赖注入,Spring MVC用于处理HTTP请求和页面跳转,而MyBatis负责与数据库的交互操作...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。 WebStorage HTML新增的本地存储解决...

Global site tag (gtag.js) - Google Analytics