先上自己的代码,后整理下原理知识。
下面是自己实现的全局异常机制
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异常分类
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 后台全局异常控制