- Spring MVC 마스터하기 예외처리 12022년 06월 11일
- starryeye
- 작성자
- 2022.06.11.:05
개발을 하다보면.. 여러가지 예외(exception)가 발생할 수 있다.
먼저 순수 서블릿 컨테이너가 예외를 어떻게 처리하는지 알아보자.
1. 일반 Exception
2. sendError 메서드
기본 지식
위와 같이 error-ex 컨트롤러에 접근하면 런타임 exception을 발생시켜서 던져보자!
그러면...
바로 errorEx 메서드를 호출한 메서드로 넘어가고 그 메서드를 호출한 메서드로 넘어가고 타고타고 계속 넘어간다.
(또 예를 들면, java main 함수에서 예외가 발생되면 main 너머로 예외가 던져 진다..)
웹 어플리케이션에서의 예외 발생
WAS -> 필터 -> DispatcherServlet(서블릿) -> 인터셉터 -> 컨트롤러 위는 일반적으로 서버로 요청이 들어오면 호출 되는 순서이다.
여기서 컨트롤러에서 예외가 발생된다면...
컨트롤러 -> 인터셉터 -> DispatcherServlet(서블릿) -> 필터 -> WAS 호출 된 역순으로 톰캣같은 WAS까지 예외가 전달된다.
참고>
application.properties 에
server.error.whitelabel.enabled=false 를 추가하면
예외가 발생했을 때, 스프링 부트가 기본으로 제공하는 에러 페이지를 끌 수 있다.
끄게 되면 tomcat(WAS)가 제공하는 오류화면을 볼 수 있다.
예외 발생시, 기본적으로 500 http 상태코드(Internal Server Error)인 톰캣 에러페이지 제공
정의되지 않은 URI를 요청하면.. 404 http 상태코드(not found)인 톰캣 에러페이지 제공
HttpServletResponse가 제공하는 sendError 메서드
sendError메서드를 당장 호출한다고 해서 예외가 발생하는건 아니지만...
서블릿 컨테이너에게 오류가 발생했다고 전달 할 수있는 메서드이다.
위와 같이 sendError 메서드는 Http 상태코드와 오류 메세지를 추가 할 수 있다.
위와 같이 사용이 가능하다.
sendError는 일반적인 예외가 발생하여 바로 호출된 역순으로 던져지는게 아니라
로직을 모두 수행 후, 일반적인 return으로 정상적인 흐름을 탄다.
그래서, 서블릿 컨테이너는 컨트롤러를 호출 하고 return 되면 sendError가 호출 되었는지.. 확인을 한다.
호출이 되었다면..
설정한 오류 코드에(위 예시에서는 404) 맞춰 오류 페이지를 보여준다.
'Spring > MVC' 카테고리의 다른 글
Spring MVC 마스터하기 예외처리 3 (0) 2022.06.11 Spring MVC 마스터하기 예외처리 2 (0) 2022.06.11 Spring MVC 마스터하기 5 (0) 2022.06.04 Spring MVC 마스터하기 인터셉터 1 (0) 2022.06.04 Spring MVC 마스터하기 필터 1 (0) 2022.06.03 다음글이전글이전 글이 없습니다.댓글