以前面的注册系统为例,首先,在Dispatcher配置文件Config.xml中增加id为“exceptionResolver”的bean定义:
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView">
<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方法)。