SpringMvc的异常处理

首先在SpringMVC中加上<mvc:annotation-driven>标签:

<mvc:annotation-driven></mvc:annotation-driven>

新建一个error.jsp页面

1、基于注解的异常处理

(1)@ExceptionHandler注解

在当前Handler中定义由@ExceptionHandler注解修饰的方法,用于处理当前Handler中的异常信息!

在Handler中定义如下方法:

 1 @ExceptionHandler(value={ArithmeticException.class})
 2 public String handleException(){
 3     System.out.println("ExceptionHandler====ArithmeticException=======");
 4     return "error";
 5 }
 6 @ExceptionHandler(value={Exception.class})//value为对应的异常信息,异常的字节码文件,可定义多个
 7 public String handleException1(){
 8     System.out.println("ExceptionHandler====ArithmeticException=======");
 9     return "error";
10 }
11 @RequestMapping(value="/test",method=RequestMethod.GET)
12 public String testException(@RequestParam(value="i") Integer i){
13     int j= 10/i;
14     return "success";
15 }

成功则返回success.jsp,失败则返回error.jsp

注意:
@ExceptionHandler方法修饰的入参中可以加入Exception类型的参数,该参数即对应发生的异常信息
@ExceptionHandler方法的入参中不能传入Map,也不能使用model。若希望把异常信息传到页面上,需要使用ModelAndView作为方法的返回值。

1 @ExceptionHandler(value={ArithmeticException.class})
2 public ModelAndView handleException(Exception ex){
3     System.out.println("ExceptionHandler====ArithmeticException=======");
4     ModelAndView mv=new ModelAndView();
5     mv.addObject("ex", ex);
6     mv.setViewName("error");
7     return mv;
8 }

在error.jsp页面用${ex }获取返回值。java.lang.ArithmeticException: / by zero

优先级问题

①当有两个异常处理时,优先走精确的,例如上面定义了异常,

ArithmeticExceptionException

当发生ArithmeticException异常时,会优先走ArithmeticException的处理方法,输出

ExceptionHandler====ArithmeticException=======

②如果在上面定义的方法中,将ArithmeticException.class改为RuntimeException.class,也就是声明了 RuntimeException 和 Exception,此时在发生ArithmeticException时,

会根据异常的最近继承关系找到继承深度最浅的那个,也就是会走 RuntimeException 的异常处理方法。

注:(如果将ArithmeticException换成NullPointerException,此时在发生ArithmeticException时,会走Exception的处理方法,和继承深度有关系,没理解好)

(2)@ControllerAdvice注解

自定义Handler类,所有的Handler类出现的异常都会经过此类中的方法

 1 @ControllerAdvice
 2 public class MyException {
 3     @ExceptionHandler(value=Exception.class)
 4     public String HandleException(){
 5         System.out.println("ControllerAdvice====Exception=======");
 6         return "error";
 7     }
 8     @ExceptionHandler(value={ArithmeticException.class})
 9     public String handleException(){
10         System.out.println("ControllerAdvice====ArithmeticException=======");
11         return "error";
12     }
13 }

需要注意的问题和优先级问题与(1)中一样。

另外需要注意的是:当两种情况(1)(2)并存时,发生异常会优先走本类中的异常处理方法。

2、基于配置的异常处理

如果希望对所有异常进行统一处理,可以使用 SimpleMappingExceptionResolver,它将异常类名映射为视图名,即发生异常时使用对应的视图报告异常

在springmvc中配置

 1 <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
 2     <!-- 指定在在request域中获取异常信息所需要的key:即ex,默认是exception -->
 3     <property name="exceptionAttribute" value="ex"></property>
 4      <!-- 指定异常映射 -->
 5     <property name="exceptionMappings">
 6         <props>
 7             <!-- 由prop标签的key属性指定发生异常的全类名,由值指定出现异常去哪个页面! -->
 8             <prop key="java.lang.ArithmeticException">error</prop>
 9         </props>
10     </property>
11 </bean>

在error.jsp页面用${ex }可以获取到异常名。java.lang.ArithmeticException: / by zero

基于注解比基于配置优先级高。

时间: 2024-10-12 01:02:33

SpringMvc的异常处理的相关文章

springMVC之异常处理

1. 自定义一个异常类: UserException.java public class UserException extends RuntimeException { private static final long serialVersionUID = 1L; public UserException() { super(); } public UserException(String message, Throwable cause) { super(message, cause);

springmvc的异常处理&amp;对静态的资源的处理

1 springmvc的异常处理方式,暂时我知道的两种 2 1.在controller中捕获 3 /** 4 * 捕获到异常,用于局部处理 5 * @ExceptionHandler (value={要捕获的异常,可以有多个}) 6 * @param e 7 * @param req 8 * @return 9 */ 10 @ExceptionHandler(value={UserException.class}) 11 public String handlerException(UserEx

SpringMVC 全局异常处理

在 JavaEE 项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大.SpringMvc 对于异常处理这块提供了支持,通过 SpringMvc 提供的全局异常处理机制,能够将所有类型的异常处从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护. 全局异常实现方式 Spring MVC

【Spring】SpringMVC之异常处理

java中的异常分为两类,一种是运行时异常,一种是非运行时异常.在JavaSE中,运行时异常都是通过try{}catch{}捕获的,这种只能捕获显示的异常,通常项目上抛出的异常都是不可预见.那么我们能够有什么方法能够解决这种问题吗?当然有,SpringMVC中的异常处理机制就很好的做到了这一点. SpringMVC中的异常处理一共有3种方式 (1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver: (2)实现Spring的异常处理接口Han

SpringMVC对异常处理的支持

无论做什么项目,进行异常处理都是非常有必要的,而且你不能把一些只有程序员才能看懂的错误代码抛给用户去看,所以这时候进行统一的异常处理,展现一个比较友好的错误页面就显得很有必要了.跟其他MVC框架一样,springMVC也有自己的异常处理机制. springMVC提供的异常处理主要有两种方式,一种是直接实现自己的HandlerExceptionResolver,当然这也包括使用Spring已经为我们提供好的SimpleMappingExceptionResolver和DefaultHandlerE

【Spring】18、springMVC对异常处理的支持

无论做什么项目,进行异常处理都是非常有必要的,而且你不能把一些只有程序员才能看懂的错误代码抛给用户去看,所以这时候进行统一的异常处理,展现一个比较友好的错误页面就显得很有必要了.跟其他MVC框架一样,springMVC也有自己的异常处理机制.springMVC提供的异常处理主要有两种方式,一种是直接实现自己的HandlerExceptionResolver,当然这也包括使用Spring已经为我们提供好的SimpleMappingExceptionResolver和DefaultHandlerEx

一起学SpringMVC之异常处理

在系统开发过程中,异常处理是不可避免,如果异常处理不好,会给用户造成很差的体验,本文主要讲解在SpringMVC开发过程中,异常处理的相关知识点,仅供学习分享使用,如有不足之处,还请指正. 概述 在SpringMvc中,处理异常有好几种方法,本文主要讲解两种方案: 通过@ExceptionHandler来进行异常的捕获接收并处理. 通过@ResponseStatus注解来进行返回状态码内容的自定义处理. 通过@ExceptionHandler操作步骤 1. 自定义一个异常类,继承自Excepti

7.学习springmvc的异常处理

一.页面的异常处理流程 二.建立项目springmvc04_exception 1.编写index.jsp页面: 1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 <html> 3 <head> 4 <title>Title</title> 5 </head> 6 <body> 7 8 <

springMVC系统异常处理及自定异常处理

配置系统异常处理器 1.后台模拟一个异常 @RequestMapping(value = "/myexception.do", produces = "text/html;charset=utf-8") public String myexception() { int a=5/0; return "/error.jsp"; } 2.未配置系统异常时,前台访问报错500,配置系统异常处理器后成功进入错误页面 <bean class=&quo