Spring MVC对异常的处理提供了两种常用的处理方式
一种是自定方义:建创一个类,在对应的方法面加入@ExceptionHandler标签,其成为异常理里类,需注意的是,如果只是在一个Controller中,那么只对当前的这个类中的controller起作用,如需作为一个公共的异常处理类,则需单独写在一个类里面,并注上@ControllerAdvice标签,同时相同的异常只能用一种方法处理,否则会报错
后台:
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
/*使用@ControllerAdvice标签后,所有的Controller抛出的异常都会被处理*/
@ControllerAdvice
public class ErrorException {
/**
* 此利方法不能将ex做为值传入视图中
* @param ex
* @return
*/
/* @ExceptionHandler标签注解方式,后面参数是异常对像的类 */
//@ExceptionHandler({ArithmeticException.class})
public String HandlerArithmeticException1(Exception ex) {
System.out.println(ex.getMessage());
/* error为jsp视图名 */
return "error";
}
/**
* 此方法可以将ex传入视图中,视图中可以用${ex}标签来接收
* @param ex
* @return
*/
/* @ExceptionHandler标签注解方式,后面参数是异常对像的类 */
//@ExceptionHandler({ArithmeticException.class})
public ModelAndView HandlerArithmeticException2(Exception ex) {
ModelAndView mv=new ModelAndView();
/* error为jsp视图名 */
mv.setViewName("error");
mv.addObject("exception", ex.getMessage());
return mv;
}
}
前台:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>页面异常 error</title>
</head>
<body>
<h2>页面异常 error</h2>
错误信息${exception}
</body>
</html>
第二种方法:是使用Spring MVC进行配置,将SimpleMappingExceptionResolver类注入到容器中
Springmvc.xml
<!-- 异常处理配置 -->
<bean
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- exceptionAttribute不写时则默义为exception,此值在jsp视图${exception}调用时使用 -->
<property name="exceptionAttribute" value="exception"></property>
<property name="exceptionMappings">
<props>
<!-- java.lang.ArithmeticException为抛出的异常类,error为对应的视图名 -->
<prop key="java.lang.ArithmeticException">error</prop>
</props>
</property>
</bean>