- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章基于SpringMVC的全局异常处理器介绍由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
近几天又温习了一下SpringMVC的运行机制以及原理 。
我理解的springmvc,是设计模式MVC中C层,也就是Controller(控制)层,常用的注解有@Controller、@RequestMapping、@Autowared、@Component,今天呢,我所要写的是SpringMVC的全局异常处理器,关联的接口有HandlerExceptionResolver(Eclipse用户可以按Ctrl+Shift+T进行搜索该接口),什么是全局异常处理器?为什么要用它呢?
在企业开发中,各种的Runtime异常可能会让我们崩溃,但是还有一部分异常在此之外,因此我们就要捕获它,然后进行操作提示(将错误提示返回到ModelAndView) 。
下来呢,我贴一部分代码 。
首先呢,创建一个自定义的异常类 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
/**
* @Title: ExceptionCustom.java
* @Description: 本地异常
* @author ChoviWu
* @version V1.0
*/
public
class
ExceptionCustom
extends
Exception{
/**
* @Fields serialVersionUID :
*/
private
static
final
long
serialVersionUID = 1L;
private
String message;
/**
* @return the message
*/
public
String getMessage() {
return
message;
}
/**
* @param message the message to set
*/
public
void
setMessage(String message) {
this
.message = message;
}
public
ExceptionCustom() {
super
();
// TODO Auto-generated constructor stub
}
public
ExceptionCustom(String message) {
super
(message);
this
.message = message;
}
}
|
创建一个全局异常处理器的类,让它实现HandlerExceptionResolver 接口。相信,基础好一点的同学可以看出来我代码的意思(注释) 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
org.apache.log4j.Logger;
org.springframework.web.servlet.HandlerExceptionResolver;
import
org.springframework.web.servlet.ModelAndView;
/**
* @Title: SimpleException.java
* @Description:全局异常处理器
* @author ChoviWu
* @version V1.0
*/
public
class
SimpleExceptionResolver
implements
HandlerExceptionResolver {
// 异常对象
ExceptionCustom exceptionCustom =
null
;
private
Logger logger = Logger.getLogger(SimpleExceptionResolver.
class
.getSimpleName());
/**
* 全局处理异常
*/
public
ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
//转化为自定义异常
exceptionCustom = (ExceptionCustom) ex;
//判断是否是本地异常
if
(ex
instanceof
ExceptionCustom) {
logger.info(ex.getMessage());
}
else
{
…抛出错误
}
//获取异常信息
String message = exceptionCustom.getMessage();
ModelAndView mv =
new
ModelAndView();
//将异常返回到Model
mv.addObject(
"xx"
, message);
// 指向错误页面
mv.setViewName(
"error"
);
return
null
;
}
}
|
解释一下,在判断一个异常是否是其他异常的时候,先看它是否属于本地异常(Exception)的exceptionCustom ,如果是本地异常,则抛出本地异常信息 。
1
2
3
4
5
|
if
(ex
instanceof
ExceptionCustom) {
logger.info(ex.getMessage());
}
else
{
…抛出错误
}
|
。
如果不是本地异常,则抛出未知异常 。
。
然后从异常里面获取异常信息,将异常信息返回到MV中,最后转至页面,当然严谨一点的,会将异常信息添加到数据库中,方便查看 。
由于本文章只是一个Demo,所以没有考虑到很多因素 。
下来,说说配置文件 。
配置文件,先贴上代码,然后再做解释 。
1
2
|
<!-- 全局异常处理器 -->
<bean id=
"handlerExceptionResolver"
class
=
"xxxx(包名).SimpleExceptionResolver"
/>
|
。
注意:首先,这个bean将配置在自己的web层.xml(spring-web.xml),当启动tomcat,加载web.xml后需加载spring-web.xml 。
之前注入的bean的id我随便写了一个名称,然后spring解析的时候报错了, 。
之后看了源码的时候,才知道原来是这么回事 。
1
2
|
1SpringMVC 在org.springframework.web.servlet.DispatcherServlet类中声明了
public
static
final
String HANDLER_EXCEPTION_RESOLVER_BEAN_NAME =
"handlerExceptionResolver"
;
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
private
void
initHandlerExceptionResolvers(ApplicationContext context) {
this
.handlerExceptionResolvers =
null
;
if
(
this
.detectAllHandlerExceptionResolvers) {
// Find all HandlerExceptionResolvers in the ApplicationContext, including ancestor contexts.
Map<String, HandlerExceptionResolver> matchingBeans = BeanFactoryUtils
.beansOfTypeIncludingAncestors(context, HandlerExceptionResolver.
class
,
true
,
false
);
if
(!matchingBeans.isEmpty()) {
this
.handlerExceptionResolvers =
new
ArrayList<HandlerExceptionResolver>(matchingBeans.values());
// We keep HandlerExceptionResolvers in sorted order.
OrderComparator.sort(
this
.handlerExceptionResolvers);
}
}
else
{
try
{
HandlerExceptionResolver her =
context.getBean(HANDLER_EXCEPTION_RESOLVER_BEAN_NAME, HandlerExceptionResolver.
class
);
this
.handlerExceptionResolvers = Collections.singletonList(her);
}
catch
(NoSuchBeanDefinitionException ex) {
// Ignore, no HandlerExceptionResolver is fine too.
}
}
|
看完这段代码的同学应该就知道为什么把bean 的id 设置成handlerExceptionResolver了吧 。
1
|
HandlerExceptionResolver her =context.getBean(HANDLER_EXCEPTION_RESOLVER_BEAN_NAME, HandlerExceptionResolver.
class
);
|
所以说,全局异常处理器的bean的id不能随便的设置.
以上这篇基于SpringMVC的全局异常处理器介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.
最后此篇关于基于SpringMVC的全局异常处理器介绍的文章就讲到这里了,如果你想了解更多关于基于SpringMVC的全局异常处理器介绍的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
晚上在 QQ 上看到昵称为“乱码”的好友回答了搜搜问问里一个问题: 在VBS中有办法定义字节数组么? 在VBS中有办法定义字节数组么?就是字节子类型数组(VarType是8209的那种)注意不是V
例如,员工管理应用程序可能包括一个EmPloyee 类。然后可以用这个类来创建和维护特定实例,比如Gonn和Sally。 根据预定义的类创建对象常称为类的实例化(class insta
在自然语言中,我们理解抽象的概念是,一个物体的一种大的描述,这种描述对某类物体来说是共有的特性。那么在PHP中也是一样的,我们把一个类进行抽象,可以指明类的一般行为,这个类应该是一个模板,它指示它的
DBA_2PC_PENDING Oracle会自动处理分布事务,保证分布事务的一致性,所有站点全部提交或全部回滚。一般情况下,处理过程在很短的时间内完成,根本无法察觉到。但是,如果在commit或
目录 计算过程 投影分量计算 假设你有一家理发店,已经记录了过去一年中所有顾客的头发长度和发型偏好的数据。现在你想从这些数据中提取一些主要的信息,比如顾客最常
Object.defineProperty函数会直接在一个对象上定义一个新的属性,或者修改一个对象的现有属性,并返回此对象。 一、简单使用 const obj = {} Object.defineP
SPL官网 http://www.scudata.com.cn/ 介绍 业务逻辑经常包含较复杂的流程和计算,同时涉及数据库的读写。由于授权麻烦、影响数据库安全、无法迁移、技术要求高、编写困难等原因,很
SPL官网 http://www.scudata.com.cn/ 介绍 业务逻辑经常包含较复杂的流程和计算,同时涉及数据库的读写。由于授权麻烦、影响数据库安全、无法迁移、技术要求高、编写困难等原因,很
一 点睛 Thrift 是一歀基于 CS 架构的 RPC 框架,最初由 Facebook 研发,2008 年转入 Apache 组织。开发人员可以使用 Thrift 提供的 IDL(接口定义语言)来定
数据库应用程序与主应用程序分开存在,并存储数据集合。 每个数据库都使用一个或多个API来创建,访问,管理,搜索和复制其包含的数据。 数据库还使用非关系数据源,例如对象或文件。 然而,数据库证明是大数
介绍 Ant是一个 Apache 基金会下的跨平台的基于 Java 语言开发的构件工具。在我们详细了解 Apache Ant 之前, 让我们来讲解为什么构建工具是需要最先了解的。 构建工具的需求
我现在正在尝试学习ocaml,并希望从一个小程序开始,生成所有位组合: [“0”,“0”,“0”] [“0”,“0”,“1”] [“0”,“1”,“0”] ... 等等 我的想法是下面的代码: let
我正在做我的介绍 C 类(class)作业,我的任务是执行以下任务...... 为一个函数编写代码,该函数通过值接收两个参数(a 和 b)并通过引用具有另外两个参数(c 和 d)。所有参数都是双倍的。
我希望提供有关我网站内容的快速演示,以及如何在用户访问我的页面后立即以正确的方式使用它们。我希望使用顶部的弹出式窗口进行演示。 我的意思是小信息框,一个接一个地通知用户各个步骤。任何人都可以帮助我如何
与C、Java等语言一样,JavaScript中可以用&&、||、!三个逻辑判断符来对boolean值进行逻辑判断。与C、Java不同的是,JavaScript中逻辑与(&&
JavaScript中,==与===操作符均可用于判断两个值是否相等;不同之处在于,如果进行判断的两个值类型不一致,===操作符会直接返回false,而==操作符则会在类型转换后再进行判断。详细的判
JavaScript中,object转换为boolean的操作非常简单:所有的object转换成boolean后均为true;即使是new Boolean(false)这样的object在转换为bo
在android开发中,当不满足触发条件就按返回键的时候,就要对此进行检测。尤其是当前Activity需要往前一个Activity传送消息时。即Activity1跳转到Activity3如果采用的是
背景 当要求系统启动一个应用程序时,系统会先查找当前命令是否是内部命令,若不是,则在当前目录下查找,如果仍没有找到,则在系统变量 Path 指定的路径去查找。JDK(Java Developmen
概述 想做一个微信的公众平台,阅读了微信官方给的网址接入的示例代码,发现有个问题好像一直都是半知半解的,就是在类里边直接使用$_GET。仔细查了下关于这方面的知识,发现PHP中这部分的基础知识掌握
我是一名优秀的程序员,十分优秀!