JAVA_OA(六):SpringMVC处理异常
关于本部分的内容
这个部分网上的博文数量很多,内容很杂,虽然很全面,但是正好缺一篇新手级别的文章,于是我写了这篇文章,希望读完它,你快速轻易将学会如何使用它,而不用将太多的精力放在没用的地方.
在web.html中配置错误界面
之前我们对于错误,一般只是配置一下异常页面,这样就可以在错误放生时不太尴尬,比如github的UFO抓走了页面,腾讯的UFO抓走页面(怎么有种奇怪的感觉),确实是不错的创意,然而处理异常可又不仅仅是这么简单,一般而言,能捕获的异常还是先捕获的好.
Spring MVC处理异常有2种方式:
1 使用Spring MVC预置的类SimpleMappingExceptionResolver处理异常。
2 使用@ExceptionHandler处理异常。
1.使用Spring MVC预置的类SimpleMappingExceptionResolver处理异常。
<!-- 这种方式需要在组件中配置-->
<!--配置的 XML方式的异常处理 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.Exception">error</prop>
<!-- error指的是返回error页面,怎么写随意-->
</props>
</property>
</bean>
2 使用@ExceptionHandler处理异常。
@ExceptionHandler
public String handleException111(Exception e, HttpServletRequest request,
HttpServletResponse response) throws Exception {
if (e instanceof NumberFormatException) {
// NumberFormatException:数字格式化错误
request.setAttribute("ErrorMessage", "NumberFormatException:请输入数字");
return "ErrorMessage";
} else {
throw e;
}
/*
jsp:
<%@ page pageEncoding="utf-8"%>
<html>
<head>
</head>
<body>服务器端发生错误:${ErrorMessage}
</body>
</html>
*/
3.优先级问题
优先级:
既然在SpringMVC中有两种处理异常的方式,那么就存在一个优先级的问题。
当发生异常的时候,SpringMVC会按照以下的优先级处理:
(1)SpringMVC会先从配置文件找异常解析器HandlerExceptionResolver
(2)如果找到了异常异常解析器,那么接下来就会判断该异常解析器能否处理当前发生的异常
(3)如果可以处理的话,那么就进行处理,然后给前台返回对应的异常视图
(4)如果没有找到对应的异常解析器或者是找到的异常解析器不能处理当前的异常的时候,就看当前的Controller中有没有提供对应的异常处理器,如果提供了就由Controller自己进行处理并返回对应的视图
(5)如果配置文件里面没有定义对应的异常解析器,而当前Controller中也没有定义的话,那么该异常就会被抛出来。