-
2018-08-23 16:20:22
1 描述
在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大。
那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护?答案是肯定的。下面将介绍使用Spring MVC统一处理异常的解决和实现过程。
2 分析
Spring MVC处理异常有3种方式:
(1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver;
(2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器;
(3)使用@ExceptionHandler注解实现异常处理;
3 实战
3.1 引言
为了验证Spring MVC的3种异常处理方式的实际效果,我们需要开发一个测试项目,从Dao层、Service层、Controller层分别抛出不同的异常,然后分别集成3种方式进行异常处理,从而比较3种方式的优缺点。
3.2 实战项目
3.2.1 项目结构
更多相关内容 -
异常的几种处理方式
2021-08-22 11:52:14异常的声明 如果在某个方法中出现了编译时异常可以在当前方法上声明这个异常的...java虚拟机默认处理异常(默认处理方式) step1-->如果在代码中某个方法内出现了错误情况,系统就会把这个错误发生的原因,发目录
异常的声明
如果在某个方法中出现了编译时异常可以在当前方法上声明这个异常的类型,声明之后编译时异常就会消失
-
注意
-
异常的声明不能从根本上解决问题
-
声明一个编译时异常类型之后,系统不会在编译期间检查这段代码,但是在运行阶段,如果传入的数据不正确,也有可能出现错误情况
-
异常的声明只能处理编译时异常
-
异常的处理
java虚拟机默认处理异常(默认处理方式)
-
step1-->如果在代码中某个方法内出现了错误情况,系统就会把这个错误发生的原因,发生异常的类型,发生的路径封装到异常对象中
-
step2-->如果当前方法中没有处理这个异常对象,就将异常往上抛,抛给调用该方法的方法
-
step3-->如果调用方法也没有处理异常,那么久一层层往上抛出,直到抛给main方法再抛给虚拟机
-
step4-->虚拟机将当前异常对象通过标准错误流,打印到控制台,并结束自己
手动处理异常的方式
-
try...catch
try{ 可能出现错误的代码 }catch(异常类型 异常对象名){ 处理异常的方式 }
-
step1-->先执行try中的代码,检测是否出现异常
-
step2-->如果try中的代码没有出现问题,try...catch直接结束,代码正常执行try...catch后面的代码
-
step3-->如果try中出现了异常,程序立即跳转到catch中查看出现异常所属类型和catch中声明的类型是否一样,如果一样,就捕获该异常按照指定的方式去处理异常,处理之后try...catch结束,程序继续运行
-
step4-->如果try中出现了catch中没有声明的异常类型,就不能捕获该异常,此时虚拟机来处理这个异常(默认处理方式)
-
注意事项
-
如果在某行代码中,出现了异常,立即去catch块中匹配异常类型,出现错误的代码后面的代码就不能执行了
-
-
-
try...catch...catch...
try{ 可能出现错误的代码 }catch(异常类型1 对象名1){ 异常1的处理方式 }catch(异常类型2 对象名2){ 异常2的处理方式 }...
-
step1-->先执行try中的代码,检测是否出现异常
-
step2-->如果出现了异常,就先和异常类型1匹配,如果能匹配上就执行异常1的处理方式,处理之后,直接结束整个try...catch语句,执行之外的代码
-
step3-->如果不能和异常类型1匹配,就继续和异常类型2匹配,如果能匹配上,就执行异常类型2的处理方式,之后结束整个try...catch语句,执行之外的代码
-
step4-->如果异常类型2不能匹配,依次类推,往后匹配
-
step5-->如果出现的异常,catch中的类型都不能匹配,虚拟机默认处理
-
注意事项
-
如果给定了多个catch语句去匹配多个异常类型,异常类型中存在子父类的关系,腹肌的异常类型不能1定义在子级异常类型前面
-
原因
-
如果父类异常定义在前面,后面定义的子类或者简介子类异常没有执行的机会,可以将父类异常类型定义在后面,如果前面的类型无法匹配,可以使用父类异常匹配
-
-
-
如果多个异常类型想要执行一种处理方式,可以使用 | 符号去定义类型(jdk1.7),可以使用多个 | 来定义多个异常类型,只要出现一种,都可以去捕获处理
-
-
-
try...catch...finally
try{ 可能会发生错误的代码 }catch(异常类型 异常对象名){ 异常的处理方式 }finally{ 一定要执行的代码 }
-
step1-->先执行try中的代码,检测是否出现异常
-
step2-->如果出现异常就先和异常类型匹配,如果能匹配上就执行异常的处理方式,处理之后结束整个try...catch语句,执行之外的代码
-
step3-->如果不能和异常类型,不结束整个try...catch,强制执行finally代码块中的代码,然后再结束
-
使用原因
-
有些代码一定要执行,将代码放在try中或者catch中或者terycatch外都有可能执行不到
-
将这段代码放在finally块中,不管遇到什么情况,系统都会去执行finally中的代码
-
-
-
try...finally
-
step1-->执行第一段代码
-
step-->执行第二段代码
-
作用
-
如果在程序中,有多段代码,多段代码都需要有执行的机会,name可以将这多段代码,分别放在try中和finally中,这样,多段代码之间就会互不影响,都有执行的机会,finally用来分隔代码,让代码之间互不影响,都有执行的机会
-
-
异常的捕获
-
如果代码的某个位置出现了错误情况,可以使用特定的格式,捕获这个错误,捕获之后可以按照自己定义的方式去处理异常
-
注意
-
异常的捕获即可以处理编译时异常,也可以处理运行时异常
-
可以从根本上解决问题
-
-
-
异常处理(常见的三种异常处理方式)
2020-02-07 16:17:25# 异常 不可预见的 # 当程序遇到问题时,不让程序结束,而让程序越过错误,继续向下执行 # eg:print(3/0) """ except 英 [ɪkˈsept] 美 [ɪkˈsept] prep. (用于所言不包括的人或事物前)除…之外 conj. 除了;...基础知识
# bug 错别字 逻辑错误 # 异常 不可预见的 # 当程序遇到问题时,不让程序结束,而让程序越过错误,继续向下执行 # eg:print(3/0) """ except 英 [ɪkˈsept] 美 [ɪkˈsept] prep. (用于所言不包括的人或事物前)除…之外 conj. 除了;只是 v. 不包括;不计;把…除外 try ...excepet ...else 格式: try: 语句1 except 错误码 as e: 语句2 except 错误码 as e: 语句3 except 错误码 as e: 语句n else: 语句e 注意:else语句可以省略 作用:用来检测try语句块中的错误,从而让except语句来捕获错误信息并处理 逻辑:当程序执行到try-except-else语句时 1.当try模块执行出现错误,匹配第一个错误码,匹配成功执行对应except语句 2.若出现错误,没有匹配的错误码,执行else(嵌套情况比较少) """
第1种:
# 有错误类型 try: print(a) print(3 / 0) except ZeroDivisionError as e: print('除数为0!!!') except NameError as e: print('没有该变量') else: print('代码正确无误')
第2种:
# 有错误就越过! try: # print(x) print(3 / 0) except: print('程序出错啦!!!')
第3种:
try: print(y) print(3/0) except (NameError, ZeroDivisionError): print('出现了NameError,ZeroDivisionError错误')
-
下列哪种异常是检查型异常,需要在编写程序时声明?
2019-04-08 22:53:25下列哪种异常是检查型异常,需要在编写程序时声明? ANullPointerException BClassCastException CFileNotFoundException DIndexOutOfBoundsException 正确答案:C 1. 粉红色的是受检查的异常(checked ...下列哪种异常是检查型异常,需要在编写程序时声明? ANullPointerException BClassCastException CFileNotFoundException DIndexOutOfBoundsException 正确答案:C
1. 粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被捕捉处理,命名为 Checked Exception 是因为Java编译器要进行检查,Java虚拟机也要进行检查,以确保这个规则得到遵守.
2. 绿色的异常是运行时异常(runtime exceptions),需要程序员自己分析代码决定是否捕获和处理,比如 空指针,被0除...
3. 而声明为Error的,则属于严重错误,如系统崩溃、虚拟机错误、动态链接失败等,这些错误无法恢复或者不可能捕捉,将导致应用程序中断,Error不需要捕捉。
-
Java两种处理异常方法的区别
2017-11-26 18:02:32在介绍异常处理之前我们先了解一下异常 我的博客什么是异常简单来说,java程序在运行期间发生的问题就是异常。在Java中,把异常信息封装成了一个类,当出现了问题时,就会创建异常类对象并抛出异常相关信息(如异常... -
Python异常及处理方法总结
2021-08-31 10:02:48Python异常及处理方法总结一、错误与异常1.什么是错误2.什么是异常3.回溯信息二、常见异常常见异常类三.异常处理1.异常处理2.简单的异常处理格式3.执行顺序4.except分支可以有多个5.执行顺序6.else子句:没有发生... -
Python的3种常见异常处理结构
2020-10-08 19:42:42Python中提供了很多不同形式的异常处理结构,其基本利用思路都是:先尝试执行代码,再进行处理可能发生的错误。 1.try…except…结构 在Python异常处理结构中try…except…结构使用最为频繁,其中try子句中代码块为... -
如何处理java异常
2018-07-03 16:07:43我们目前绝大多数采用MVC模式,但是往往有人把service跟controller紧紧的耦合在一起,甚至直接使用Threadlocal来隐式传值,并且复杂的逻辑几乎只能使用service中存储的全局对象来传递处理结果,包括异常。... -
JAVA中异常的几种处理方式
2019-01-16 22:48:00首先处理异常主要有两种方式:一种try catch,一种是throws。 1. try catch: try{} 中放入可能发生异常的代码。catch{}中放入对捕获到异常之后的处理。其中catch中e.printStackTrace()作用就是,在控制台打印程序... -
python异常处理(一)
2020-12-02 13:41:41Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员。所有异常都从基类Exception继承,而且都在exceptions模块中定义。Python... -
Java异常处理最佳实践
2019-06-30 18:38:55不仅仅初学者很难理解,即使一些有经验的开发者也需要花费很多时间来思考如何处理异常,包括需要处理哪些异常,怎样处理等等。这也是绝大多数开发团队都会制定一些规则来规范进行异常处理的原因。而团队之间的这些... -
Springboot异常处理的五种方式——SpringBoot学习
2019-04-12 17:21:02SpringBoot 框架异常处理有五种处理方式,从范围来说包括有全局异常捕获处理方式和局部异常捕获处理方式,接下来通过使用下面的后端代码一一对这五种捕获方式讲解。 package com.controller; import org.slf4j.... -
编程思想 之「异常及错误处理」
2018-03-10 12:27:15在 Java 的异常及错误处理机制中,用Throwable这个类来表示可以作为异常被抛出的类。Throwable对象可以细分为两种类型(指从Throwable继承而得到的类型),分别为: Error ,表示编译时和系统错误; Exception,表... -
Spring Boot之全局异常处理:404异常为何捕获不到?
2020-05-10 20:54:452、为什么我的404异常捕获不到? 3、常见的http请求异常,能统一封装成json返回吗? 实战说明 项目依赖包: <dependency> <groupId>org.springframework.boot</groupId> <artifactId> -
异常数据处理
2019-07-06 09:49:44常用处理方法: ...4.不处理 需要强调的是,如何判定和处理异常值,需要结合实际。 # 异常数据处理(异常数据过滤) new_df = df.replace('?', np.nan)#替换非法字符为np.nan datas = new_df.dropna(... -
数据处理之异常值处理
2021-03-17 19:52:39异常值是指那些在数据集中存在的不合理的值,需要注意的是,不合理的值是偏离正常范围的值,不是错误值。比如人的身高为-1m,人的体重为1吨等,都属于异常值的范围。虽然异常值不常出现,但是又会对实际项目分析有... -
数据分析--异常值处理
2020-10-04 18:19:35模型通常是对整体样本数据结构的一种表达方式,这种表达方式通常抓住的是整体样本一般性的性质,而那些在这些性质上表现完全与整体样本不一致的点,我们就称其为异常点 异常点在某些场景下极为重要,如疾病预测,... -
java异常处理(较详细)
2020-02-21 17:30:34java异常处理(较详细) 在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的。 比如: 客户输入数据的格式, 读取文件... -
Java异常问题三种处理方式
2019-04-29 14:56:291.抛出异常有两种方式 第一种是在方法上throw ...第一类,特殊异常,即自己业务上的特殊异常,需要特别处理的,直接在catch中将该异常处理吃掉。比如有个业务需要访问一个鉴权的接口,当第一次鉴权不成功时,捕... -
python中的五种异常处理机制
2018-07-11 13:41:14这篇文章主要介绍了python中的五种异常处理机制介绍,本文是Learn Python一书的读书笔记,需要的朋友可以参考下从几年前开始学习编程直到现在,一直对程序中的异常处理怀有恐惧和排斥心理。之所以这样,是因为不了解。... -
JAVA中的异常处理机制及异常分类
2017-04-01 16:18:27JAVA的异常处理机制:如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时,这个方法会立刻退出同时不返回任何值。另外,调用这个方法的其他... -
Python数据分析基础: 异常值检测和处理
2020-10-31 22:05:31异常检测和处理是一个比较小的分支,或者说,是机器学习的一个副产物,因为在一般的预测问题中,模型通常是对整体样本数据结构的一种表达方式,这种表达方式通常抓住的是整体样本一般性的性质,而那些在这些性质上... -
永不停歇的引擎-异常处理
2020-09-05 18:34:05所以,对于页面线程异常,我们的策略是忽略 补充 不仅仅是针对上面的几种情况,可能会有其他逻辑的执行(比如:系统自发的逻辑、广播、延迟任务),我们需要对异常进行兜底处理: 1、判断异常是发生在用户代码层面、... -
Python异常处理(基础详解)
2020-04-06 13:52:05本文是python异常的基础知识,欢迎阅读,一起进步 Python专栏请参考:人生苦短-我学python 文章目录一....当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。 print ('-----t... -
C#异常处理总结
2017-10-12 23:27:33关于异常,从我们一开始写代码的时候就开始伴随着我们,只不过那时还没入门,脑子里并没有产生意识这就是异常。 异常:程序运行期间发生错误, 异常对象: 将程序发生的各种错误封装成对象 -
【嵌入式开发】ARM 异常向量表 ( 异常概念 | 异常处理流程 | 异常向量 | 汇编代码 )
2018-05-05 09:36:482. 异常处理 (1) 异常处理 二. 异常向量表代码编写 1. 初始化异常向量表模块代码 2. 链接器脚本 3. Makefile 编译脚本 4. 编译输出可执行文件 本博客的参考文章及相关资料下载 : 1.ARM 架构参考手册... -
Springboot项目全局异常统一处理
2018-06-01 16:51:13最近在做项目时需要对异常进行全局统一处理,主要是一些分类入库以及记录日志等,因为项目是基于Springboot的,所以去网络上找了一些博客文档,然后再结合项目本身的一些特殊需求做了些许改造,现在记录下来便于以后... -
java中异常的捕获及处理
2019-03-16 15:28:13程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。异常发生时,是任程序自生自灭,立刻退出终止。在Java中即,Java在编译或运行或者运行过程中出现的错误。 Java提供了更加... -
品质异常该怎么处理?照这个流程走!
2021-02-27 16:37:01原标题:品质异常该怎么处理?照这个流程走!摘要:品质人员的工作职责之一就是要及时发现反馈生产中的品质异常状况,并督促现场执行改善措施、追踪其改善效果,保证只有合格的产品才能转入下一道工序,生产出高质量... -
异常的捕获与处理
2021-05-03 13:06:11异常的捕获与处理 1、认识异常 ...异常是指在程序执行时由于程序处理逻辑上的错误导致程序中断的一种指令流。 范例:初始异常 package edu.blog.test19.exception01; public class ExceptionDemo01 { publi