在Spring MVC中处理异常的方式有二
1.处理局部异常,也就是单个Controller类中抛出的异常
2.处理全局异常,处理所有Controller类抛出的异常
1.局部异常
首先先创建index.jsp主页面
<html> <body> <h2>Hello World!</h2> </body> </html>
创建Controller
@Controller @RequestMapping("/first") public class FirstController { @RequestMapping("/firstRequest") public String firstRequest(){ //模拟异常 int result=5/0; return "index"; }
配置mvc.xml文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans"> <!--注解扫描--> <context:component-scan base-package="com.springmvc"/> <!--开启SpringMVC注解支持--> <mvc:annotation-driven/> <!--视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"/> <property name="suffix" value=".jsp"/> </bean> <!--放行静态资源--> <mvc:default-servlet-handler/> <!--系统异常处理器--> <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> <!--将自定义异常处理器注册到Spring容器当中--> <!--<bean class="com.springmvc.exception.MyHandlerException"/>--> <!--文件上传解析器--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!--编码--> <property name="defaultEncoding" value="UTF-8"/> <!--最大字节--> <property name="maxUploadSize" value="10000000000"/> <!--单文件大小--> <property name="maxUploadSizePerFile" value="50000000"/> </bean> </beans>
效果展示:
2.全局异常
@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; }
@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"; }