一:说明

1.介绍

  Springmvc提供HandlerExceptionResolver处理异常,包括Handler映射,数据绑定,以及目标方法执行。

2.几个接口的实现类

  AnnotationMethodHandlerExceptionResolver

  DefaultHandlerExceptionResolver

  ResponseStatusExceptionResolver

  SimpleMappingExceptonResolver

  ExceptionHandlerExceptionResolver

  当开发的时候,如果配置了<mvc:annotation-driven>时,就默认配置了一下的实现类:

  ExceptionHandlerExceptionResolver,ResponseStatusExceptionResolver,DefaultHandlerExceptionResolver

二:ExceptionHandlerExceptionResolver

1.介绍

  

2.程序

  可以做到,出现异常,使用springmvc的注解进行处理异常。

  1. package com.spring.it.exception;
  2.  
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.ExceptionHandler;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RequestParam;
  7.  
  8. @Controller
  9. public class ExceptionHandlerDemo {
  10. /**
  11. *异常处理类
  12. */
  13. @RequestMapping("/testExceptionHandlerExceptionResolver")
  14. public String testExceptionHandlerExceptionResolver(@RequestParam("i") int i) {
  15. System.out.println("result="+(10/i));
  16. return "success";
  17. }
  18.  
  19. /**
  20. * 异常的处理
  21. */
  22. @ExceptionHandler({ArithmeticException.class})
  23. public String handlerArithmeticException(Exception ex) {
  24. System.out.println("come a exception:"+ex);
  25. return "error";
  26. }
  27.  
  28. }

3.error.jsp

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <h3>Error page</h3>
  11. </body>
  12. </html>

4.效果

  

5.页面显示异常的方式

  @ExceptionHandler方法的入参中不能传入Map,若是希望将异常的信息导入到页面,需要使用ModelAndView方法作为返回值。

  1. package com.spring.it.exception;
  2.  
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.ExceptionHandler;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RequestParam;
  7. import org.springframework.web.servlet.ModelAndView;
  8.  
  9. @Controller
  10. public class ExceptionHandlerDemo {
  11. /**
  12. *异常处理类
  13. */
  14. @RequestMapping("/testExceptionHandlerExceptionResolver")
  15. public String testExceptionHandlerExceptionResolver(@RequestParam("i") int i) {
  16. System.out.println("result="+(10/i));
  17. return "success";
  18. }
  19.  
  20. /**
  21. * 异常的处理
  22. */
  23. @ExceptionHandler({ArithmeticException.class})
  24. public ModelAndView handlerArithmeticException(Exception ex) {
  25. System.out.println("come a exception:"+ex);
  26. ModelAndView mv=new ModelAndView("error");
  27. mv.addObject("exception", ex);
  28. return mv;
  29. }
  30.  
  31. }

6.error。jsp

  获取异常信息

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <h3>Error page</h3>
  11. ${exception }
  12. </body>
  13. </html>

7.效果

  

8.优先级

  如果出现多个异常的处理方法,走哪一个方法呢?

  是找与异常匹配度更高的处理异常方法。

9.@ControllerAdvice

  如果在当前的@ExceptionHandler处理当前方法出现的异常,则去由@ControllerAdvice标记的类中查找@ExceptionHandler标记的方法

结构:

  

ExceptionHandlerDemo:

  1. package com.spring.it.exception;
  2.  
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.ExceptionHandler;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RequestParam;
  7. import org.springframework.web.servlet.ModelAndView;
  8.  
  9. @Controller
  10. public class ExceptionHandlerDemo {
  11. /**
  12. *异常处理类
  13. */
  14. @RequestMapping("/testExceptionHandlerExceptionResolver")
  15. public String testExceptionHandlerExceptionResolver(@RequestParam("i") int i) {
  16. System.out.println("result="+(10/i));
  17. return "success";
  18. }
  19.  
  20. }

HandlerException:

  1. package com.spring.it.exception;
  2.  
  3. import org.springframework.web.bind.annotation.ControllerAdvice;
  4. import org.springframework.web.bind.annotation.ExceptionHandler;
  5. import org.springframework.web.servlet.ModelAndView;
  6.  
  7. @ControllerAdvice
  8. public class HandlerException {
  9. /**
  10. * 异常的处理
  11. */
  12. @ExceptionHandler({ArithmeticException.class})
  13. public ModelAndView handlerArithmeticException(Exception ex) {
  14. System.out.println("come a exception:"+ex);
  15. ModelAndView mv=new ModelAndView("error");
  16. mv.addObject("exception", ex);
  17. return mv;
  18. }
  19.  
  20. }

三:ResponseStatusExceptionResolvler

1.介绍

  

2.@ResponseStatus注解的类

  1. package com.spring.it.exception;
  2.  
  3. import org.springframework.http.HttpStatus;
  4. import org.springframework.web.bind.annotation.ResponseStatus;
  5.  
  6. @ResponseStatus(value=HttpStatus.FORBIDDEN,reason="用户名与密码不匹配")
  7. public class UserNameNotMatchPasswordException extends RuntimeException{
  8. private static final long serialVersionUID=1L;
  9. }

3.处理异常类

  1. package com.spring.it.exception;
  2.  
  3. import org.apache.tomcat.util.buf.UEncoder;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.web.bind.annotation.ExceptionHandler;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RequestParam;
  8. import org.springframework.web.servlet.ModelAndView;
  9.  
  10. @Controller
  11. public class ExceptionHandlerDemo {
  12. /**
  13. *异常处理类,test ExceptionHandlerExceptionResolver
  14. */
  15. @RequestMapping("/testExceptionHandlerExceptionResolver")
  16. public String testExceptionHandlerExceptionResolver(@RequestParam("i") int i) {
  17. System.out.println("result="+(10/i));
  18. return "success";
  19. }
  20.  
  21. /**
  22. *异常处理类,test ExceptionHandlerExceptionResolver
  23. */
  24. @RequestMapping("/testResponseStatusExceptionResolver")
  25. public String testResponseStatusExceptionResolver(@RequestParam("i") int i) {
  26. if(i==12) {
  27. throw new UserNameNotMatchPasswordException();
  28. }else {
  29. System.out.println("conmmon execute");
  30. }
  31. return "success";
  32. }
  33.  
  34. }

4.效果

  

四:DefaultHandlerExceptionResolver

1.介绍

  

五:SimpleMappingExceptionResolver

1.介绍

  

2.处理类

  1. package com.spring.it.exception;
  2.  
  3. import org.apache.tomcat.util.buf.UEncoder;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.web.bind.annotation.ExceptionHandler;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RequestParam;
  8. import org.springframework.web.servlet.ModelAndView;
  9.  
  10. @Controller
  11. public class ExceptionHandlerDemo {
  12. /**
  13. *异常处理类,test ExceptionHandlerExceptionResolver
  14. */
  15. @RequestMapping("/testExceptionHandlerExceptionResolver")
  16. public String testExceptionHandlerExceptionResolver(@RequestParam("i") int i) {
  17. System.out.println("result="+(10/i));
  18. return "success";
  19. }
  20.  
  21. /**
  22. *异常处理类,test ExceptionHandlerExceptionResolver
  23. */
  24. @RequestMapping("/testResponseStatusExceptionResolver")
  25. public String testResponseStatusExceptionResolver(@RequestParam("i") int i) {
  26. if(i==12) {
  27. throw new UserNameNotMatchPasswordException();
  28. }else {
  29. System.out.println("conmmon execute");
  30. }
  31. return "success";
  32. }
  33.  
  34. /**
  35. *异常处理类,test ExceptionHandlerExceptionResolver
  36. */
  37. @RequestMapping("/testSimpleMappingExceptionResolver")
  38. public String testSimpleMappingExceptionResolver(@RequestParam("i") int i) {
  39. String[] array=new String[10];
  40. String num=array[i];
  41. System.out.println("num:"+num);
  42. return "success";
  43. }
  44.  
  45. }

2.效果

  

3.解决方式

  这个异常可以有SimpleMappingExceptionResolver来处理。

  在xml中注册。

  出现什么异常转到哪一个页面。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context-4.0.xsd
  10. http://www.springframework.org/schema/mvc
  11. http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
  12. <!-- 配置自定义扫描的包 -->
  13. <context:component-scan base-package="com.spring.it" ></context:component-scan>
  14.  
  15. <!-- 配置视图解析器 -->
  16. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  17. <property name="prefix" value="/WEB-INF/views/" />
  18. <property name="suffix" value=".jsp" />
  19. </bean>
  20.  
  21. <mvc:annotation-driven></mvc:annotation-driven>
  22.  
  23. <!-- 转换器 -->
  24. <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
  25. <property name="converters">
  26. <set>
  27. <ref bean="employeeConverter"/>
  28. </set>
  29. </property>
  30. </bean>
  31. <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
  32.  
  33. <mvc:default-servlet-handler/>
  34. <mvc:annotation-driven ignore-default-model-on-redirect="true"></mvc:annotation-driven>
  35.  
  36. <!-- 国家化 -->
  37. <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
  38. <property name="basename" value="i18n"></property>
  39. </bean>
  40.  
  41. <!-- <mvc:view-controller path="/i18n" view-name="i18n"/> -->
  42. <mvc:view-controller path="/i18n2" view-name="i18n2"/>
  43.  
  44. <!-- 配置SessionLocaleResolver -->
  45. <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
  46.  
  47. <mvc:interceptors>
  48. <!-- 配置自定义拦截器 -->
  49. <bean class="com.spring.it.interceptors.FirstInterceptor"></bean>
  50. <!-- 配置拦截器的作用路径 -->
  51. <mvc:interceptor>
  52. <mvc:mapping path="/emps"/>
  53. <bean class="com.spring.it.interceptors.SecondInterceptor"></bean>
  54. </mvc:interceptor>
  55.  
  56. <!-- 配置LocaleChangeInterceter拦截器 -->
  57. <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>
  58. </mvc:interceptors>
  59.  
  60. <!-- 配置CommonsMultipartResolver -->
  61. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  62. <property name="defaultEncoding" value="UTF-8"></property>
  63. <property name="maxUploadSize" value="102400"></property>
  64. </bean>
  65.  
  66. <!-- 配置SimpleMappingExceptionResolver来映射异常 -->
  67. <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
  68. <property name="exceptionMappings">
  69. <props>
  70. <prop key="java.lang.ArrayIndexOutOfBoundsException">error</prop>
  71. </props>
  72. </property>
  73. </bean>
  74. </beans>

4.效果

  

  在页面上可以看到异常的情况。

 

024 SpringMvc的异常处理的更多相关文章

  1. SpringMVC 全局异常处理

    在 JavaEE 项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合度 ...

  2. springmvc 中异常处理

    springmvc 中异常处理常见三种处理方式: 1:SimpleMappingExceptionResolver处理的是处理器方法里面出现的异常 2 3.自定义异常处理器:处理的是处理器方法里面出现 ...

  3. springMvc全局异常处理

    本文中只测试了:实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器 对已有代码没有入侵性等优点,同时,在异常处理时能获取导致出现异常的对象,有利于提 ...

  4. 012医疗项目-模块一:统一异常处理器的设计思路及其实现(涉及到了Springmvc的异常处理流程)

    我们上一篇文章是建立了一个自定义的异常类,来代替了原始的Exception类.在Serice层抛出异常,然后要在Action层捕获这个异常,这样的话在每个Action中都要有try{}catch{}代 ...

  5. springMVC对异常处理的支持

    无论做什么项目,进行异常处理都是非常有必要的,而且你不能把一些只有程序员才能看懂的错误代码抛给用户去看,所以这时候进行统一的异常处理,展现一个比较友好的错误页面就显得很有必要了.跟其他MVC框架一样, ...

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

    无论做什么项目,进行异常处理都是非常有必要的,而且你不能把一些只有程序员才能看懂的错误代码抛给用户去看,所以这时候进行统一的异常处理,展现一个比较友好的错误页面就显得很有必要了.跟其他MVC框架一样, ...

  7. 【Spring】SpringMVC之异常处理

    java中的异常分为两类,一种是运行时异常,一种是非运行时异常.在JavaSE中,运行时异常都是通过try{}catch{}捕获的,这种只能捕获显示的异常,通常项目上抛出的异常都是不可预见.那么我们能 ...

  8. Java springmvc 统一异常处理的方案

    前言:为什么要统一异常处理?经常在项目中需要统一处理异常,将异常封装转给前端.也有时需要在项目中统一处理异常后,记录异常日志,做一下统一处理. Springmvc 异常统一处理的方式有三种. 一.使用 ...

  9. 一起学SpringMVC之异常处理

    在系统开发过程中,异常处理是不可避免,如果异常处理不好,会给用户造成很差的体验,本文主要讲解在SpringMVC开发过程中,异常处理的相关知识点,仅供学习分享使用,如有不足之处,还请指正. 概述 在S ...

随机推荐

  1. luogu P1081 开车旅行

    传送门 这题的暴力做法显然是照题意模拟,从每个点出发暴力跳.而这个暴跳显然是可以倍增优化的,就是预处理出从每个点,(一开始是A)往后跳\(2^k\)步,能到哪里,以及\(A\)和\(B\)的路程,然后 ...

  2. CF875D High Cry

    传送门 题目要求合法的区间个数,这里考虑用总区间个数减去不合法的个数 假设某个数为区间最大值,那么包含这个数的最长区间内,所有数小于他并且所有数没有这个最大值没有的二进制位,可以按位考虑每个数\(i\ ...

  3. Java基础中的一些概念理解

    同步 和 异步区别 同步和异步通常用来形容一次方法的调用. 同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为.而异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用 ...

  4. Delpher 必记-delphi环境安装

    //Delpher 必记 环境: 安装包: 1.所有第三方控件包放在没有中文名的路径:如F:\DComp 安装包放在对应的版本的文件夹里面(实际中没有分类),然后看安装包的引用路径和输出路径,都要设定 ...

  5. Picasso的使用

    相信做Android开发的对Square公司一定不会陌生,大名鼎鼎的网络请求框架Retrofit就来源于它,今天学习的是该公司出品的图片加载框架Picasso. 项目地址 https://github ...

  6. 解决ipad连接不上电脑的问题

    检查一下信息: 1.iTunes是否安装 2.数据线是否完好 3.检查下图中的两个设备是否开启 4.最后一步是最恶心的:是否关闭了防火墙!!!! 操作步骤如下图示 我就是因为打开了防火墙,所以一直连接 ...

  7. 【比赛游记】FJOI2019瞎打记

    \(\mathrm{day}\) \(-4\) 又是睡到中午才起来,这样下去省选会睡迟的. 然后下午在补 WF2019 的题目,很快就能补完的(大雾). \(\mathrm{day}\) \(-3\) ...

  8. 边沿检测方法-FPGA入门教程

    本节实验主要讲解FPGA开发中边沿检测方法,我们在设计中会经常用到.这个地方大家一定要理解. 1.1.1.原理介绍 学习HDL语言设计与其他语言不一样,HDL语言设计需要考虑更多的信号的电气特性,时序 ...

  9. win10-Anaconda2-Theano-cuda7.5-VS2013

    两天的辗转反侧,终于灵光一现找到了错误. 首先,我在win10下配置好了gpu和cudnn版本的caffe.但是因为win平台的限制,caffe用的不够舒服.因为之前用过一阵子theano,虽然很慢, ...

  10. Faster rcnn代码理解(2)

    接着上篇的博客,咱们继续看一下Faster RCNN的代码- 上次大致讲完了Faster rcnn在训练时是如何获取imdb和roidb文件的,主要都在train_rpn()的get_roidb()函 ...