SpringMVC之异常处理

Spring MVC 通过 HandlerExceptionResolver 处理程序的异常,包括 Handler 映射、数据绑定以及目标方法执行时发生的异常。

SpringMVC 提供的 HandlerExceptionResolver 的实现类 ?

  • 异常处理DefaultHandlerExceptionResolver对一些特殊的异常进行处理,比如:

    • NoSuchRequestHandlingMethodException、
    • HttpRequestMethodNotSupportedException、
    • HttpMediaTypeNotSupportedException、
    • HttpMediaTypeNotAcceptableException等。
  • 异常处理SimpleMappingExceptionResolver

    • 如果希望对所有异常进行统一处理,可以使用 SimpleMappingExceptionResolver,它将异常类名映射为视图名,即发生异常时使用对应的视图报告异常

SpringMVC提供了很多异常处理器,我们需要在springMVC.xml中配置。当出现空指针异常的时候,跳转到error.jsp页面。

1
2
3
4
5
6
7
8
9
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.NullPointerException">error</prop>
</props>
</property>
<!--名字可以改-->
<property name="exceptionAttribute" value="ex"></property>
</bean>

error.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
进来了有问题!可能是空指针
<%
Exception exception = (Exception) request.getAttribute( "ex" );
exception.printStackTrace();
System.out.println(exception);

%>
${ex}
</body>
</html>

测试

1
2
3
4
5
6
7
8
9
10
11
@Controller
public class SpringMVCHandler {
@RequestMapping("/testException")
public String testException(){
String str = null;
char c = str.charAt( 1 );
System.out.println( "执行了testException方法" );
return "success";

}
}