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

Web框架
Web框架:addOptions and removeAllOptions
Web框架:Xfire与Spring集成那些事
Web框架:多个dwr.xml配置方法
Web框架:小编整理Hibernate 基本查詢
Web框架:DWR使用中的web.xml配置
Web框架:Struts2使用Spring插件完成整合
Web框架:小编叙Spring的事务管理
Web框架:Struts2国际化实现用户自行选择语言
Web框架:Struts2中加载资源文件的方式
Web框架:Struts2中整合图表工具JFreeChart的时间顺序图
Web框架:浅谈Struts2的内建校验器
Web框架:FreeMarker中的escape , noescape指令
Struts2的Visitor校验器
Struts2中的subset标签使用方法浅谈
Hibernate核心接口那些事
Spring中的依赖注入
Spring中的Inversion of Control 容器
浅析Spring中的单元测试
用StrutsTestCase测试Struts应用程序
浅谈Struts中html:options的使用

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 267 ::
收藏到网摘: 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方法)。