1. 이상 분류
Java 예외는 "점검"과 "비 체크"의 두 가지 범주로 나뉩니다. "점검"이라는 단어는 코드를 컴파일 할 때 컴파일러가 예외 처리가 있는지 확인합니다 (포획 또는 버림). 점검이 필요한 것으로 분류 된 예외는 처리되지 않으면 컴파일을 통과 할 수 없습니다.
초보자 였을 때 왜 예외가 이런 식으로 처리되어야하는지 궁금합니다. 나중에 나는 조금 이해했다. 두 가지 유형의 이상은 주관적이고 객관적이다. 하나는 대부분의 경우 피할 수 있고 다른 경우에는 피할 수 없습니다.
NullPointerException과 같은 예외는 대부분 프로그래머의 특성과 연결되어 있습니다 (잘 개발 및 테스트하면 기본적으로 시스템이 실행 된 후에는 팝업되지 않습니다). 그들은 기본적으로 피할 수 있습니다. Java Syntax는 그들을 "비 점점 예외"로 클래스하기 위해 사용했으며, 이로 인해 프로그래머와 컴파일러도 많은 문제를 저장했습니다.
IOException과 같은 외부 환경과 관련된 예외는 거의 불가피합니다 (네트워크는 언젠가는 끊어집니다). 그러나 예기치 않게 발생하면 프로그램이 여전히 차이를 만들어야하므로 컴파일러는 프로그래머에게 가능한 예기치 않은 예외가 처리되었는지 확인하고 확인하도록 촉구해야합니다. 예외 객체가 노드로 전달되면 프로그램은 다음과 같은 몇 가지 측정을 수행 할 수 있습니다 : 사용자에게 프롬프트를 반환 ( "시스템이 바쁘다"), 예외 메시지를 모니터링 플랫폼에 푸시하는 등의 측정 값을 수행 할 수 있습니다.
2. 예외의 통합 반환 처리
1. 컨테이너 처리
다음은 Tomcat의 처리 방법을 나열하고 Web.xml로 구성하고 HTTP 반환 코드 또는 예외에 따라 처리합니다.
<Error-Page> <Error-Code> 404 </error-code> <위치> /web-inf/views/error/404.jsp </location> </error-page> <Error-Page> <Error-Page> <Error-Code> 500 </error-code> </web-inf/views/error/500.jsp </error-page> <Error-Page> <Exception-Type> java.lang.throwable </exception-type> <location> /web-inf/views/error/throwable.jsp </location> </error-page>
단점 : ajax와 같이 HTML을 반환 할 필요가없는 요청을 처리 할 수 없습니다.
2. 프레임 워크 처리
다음은 스프링 MVC의 처리 방법을 나열합니다
(1) Spring MVC에 포함 된 간단한 예외 처리기 인 SimplemappingExceptionResolver를 사용하십시오.
(2) 인터페이스 handlerexceptionResolver 사용자 정의 예외 처리기를 구현합니다. (사용하는 것이 좋습니다. Ajax 및 기타 확장을 지원할 수 있습니다).
(3) @ExceptionHandler 주석을 사용하여 예외 처리를 구현하십시오.
spring-mvc.xml에서 구성하십시오 (1)
<!-컨트롤러가 특정보기로 던진 예외로 이동-> <ean> <속성 이름 = "ExceptionMappings"> <props> <!-다른 예외 점프 별도-> <!-다른 예외를 사용자 정의 할 수 있습니다-> <prop key = "com.test.myexception1">/error/e1 </prop> <prop key = "prop key ="prop/e 예외를 사용자 정의하고 다음을 구성하려면 다음을 구성하십시오 -> <prop key = "java.lang.throwable">/error/500 </prop> </props> </propert> </bean>
단점 : HTML을 반환 할 필요가없는 요청을 처리 할 수 없습니다.
유형 (2), 구현 클래스 사용자 정의 HandlereXceptionResolver 인터페이스
/** * 사용자 정의 예외 처리기 : AJAX * @Author wangxu */public class myExceptionHandler는 handlerexceptionResolver {public modelandView resolveException (httpservletrequest 요청, httpservletresponse 응답, 객체 핸들러, 예외) {/ * Difceriate ajax */bojax = request.getheader ( "x- requested-with")! = null && "xmlhttprequest".equals (request .getheader ( "x-requested-with"). toString ()); if (! isajax) {if (ex instanceof com.test.myexception1) {return new ModelAndView ( "/error/e1"); } else if (ex instanceof com.test.myexception1) {return new ModelAndView ( "/error/e2"); } else {return new ModelAndView ( "/error/500"); }} string jsonres = "{/"message/":/" " +" + " +"시스템 예외 " +"/"}"; // 사용자 정의 구조 및 전경 도킹 프린트 라이터 out = null; try {out = response.getwriter (); request.setcharacterencoding ( "UTF-8"); response.setContentType ( "텍스트/일반; charset = utf-8"); out.print (jsonres); out.flush (); } catch (ioexception e) {e.printstacktrace (); } 마침내 {out.close (); } return null; }}Spring-MVC.XML에 프로세서를 등록하십시오
<bean id = "ExceptionHandler"/>
장점 : AJAX 요청을 처리 할 수 있으며 인코딩이 예외 모니터링 등과 같은 기능 확장을 구현하는 것이 편리합니다.
유형 (3), @ExceptionHandler 주석
@ControllerPublic 클래스 TestExceptionHandlerController {@exceptionHandler ({myException1.class}) public String Exception (myException1 e) {return "/error/e1"; } @RequestMapping ( "/Mary") public void test () {throw new myException1 ( "No Money!"); }}단점 : @ExceptionAndler의 방법은 던질 예외가 가능한 방법과 동일한 컨트롤러 아래에 있어야합니다. (권장되지 않음)
3. 조합
실제 프로젝트에서는 예외의 균일 한 반환을 처리 할 때 일부 사용자 정의 예외 또는 확장이 프레임 워크에 전달되며 HTTP 리턴 코드의 매핑은 컨테이너에 넘겨집니다. HTTP 리턴 코드는 더 우수하기 때문에 일부는 프레임 워크에 도달 할 수 없으며 일부는 프레임 워크 (404 및 Spring MVC)에 대한 예외가 아닙니다. 프레임 워크는 컨테이너에서 실행됩니다. 프레임 워크가 먼저 예외를 가져 와서 반환하면 컨테이너가 더 이상 매핑되지 않습니다.
위의 내용은이 기사에 관한 모든 것입니다. 모든 사람의 학습에 도움이되기를 바랍니다.