当前位置: 首页 > 图文教程 > Java技术 > Web框架 > Web框架:小议Spring的异常处理那点事

Web框架
struts2(三)
struts2(四)
struts2(五)
struts2(六)
Spring中注入概念的简单介绍
深入探讨struts的ActionMessages消息机制(转)
DWR 的 Converter 实现原理简单分析及应用
详解Spring中bean的作用域
AJAX实现级联下拉框
Spring AOP面向方面编程原理:AOP概念
Spring结合Hibernate声明式事务配置
Struts 概述
Ajax 入门简介
Struts配置文件详解
Struts in Spring
Struts 开发的最佳实践
Struts核心标签
开发框架:利用STRUTS实现国际化支持
Struts自定义标签的过程
Struts 框架的基本概念及实现MVC模式的原理

Web框架:小议Spring的异常处理那点事


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 272 ::
收藏到网摘: n/a

Web应用中对于异常的处理方式与其他形式的应用并没有太大的不同――通过try/catch语句针对不同的异常进行相应处理。

但是在具体实现中,由于异常层次、种类繁杂,我们往往很难在ServletJSP层妥善的处理好所有异常情况,代码中大量的try/catch代码显得尤为凌乱。

我们通常面对下面两个主要问题:

1 对异常实现集中式处理

典型情况:对数据库异常记录错误日志。一般处理方法无外两种,一是在各处数据库

访问代码的异常处理中,加上日志记录语句。二是将在数据访问代码中将异常向上抛

出,并在上层结构中进行集中的日志记录处理。

第一种处理方法失之繁琐、并且导致系统难以维护,假设后继需求为“对于数据库异

常,需记录日志,并发送通知消息告知系统管理员”。我们不得不对分散在系统中的各

处代码进行整改,工作量庞大。

第二种处理方法实现了统一的异常处理,但如果缺乏设计,往往使得上层异常处理过

于复杂。

这里,我们需要的是一个设计清晰、成熟可靠的集中式异常处理方案。

2 对未捕获异常的处理

对于Unchecked Exception而言,由于代码不强制捕获,往往被程序员所忽略,如果

运行期产生了Unchecked Exception,而代码中又没有进行相应的捕获和处理,则我

们可能不得不面对尴尬的500服务器内部错误提示页面。

这里,我们需要一个全面而有效的异常处理机制。

Spring MVC中提供了一个通用的异常处理机制,它提供了一个成熟的,简洁清晰的异常处理方案。如果基于Spring MVC开发Web应用,那么利用这套现成的机制进行异常处理也更加自然和有效。

Spring  MVC中的异常处理:

以前面的注册系统为例,首先,在Dispatcher配置文件Config.xml中增加id

exceptionResolver”的bean定义:

<bean id="exceptionResolver"

class="org.springframework.web.servlet.handler.SimpleMappingEx

ceptionResolver">

<property name="defaultErrorView">

SpringFrameWork Developer’s Guide Version 0.6

October 8, 2004 So many open source projects.Why not Open your Documents?

<value>failure</value>

</property>

<property name="exceptionMappings">

<props>

<prop key="java.sql.SQLException">showDBError</prop>

<prop key="java.lang.RuntimeException">showError</prop>

</props>

</property>

</bean>

通过SimpleMappingExceptionResolver我们可以将不同的异常映射到不同的jsp

面(通过exceptionMappings属性的配置),同时我们也可以为所有的异常指定一个默认的异常提示页面(通过defaultErrorView属性的配置),如果所抛出的异常在exceptionMappings中没有对应的映射,则Spring将用此默认配置显示异常信息(注意这里配置的异常显示界面均仅包括主文件名,至于文件路径和后缀已经在viewResolver中指定)。

一个典型的异常显示页面如下:

<html>

<head><title>Exception!</title></head>

<body>

<% Exception ex = (Exception)request.getAttribute("Exception"); %>

<H2>Exception: <% ex.getMessage();%></H2>

<P/>

<% ex.printStackTrace(new java.io.PrintWriter(out)); %>

</body>

</html>

如果SimpleMappingExceptionResolver无法满足异常处理的需要,我们可以针HandlerExceptionResolver接口实现自己异常处理类,这同样非常简单(只需要实现一个resolveException方法)。