Spring MVC异常捕获
处理异常
处理局部异常:
也就是单个Controller类中抛出的异常
处理全局异常:
处理所有Controller类抛出的异常
局部异常
模拟一个异常,当发生异常后跳转到指定页面
控制器
@RequestMapping("/one") public String one(){ //模拟一个异常 if(1==1){ int sum=5/0; return "myform"; } return "index"; }
跳转的指定页面
<html>
<head>
<title>异常</title>
</head>
<body>
出现了异常
</body>
</html>
手动创建异常
手动创建异常,并且指定异常跳转指定页面
创建两个异常类
public class nameError extends Exception{ public nameError() { } public nameError(String message) { super(message); } } public class ageError extends Exception{ public ageError() { } public ageError(String message) { super(message); } }
表单
<html> <head> <title>Title</title> </head> <body> <form action="/threeController/one1" method="post"> 账号:<input type="text" name="uname"><br> 密码:<input type="password" name="upwd"><br> <input type="submit" value="提交"> </form> </body> </html>
控制器
@RequestMapping("/one1") public String one1(String uname,Integer upwd) throws nameError, ageError { if (!uname.equals("admin")){ throw new nameError("name不正确!"); } if (upwd>80){ throw new ageError("age不正确!"); } return "myform"; }
大配置文件
<!--系统异常处理器--> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="defaultErrorView" value="error"/> <property name="exceptionAttribute" value="ex"/> <!--定制异常--> <property name="exceptionMappings"> <props> <prop key="error.nameError">nameError</prop> <prop key="error.ageError">ageError</prop> </props> </property> </bean>
创建异常类(捕获所有异常)
异常类
/** * 要让这个类处理所有异常 */ @ControllerAdvice public class oneController { @ExceptionHandler public ModelAndView oneController(Exception ex) throws nameError, ageError { ModelAndView mv=new ModelAndView(); mv.setViewName("myform"); mv.addObject("ex",ex); if (ex instanceof nameError){ throw new nameError("name不正确!"); } if (ex instanceof ageError){ throw new ageError("age不正确!"); } return mv; } }
注意:(在这里大配置文件中的系统异常处理器就没有用了)