java全局机制,java实现全局异常机制
先上自己的代碼,后整理下原理知識(shí)。
下面是自己實(shí)現(xiàn)的全局異常機(jī)制
1.繼承Exception,自定義異常類
?
package com.zichen.xhkq.exception;
/**
*
*
Title: CustomException
*
Description: 系統(tǒng)自定義的異常類型,實(shí)際開(kāi)發(fā)中可能要定義多種異常類型
* @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.實(shí)現(xiàn)HandlerExceptionResolver,自定義異常處理器,可以判斷處理自定義異常和系統(tǒng)異常,可以跳轉(zhuǎn)異常頁(yè)面
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在進(jìn)行HandlerMapping、調(diào)用HandlerAdapter執(zhí)行Handler過(guò)程中,如果遇到異常就會(huì)執(zhí)行此方法
//handler最終要執(zhí)行的Handler,它的真實(shí)身份是HandlerMethod
//Exception ex就是接收到異常信息
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
//輸出異常
ex.printStackTrace();
//統(tǒng)一異常處理代碼
//針對(duì)系統(tǒng)自定義的CustomException異常,就可以直接從異常類中獲取異常信息,將異常處理在錯(cuò)誤頁(yè)面展示
//異常信息
String message = null;
CustomException customException = null;
//如果ex是系統(tǒng) 自定義的異常,直接取出異常信息
if(ex instanceof CustomException){
customException = (CustomException)ex;
}else{
//針對(duì)非CustomException異常,對(duì)這類重新構(gòu)造成一個(gè)CustomException,異常信息為“未知錯(cuò)誤”
customException = new CustomException("未知錯(cuò)誤");
}
//錯(cuò)誤 信息
message = customException.getMessage();
request.setAttribute("message", message);
try {
//轉(zhuǎn)向到錯(cuò)誤 頁(yè)面
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
原理知識(shí)梳理(感謝各位的分享)
1 、Java異常分類
Java把異常當(dāng)做對(duì)象來(lái)處理。Throwable是所有錯(cuò)誤或異常的超類。Throwable類有兩個(gè)直接子類:Error類和Exception類。
1、Error是指java運(yùn)行時(shí)系統(tǒng)的內(nèi)部錯(cuò)誤和資源耗盡錯(cuò)誤,是程序無(wú)法處理的異常,應(yīng)用程序不會(huì)拋出該類對(duì)象。
2、Exception是程序本身可以處理的異常,應(yīng)盡可能去處理這些異常。Exception分兩類,一個(gè)是運(yùn)行時(shí)異常RuntimeException,一個(gè)是檢查異常CheckedException。
3、CheckedException一般是外部錯(cuò)誤,這種異常都發(fā)生在編譯階段,Java編譯器會(huì)強(qiáng)制程序去捕獲此類異常。
4、RuntimeException是那些可能在Java 虛擬機(jī)正常運(yùn)行期間拋出的異常的超類。這種錯(cuò)誤是由程序員引起的錯(cuò)誤,可以修正代碼解決。
2、異常處理
在J2EE項(xiàng)目的開(kāi)發(fā)中,不管是對(duì)底層的數(shù)據(jù)庫(kù)操作過(guò)程,還是業(yè)務(wù)層的處理過(guò)程,還是控制層的處理過(guò)程,都不可避免會(huì)遇到各種可預(yù)知的、不可預(yù)知的異常需要處理。每個(gè)過(guò)程都單獨(dú)處理異常,系統(tǒng)的代碼耦合度高,工作量大且不好統(tǒng)一,維護(hù)的工作量也很大。 那么,能不能將所有類型的異常處理從各處理過(guò)程解耦出來(lái),這樣既保證了相關(guān)處理過(guò)程的功能較單一,也實(shí)現(xiàn)了異常信息的統(tǒng)一處理和維護(hù)?答案是肯定的。下面將介紹使用Spring MVC統(tǒng)一處理異常的解決和實(shí)現(xiàn)過(guò)程
使用Spring MVC提供的SimpleMappingExceptionResolver
實(shí)現(xiàn)Spring的異常處理接口HandlerExceptionResolver 自定義自己的異常處理器
使用@ExceptionHandler注解實(shí)現(xiàn)異常處理
相關(guān)博客資源鏈接:
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 后臺(tái)全局異常控制
總結(jié)
以上是生活随笔為你收集整理的java全局机制,java实现全局异常机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: lua虚拟机字节码修改_LUA虚拟机的字
- 下一篇: 计算机主机的主要包括,微型计算机的主机主