最近发现运维的一个系统对于异常的处理比较简单粗暴,改进如下:
1.在application-context.xml文件中增加异常解析器:
<!-- 异常处理 -->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="include/defaultException"/>
<property name="defaultStatusCode" value="404" />
<property name="exceptionMappings">
<props>
<prop key="java.sql.SQLException">include/defaultException</prop>
<prop key="java.lang.RuntimeException">include/defaultException</prop>
</props>
</property>
</bean>
(1)SimpleMappingExceptionResolver是spring的一个处理类,实现了HandlerExceptionResolver接口
可以看到,实现接口的方法在返回的ModelAndView里将exception作为参数返回了,这样我们就可以在页面获取这个异常对象,进行异常信息的展示了
(2) exceptionMappings可以指定对不同的异常跳转到对应的异常页面,这里异常可以是java中已经定义好的异常也可以自定义异常(只需要继承Exception或其子类即可)。
(3)若异常不在exceptionMappings里,则会跳转到defaultErrorView指定的异常页面。defaultStatusCode是默认情况下对应的状态码是哪种情况才会跳转到defaultErrorView,defaultStatusCode属性可以不配置,默认defaultError包括所有的状态码。
defaultErrorView指定的异常页面可以将报错的message作为参数传给对应页面显示。类似于下面这种,抛出一个自定义异常:
页面中就可以通过exception对象的getMessage()来获取报错信息。
当然了,springMVC还有注解方式的异常处理这里没有提到,之后会补充进来。