一、系统异常处理器
在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; } }