出自于:https://blog.csdn.net/he90227/article/details/46309297   ---- 利用Spring进行统一异常处理的两种方式。

原文:https://blog.csdn.net/he90227/article/details/46309297?utm_source=copy

1.实现接口HandlerExceptionResolver

package com.jay.platform.exception.handler;

import java.io.IOException;
import java.net.ConnectException;
import java.net.SocketTimeoutException;
import java.util.Date; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView; import com.jay.platform.exception.AjaxException;
import com.jay.platform.exception.BusinessException; /**
*
* @ClassName: ExceptionHandler
* @Description: 统一异常处理 , 注意这里可以处理Controller层抛出的异常,但不处理Controller捕获的异常(Controller捕获的异常,这里不再处理)
* @author Jay He
* @date 2014年11月4日 上午10:22:11
*
*/
public class ExceptionHandler implements HandlerExceptionResolver {
private static final Logger LOGGER = Logger
.getLogger(ExceptionHandler.class); @Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
LOGGER.error(new Date().toLocaleString() + "异常信息", ex);
if (ex instanceof NumberFormatException) {
return new ModelAndView("exception/number");
} else if (ex instanceof NullPointerException) {
return new ModelAndView("exception/null");
} else if (ex instanceof BusinessException) {
return new ModelAndView("exception/business");
} else if (ex instanceof SocketTimeoutException
|| ex instanceof ConnectException) {
try {
response.getWriter().write("网络异常");
} catch (IOException e) {
e.printStackTrace();
}
return new ModelAndView("exception/net_error");
}else if(ex instanceof AjaxException){
System.out.println("-=-=");
}
return new ModelAndView("exception/exception");
} }

  

2.继承AbstractHandlerExceptionResolver类

package com.jay.platform.exception.handler;

import java.io.IOException;
import java.net.ConnectException;
import java.net.SocketTimeoutException;
import java.util.Date; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver; import com.jay.platform.exception.AjaxException;
import com.jay.platform.exception.BusinessException; /**
*
* @ClassName: ExceptionHandler
* @Description: 统一异常处理 , 注意这里可以处理Controller层抛出的异常,但不处理Controller捕获的异常(Controller捕获的异常,这里不再处理)
* @author Jay He
* @date 2014年11月4日 上午10:22:11
*
*/
public class ExceptionHandler extends AbstractHandlerExceptionResolver{
private static final Logger LOGGER = Logger
.getLogger(ExceptionHandler.class); @Override
protected ModelAndView doResolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
<pre name="code" class="java">LOGGER.error(new Date().toLocaleString() + "异常信息", ex);
if (ex instanceof NumberFormatException) {
return new ModelAndView("exception/number");
} else if (ex instanceof NullPointerException) {
return new ModelAndView("exception/null");
} else if (ex instanceof BusinessException) {
return new ModelAndView("exception/business");
} else if (ex instanceof SocketTimeoutException
|| ex instanceof ConnectException) {
try {
response.getWriter().write("网络异常");
} catch (IOException e) {
e.printStackTrace();
}
return new ModelAndView("exception/net_error");
}else if(ex instanceof AjaxException){
System.out.println("-=-=");
}
return new ModelAndView("exception/exception");

在配置文件中添加自定义异常处理模块

 <!-- Spring MVC的统一异常处理 -->
<bean id="exceptionResolver" class="com.jay.platform.exception.handler.ExceptionHandler"/>
错误页面展示:例:
 
error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Error页面</title>
</head>
<body>
<center>
<h1>Error页面</h1><br>
<h2>出错信息</h2>
<br><br>
错误描述
<br>
${errorTips }
<br><br>
<br><br>
错误异常信息栈
<br><br>
${ex }
</center>
</body>
</html>

  

spring的异常处理的更多相关文章

  1. Spring Boot异常处理详解

    在Spring MVC异常处理详解中,介绍了Spring MVC的异常处理体系,本文将讲解在此基础上Spring Boot为我们做了哪些工作.下图列出了Spring Boot中跟MVC异常处理相关的类 ...

  2. Spring Boot 异常处理

    Spring Boot 异常处理 本节介绍一下 Spring Boot 启动时是如何处理异常的?核心类是 SpringBootExceptionReporter 和 SpringBootExcepti ...

  3. Spring Boot异常处理

    一.默认映射 我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局 ...

  4. Spring全局异常处理的三种方式

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

  5. Spring 全局异常处理

    [参考文章]:Spring全局异常处理的三种方式 [参考文章]:Spring Boot 系列(八)@ControllerAdvice 拦截异常并统一处理 [参考文章]:@ControllerAdvic ...

  6. Spring MVC异常处理SimpleMappingExceptionResolver

    Spring MVC异常处理SimpleMappingExceptionResolver[转] (2012-12-07 13:45:33) 转载▼ 标签: 杂谈 分类: 技术分享 Spring3.0中 ...

  7. Spring统一异常处理

    1.为什么要用Spring的统一异常处理? 项目中无论是controller层.service层还是dao层都会有异常发生.每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量 ...

  8. Spring MVC异常处理代码完整实例

    Spring MVC异常处理流程: 提供构造方法传值: 配置异常处理器的bean

  9. 一文带你掌握Spring Web异常处理方式

    一.前言 大家好,我是 去哪里吃鱼 ,也叫小张. 最近从单位离职了,离开了五年多来朝朝夕夕皆灯火辉煌的某网,激情也好悲凉也罢,觥筹场上屡屡物是人非,调转过事业部以为能换种情绪,岂料和下了周五的班的前同 ...

  10. Spring 4 异常处理

    异常与HTTP状态码的映射(@ResponseStatus) Spring默认会将自身抛出的异常自动映射到合适的状态码,如下是一些示例: 举个例子,当后端抛出如下异常(TypeMismatchExce ...

随机推荐

  1. C语言经典试题--指针

    分享一道C语言的经典的题目.题目要求如下: 利用字符指针实现字符串1"I Love China"与字符串2"So do I"的输出.然后利用字符指针将字符串2的 ...

  2. Guava - Set集合

    当我们在统计一个字符串中每个单词出现的次数时,通常的做法是分割字符串,遍历字符串,然后放到一个map里面,来进行统计,Guava中提供了类似功能的集合,Multiset String strWorld ...

  3. MYSQL一个设备上的主从复制实现-windows

    只记录一次在一个设备上实现mysql主从复制的过程,很详细,建议收藏,用到的时候照着步骤做就可以,会记录所有需要注意到的细节和一些容易遇到的坑以及解决办法! 如果需要在同一台电脑(服务器)上实现mys ...

  4. P4774-屠龙勇士-扩展中国剩余定理

    屠龙勇士 很久很久以前,巨龙突然出现,带来了灾难带走公主又消失不见.王国十分危险,世间谁最勇敢,一位英雄出现-- 学习于该大佬博客 那么你就是这位英雄,不过不同的是,你面对的是一群巨龙,虽然巨龙都不会 ...

  5. 第二十七篇 -- 如何给静态文本设置成ico图标形式以及如何修改文本框中的内容

    修改静态文本框内容: CWnd* pWnd = GetDlgItem(IDC_STATIC1); pWnd->SetWindowText(_T("Server is on!" ...

  6. python中的生成器,迭代器及列表生成式

    列表生成器:  即List Comprehensions. 在python中,可通过内置的强大有简单的生成式来创建列表.例如创建一个1到10的列表list [1, 2, 3, 4, 5, 6, 7, ...

  7. 多项式求值问题(horner规则)——Python实现

    # 多项式求值(Horner规则) # 输入:A[a0,a1,a2...an],x的值 # 输出:给定的x下多项式的值p   # Horner迭代形式实现 1 # 在此修改初值 2 A = [2, 6 ...

  8. vue知识点---element el-date-picker 插件默认时间属性default-value怎么赋值?

    参考网址: http://www.imooc.com/wenda/detail/509359 默认值,你放到 v-model里面就好. v-model="time" data(){ ...

  9. Linux下如何查看定位当前正在运行软件的配置文件

    netstat命令 用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况 netstat -lntup 说明: l:listening n:num t:tc ...

  10. 🔥 LeetCode 热题 HOT 100(71-80)

    253. 会议室 II(NO) 279. 完全平方数 class Solution { public int numSquares(int n) { // dp[i] : 组成和为 i 的最少完全平方 ...