프로그램 실행 중 오류가 발생하게 되면 프로그램의 실행이 중단되게 된다. JAVA에서는 이를 방지하기 위해서 오류처리라는 개념을 두었다. 보통 웹 어플리케이션에서 오류가 발생하면 웹 브라우저에 오류메세지가 나타나게 되는데 이는 개발자 입장에서는 오류를 점검하고 디버깅을 하기 위해 사용될 수 있겠지만, 실제 사용하는 클라이언트가 보기에는 매우 부적절한 페이지이다. 그래서 보통은 오류가 발생하면 보여줄 jsp를 구성하고 오류가 발생하면 이 jsp로 응답 결과를 생성하여 브라우저로 전달하게 된다.

 

SpringMVC에서는 어떻게 오류페이지에 대한 처리를 할 수 있는지 알아보자.

 

 

 

@ExceptionHandler

Controller에서 @ExceptionHandelr를 통해 메소드를 정의해주면 오류가 발생할 때 이 메소드를 자동으로 호출해주게 된다. 이 메소드가 반환하는 jsp정보를 통해 응답 결과 화면을 만들고 이 응답 결과를 브라우저로 전달하게 된다. 

이때 사용되는 jsp를 오류 페이지용으로 만들어주면 되겠다.

 

 

 

컨트롤러이다. test1이라는 주소값 요청이 들어오면 test1이라는 메소드가 자동으로 호출하게 된다. test1이라는 메소드는 Model객체를 사용하여 array1이라는 정수형 배열의 6번째 인덱스를 "array1"이라는 이름으로 Request영역에 넘겨준다. 그런데, array1배열에는 6번째 인덱스가 존재하지 않는다. ArrayIndexOutOfBoundsException이 발생할 것이다. 

 

ArrayIndexOutOfBoundsException 예외가 발생하면 개발자가 지정한 오류페이지로 접근할 수 있도록 해보자.

@ExceptionHandler의 속성에 위와 같이 처리할 예외와 관련된 클래스를 넣어주면 이 예외가 발생할 때 등록된 메소드가 호출이 되도록 만들 수 있다. 

 

error1.jsp라는 오류페이지를 만들어주면 되겠다.

 

 

 

Global Exception Handler

@ExceptionHandler는 Controller마다 만들어 주어야 한다. 만약 Controller마다 발생 가능한 예외들이 있다면 한번만 정의해서 사용하는것이 효율적일 것이다. Global Exception Handler를 구현하면 Controller에 정의한 ExceptionHandler중에 해당 오류에 대한 것이 없다면 Global Exeption Handler로 이동하여 예외에 관련된 처리를 해주게 된다.

 

 

 

com.study.spring.exception 패키지를 새로 만들어서 GlobalExceptionHandler.java를 만들었다.

@ControllerAdvice를 클래스에 붙여줌으로써 해당 클래스를 Global Exception Handler로서 사용하겠다고 선언한다.

 

이 클래스는 RuntimeException을 반드시 상속받아야 한다.

모든 컨트롤러에서 공통적으로 발생할 수 있는 예외에 대한 정보를 이 클래스에 모두 선언해주면 된다.

NullPointException 예외를 등록해주었다.

 

이제 어떤 컨트롤러에서든 NullPointException이 발생하게 된다면 error2.jsp를 실행할 것이다.

 

 

 

'JAVA > Spring MVC' 카테고리의 다른 글

RestController  (0) 2020.05.04
Interceptor  (0) 2020.05.03
JSR-303, JSR-380 어노테이션  (0) 2020.05.01
에러메세지 커스터마이징  (2) 2020.04.30
Spring MVC 유효성검사  (0) 2020.04.30

+ Recent posts