一、系统异常处理器
在mvc配置文件中配置系统异常处理器,用来解决异常处理问题
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="error"/> //异常处理页面
<property name="exceptionAttribute" value="ex"/> //异常
</bean>
页面配置:
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>//允许使用el表达式
<html>
<head>
<title>错误页面</title>
</head>
<body>
发生错误:${ex.message}
</body>
</html>
模拟错误:
@RequestMapping("/firstRequest")
public String firstRequest(){
//模拟异常
int result=5/0;
return "index";
}
二、使用系统异常处理器实现处理自定义异常类
自定义异常类:
package com.springmvc.exception;
public class AgeException extends Exception{
public AgeException() {
}
public AgeException(String message) {
super(message);
}
}
package com.springmvc.exception;
public class NameException extends Exception{
public NameException() {
}
public NameException(String message) {
super(message);
}
}
MVC配置文件配置:
<!--系统异常处理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="error"/>
<property name="exceptionAttribute" value="ex"/>
<!--定制异常-->
<property name="exceptionMappings">
<props>
<prop key="com.springmvc.exception.NameException">nameError</prop>
<prop key="com.springmvc.exception.AgeException">ageError</prop><!--不同的页面-->
</props> </property> </bean>
页面配置:
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Age异常</title>
</head>
<body>
您提交的数据发生了:${ex.message}
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Name异常</title>
</head>
<body>
您提交的数据发生了:${ex.message}
</body>
</html>
模拟异常:
@RequestMapping("/secondRequest")
public String secondRequest(String userName,Integer userAge) throws NameException, AgeException {
if(!userName.equals("admin")){
//手动创建一个Name异常
throw new NameException("名称错误!!!!!!!!");
}
if(userAge<0||userAge>80){
//手动创建一个Age异常
throw new AgeException("年龄太大,不符合规定!!!!!!");
}
return "index";
}
三、自定义异常处理器
/**
* 自定义异常处理器
*/
public class MyHandlerException implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
ModelAndView modelAndView=new ModelAndView();
//如果发生异常,我们给他一个默认的异常处理页面
modelAndView.setViewName("error");
modelAndView.addObject("ex",ex);
//如果发生Name异常,则跳转到Name异常页面
if(ex instanceof NameException){
modelAndView.setViewName("nameError");
}
if(ex instanceof AgeException){
modelAndView.setViewName("ageError");
}
return modelAndView;
}
}
配置文件中配置:
<!--将自定义异常处理器注册到Spring容器当中-->
<bean class="com.springmvc.exception.MyHandlerException"/>
其余操作和之前一样
四、使用注解处理异常
4.1使用注解处理局部异常
/**
* 局部注解处理
*/
@ExceptionHandler
public ModelAndView exceptionHandler(Exception ex){
ModelAndView modelAndView=new ModelAndView();
//如果发生异常,我们给他一个默认的异常处理页面
modelAndView.setViewName("error");
modelAndView.addObject("ex",ex);
//如果发生Name异常,则跳转到Name异常页面
if(ex instanceof NameException){
modelAndView.setViewName("nameError");
}
if(ex instanceof AgeException){
modelAndView.setViewName("ageError");
}
return modelAndView;
}
4.2使用注解处理所有controller异常
/**
* 要让这个类处理所有Controller的异常
*/
@ControllerAdvice
public class MyControllerAdvice {
@ExceptionHandler
public ModelAndView exceptionHandler(Exception ex){
ModelAndView modelAndView=new ModelAndView();
//如果发生异常,我们给他一个默认的异常处理页面
modelAndView.setViewName("error");
modelAndView.addObject("ex",ex);
//如果发生Name异常,则跳转到Name异常页面
if(ex instanceof NameException){
modelAndView.setViewName("nameError");
}
if(ex instanceof AgeException){
modelAndView.setViewName("ageError");
}
return modelAndView;
}
}
原文:https://www.cnblogs.com/F017/p/11839558.html