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

Web框架
Web框架介绍---SpringMVC
基于Django框架的敏捷Web开发
驾驭新的Ruby Web框架Waves
JAVA脚本取得struts2 OgnlValueStack中的值
Struts中DownloadAction的使用
优化Hibernate性能的几点建议
Hibernate高级查询实战
对于Struts和Spring两种MVC框架的比较
JSF与Struts的比较 超易懂!
hibernate 主键生成方式
spring acegi 官方例子
获取ApplicationContext的几种方式
Spring与自动调度任务 基于Timer的任务调度器的应用
spring+hibernate 的包的详解,帮你了解每个包的作用以及是否必要导入工程
hibernate 一对一(one to one)级联保存
struts formbean 就是鸡肋
Struts中常用的几种Action
spring的应用事例
struts2(一)
struts2(二)

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


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