페이지 예외처리방법
1. 일단 예외를 throw new Exception() 을통해서 예외를 발생시켜 보자.
>> 해당 예외처리에 대한 조치가 없으므로, 이것은 서버에 대한 문제기 때문에 500대 에러가 발생했다.
2. 1번의 문제를 해결하기 위해 try-catch 문을 통해서 예외처리해보자
try-catch 문을 쉽게하기 위해서는
>> 블록지정 후 > 우클릭 > Surround With > try-catch를 통해서 쉽게 처리할 수 있따.
>> 예외 처리후에는 404 에러가 발생한 것을 확인할 수 있는데 이는 리턴 타입이 void이기 때문에 해당 요청에 쓰인 페이지를 찾을수 없기 떄문에 404가 발생했다 즉 ex.jsp를 못찾았다는 의미
그렇다면 에러 처리를 하기 위해서 메서드마다 Try-Catch문을 사용해야 할까?
그렇지 않다.
@ExceptionHandler 라는 어노테이션을 통해서 발생하는 에러를 한번에 처리할 수 있다.
>> 아래와 같이 @ExceptionHandler() 어노테이션을 선언하고 해당 매개변수로 처리해야할 에러를 넣어주면된다.
그러면 해당 에러에 대한 처리를 메서드에서 모두 처리한다.
해당 에러에 대한 내용을 JSP로 보내기 위해서는 Model 객체를 생성한 후 담아서 넘겨준다.
============================================================================================
하지만
@ExceptionHandler 의 경우는 해당 컨트롤러에서만 사용할 수 있다.
따라서 다양한 컨트롤러에 대한 예외처리는 다른 방법으로 진행되어야 한다.
이경우는 따로 Class를 생성하여
@ControllerAdvice 라는 애너테이션을 사용하면된다.
그러면 모든 클래스에서 발생하는 예외에 대해서 해당 클래스가 예외처리를 실시해준다.
>> 그렇다면 해당 컨트롤러에 있는 @ExceptionHandler와 @ControllerAdvice중에 어느게 처리하냐 하면, 가까운 곳에 있는 처리로 진행한다. 즉 해당 컨트롤러에 해당 에러에 대한 처리가 있으면 그 에러 처리 방법이 처리하고, 없다면 @ControllerAdvice이 처리해준다.
>> 또한 옵션으로 @ControllerAdvice("풀패키지명") 의 매개변수로 처리해주어야할 패키지를 지정해줄수 있다.
>> Default 는 모든 패키지이다.
>> 아래의 컨트롤러를 보면 /ex4, /ex5의 경우는 예외처리가 안되어 있어서 호출할 경우 에러가 발생해야 하는데
>> @ControllerAdvice에 의해서 예외처리를 해주었다.
'dev > Spring' 카테고리의 다른 글
[Spring] Spring MVC vs RESTful (0) | 2022.06.16 |
---|---|
[Spring] 예외처리2 (0) | 2022.06.14 |
[Spring] Session (0) | 2022.06.13 |
[Spring] Cookie (0) | 2022.06.09 |
[Spring] redirect, forward (0) | 2022.06.09 |