java全局机制,java实现全局异常机制

先上自己的代码,后整理下原理知识。

下面是自己实现的全局异常机制

1.继承Exception,自定义异常类

package com.zichen.xhkq.exception;

/**

*

*

Title: CustomException

*

Description: 系统自定义的异常类型,实际开发中可能要定义多种异常类型

* @authorCNZZ

* @version 1.0

*/

public class CustomException extends Exception {

/**

*

*/

private static final long serialVersionUID = 5819174480253773214L;

//异常信息

private String message;

public CustomException(String message){

super(message);

this.message = message;

}

public String getMessage() {

return message;

}

public void setMessage(String message) {

this.message = message;

}

}

2.实现HandlerExceptionResolver,自定义异常处理器,可以判断处理自定义异常和系统异常,可以跳转异常页面

package com.zichen.xhkq.exception;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerExceptionResolver;

import org.springframework.web.servlet.ModelAndView;

/**

*

*

Title: CustomExceptionResolver

*

Description: 自定义异常处理器

* @authorCNZZ

* @version 1.0

*/

public class CustomExceptionResolver implements HandlerExceptionResolver {

//前端控制器DispatcherServlet在进行HandlerMapping、调用HandlerAdapter执行Handler过程中,如果遇到异常就会执行此方法

//handler最终要执行的Handler,它的真实身份是HandlerMethod

//Exception ex就是接收到异常信息

@Override

public ModelAndView resolveException(HttpServletRequest request,

HttpServletResponse response, Object handler, Exception ex) {

//输出异常

ex.printStackTrace();

//统一异常处理代码

//针对系统自定义的CustomException异常,就可以直接从异常类中获取异常信息,将异常处理在错误页面展示

//异常信息

String message = null;

CustomException customException = null;

//如果ex是系统 自定义的异常,直接取出异常信息

if(ex instanceof CustomException){

customException = (CustomException)ex;

}else{

//针对非CustomException异常,对这类重新构造成一个CustomException,异常信息为“未知错误”

customException = new CustomException("未知错误");

}

//错误 信息

message = customException.getMessage();

request.setAttribute("message", message);

try {

//转向到错误 页面

request.getRequestDispatcher("/error.jsp").forward(request, response);

} catch (ServletException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return new ModelAndView();

}

}

3.配置javaBean

原理知识梳理(感谢各位的分享)

1 、Java异常分类

d4ef1cf01047586f9c24e3b6e5a2e3c5.png

Java把异常当做对象来处理。Throwable是所有错误或异常的超类。Throwable类有两个直接子类:Error类和Exception类。

1、Error是指java运行时系统的内部错误和资源耗尽错误,是程序无法处理的异常,应用程序不会抛出该类对象。

2、Exception是程序本身可以处理的异常,应尽可能去处理这些异常。Exception分两类,一个是运行时异常RuntimeException,一个是检查异常CheckedException。

3、CheckedException一般是外部错误,这种异常都发生在编译阶段,Java编译器会强制程序去捕获此类异常。

4、RuntimeException是那些可能在Java 虚拟机正常运行期间抛出的异常的超类。这种错误是由程序员引起的错误,可以修正代码解决。

2、异常处理

在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大。 那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护?答案是肯定的。下面将介绍使用Spring MVC统一处理异常的解决和实现过程

使用Spring MVC提供的SimpleMappingExceptionResolver

实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器

使用@ExceptionHandler注解实现异常处理

相关博客资源链接:

https://www.jb51.net/article/110776.htm    详解Spring全局异常处理的三种方式

https://testerhome.com/topics/12058     Java 代码中的全局异常处理

https://blog..net/XlxfyzsFdblj/article/details/80835013  Java全局异常处理

https://blog..net/lveliu/article/details/51768635 JAVA 后台全局异常控制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql crash定位分析_MySQL实例crash的案例详细分析

【问题描述】我们生产环境有一组集群的多台MySQL服务器(MySQL 5.6.21),不定期的会crash,但error log中只记录了重启信息,未记录crash时的堆栈:mysqld_safe Number of processes running now: 0mysqld_safe mysqld restarted接下来…

matlab 读取照片imread,利用matlab读取图像

怎样用matlab读取20张图片并依次展示出来指定路径下 单个文件夹data中所有图像 P .\data\;% 图像文件夹路径 img_path_list dir(strcat(P,*.jpg));%获取该文件夹中所有jpg格式的图像 N length(img_path_list);%获取图像总数量 for j 1:N%逐一读取图像 image_name img_path…

python元素定位input button_python+selenium 定位到元素,无法点击的解决方法

报错selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (234.75, 22). Other element would receive the click: 需要点击的按钮页面显示不了,需要下拉滚动条,能看到按钮了才能点1、尝试下拉一段滚动条&#…

python模拟浏览器请求的库_基于Python模拟浏览器发送http请求

1.使用 urllib2 实现#! /usr/bin/env python# -*- codingutf-8 -*-import urllib2url"https://www.baidu.com"req_header {"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11&…

owncloud8 php,owncloud-8.2.3

安装依赖Red Hat Enterprise Linux and CentOS 6 still ship with PHP 5.3. ownCloud requires PHP 5.4 or better. There areseveral third-party repositories that supply PHP 5.4, but you must use the Software Collections (SCL) repository to bein compliance with yo…

php7 提示500错误解决,升级php7出现500错误怎么办

升级php7出现500错误怎么办发布时间:2020-08-24 10:40:45来源:亿速云阅读:69作者:小新小编给大家分享一下升级php7出现500错误怎么办,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧&#xff01…

oracle 怎么 制造崩溃,oracle数据库崩溃

通过幸存oracle文件修复oracle9i数据问:我没有备分oralce,也没有导出数据库,现在操作系统崩溃了,但是oracle目录下的文件很完整,请问如何修复我的表?答:建一个相同的数据库(磁盘目录相同,否则要改init文件&…

php 500 yii,yii2.0出现500错误怎么办

1、首先开启web/index.php defined(YII_DEBUG) or define(YII_DEBUG, true); 将此改为true;看下报错的问题:Exception (Invalid Configuration) yii\base\InvalidConfigException with message The directory is notwritable by the Web process: /home/…

受迫阻尼 matlab 仿真,MATLAB系统仿真报告——有阻尼受迫振动系统

一、 问题描述有阻尼受迫振动的结构及基本原理图一 有阻尼的受迫振动系统图1为有阻尼的受迫振动系统,质量为M,摩擦系数为B, 弹簧倔强系数为K。拉力、摩擦力和弹簧力三都影响质量为M的物体的加速度。如果系统的能量守恒,且振动一旦…

php 数组 定义 遍历,php针对数组的定义、遍历及删除

本篇文章主要介绍php针对数组的定义、遍历及删除,感兴趣的朋友参考下,希望对大家有所帮助。本文实例讲述了php实现搜索一维数组元素并删除二维数组对应元素的方法,具体如下:定义一个一维数组一个二维数组如下$fruitarray(apple,or…

Linux怎么对文件内容trim,Linux平台下SSD的TRIM指令的最佳使用方式(不区别对待NVMe)...

SSD写数据会出现什么问题SSD读写的单位不是位,而是一个块。如果要改变这个块中的一位,首先要将整个块擦写成1,然后再写入更新的数据。为了解决擦写块的低效,SSD的策略是将需要改写的块,读取出来,进行数据修…

linux命令行如何上翻,Linux学习教程-获取可用命令行参数 or 文件上下翻转和左右翻转...

导读前面使用的,有几个用到了参数如ls -l, head -n 6等,需要注意的是跟参数之间要有空格。获取可用命令行参数终端运行man ls可以查看ls所有可用的参数,上下箭头翻页,按q退出查看。(man: manual, 手册)ctehbio:~/data$ man lsNAME…

用微PE安装KALI LINUX到U盘,【U盘安装kali】U盘 kali pe三合一教程!装机,存储

最近发现U盘可以做出pekali正常u盘的结合教程,并且可以正常当做U盘使用,但是在网上各种教程下我出现了各种问题,整整三天捣鼓,终于实现了这个操作,并且解决了persistence存储问题!现在将来以最详细的图文来…

linux dns中文域名,Linux 搭建中文域名的DNS服务器

配置之前先来解释一下中文域名是如何工作的:当我们在浏览器上输入 朝阳.北京.中国 这个域名的时候 浏览器会把中文域名翻译成Punycode编码然后再传送给DNS服务器解析,例如 朝阳.北京.中国 翻译成Punycode编码以后就是xn--tpv116h.xn--1lq90i.xn--fiqs8s朝…

linux内核全局变量同名,Linux系统下DSO同名全局变量浅析

最近重温了一下《程序员修养》,又搞懂了一些叽里旮旯的问题,现将DSO同名全局变量问题进行简单小结,具体的讲解请看《程序员修养》一书。程序员的自我修养—链接、装载与库.pdf版下载在Linux公社的1号FTP服务器里,下载地址&#xf…

linux切换到字符界面stemctl,CentOS7两种模式

1.13 救援模式忘记root用户密码修改密码: 单用户模式(但只能物理机操作不能远程操作,gaub没加密或者知道gaub才能修改)忘记root用户密码修改密码: 单用户模式(但只能物理机操作不能远程操作,gaub没加密或者知道gaub才能修改)关机 …

山东科技大学c语言完全题库,“山东科技大学十大未解之谜”之完全解答

“山东科技大学十大未解之谜”之完全解答(2012-04-24 13:53:36)标签:娱乐当我还是一枚小正太刚刚进入山科大的时候,我就看到过这些未解之谜,现在每每看到童鞋们转发这篇经久不衰的文章并且表达自己的疑问,我作为一名资深理科技术宅…

android广播注册源码,android 广播源码简要分析-注册

android broadcast1,广播注册静态注册:在系统服务启动时会添加PackageManagerService,在该类的构造方法中就会对各个应用安装目录的apk文件进行扫描解析详细步骤1,PackageManagerService初始化的时候,扫描系统目录下的…

android盒子改造,【当贝市场】废旧手机改造成电视盒子详细教程

3.直接即可输出视频了,然后在手机上安装暴风影音等视频软件的tv版,即可开始观看。有人会说,旧手机电池不行,看一会儿就得没电,怎么办?首先,在你输出到电视时,你就可以给手机锁屏&…

android分辨率px跟dp,Android屏幕适配 px,dp,dpi及density的关系与深入理解

PX(pixel):即传统计算机语言中描述的像素,在Android则代表绝对像素。之所以Android中不推荐使用这种单位,正是因为不同生产厂商,不同品牌,不同屏幕的设备,其分辨率亦不一。举例来说,我们现在将某个Button的…