스프링 MVC 2 - 정리(예외 처리와 오류 페이지)
반응형
정리(예외 처리와 오류 페이지)
- 프로젝트 생성
- 서블릿 예외 처리 - 시작
- Exception(예외)
- response.sendError(Http 상태 코드, 오류 메시지)
- 톰캣이 기본으로 오류 화면을 제공함. 그러나 오류 화면이 너무 별로임.
- 서블릿 예외 처리 - 오류 화면 제공
- 스프링 부트는 WebserverFactoryCustomizer를 가지고 원하는 오류페이지를 등록 할 수 잇었다.
- response.sendError(404) : errorPage404 호출
- response.sendError(500) : errorPage500 호출
- RuntimeException 또는 그 자식 타입의 예외 : errorPageEx 호출
- 서블릿 예외 처리 - 오류 페이지 작동 원리
- 예외 발생 흐름
- WAS(여기까지 전파) ← 필터 ← 서블릿 ← 인터셉터 ← 컨트롤러(예외발생)
- sendError 흐름
- WAS(sendError 호출 기록 확인) ← 필터 ← 서블릿 ← 인터셉터 ← 컨트롤러(response.sendError())
- 예외 발생화 오류 페이지 요청 흐름
- 1. WAS(여기까지 전파) ← 필터 ← 서블릿 ← 인터셉터 ← 컨트롤러(예외발생)
- 2. WAS '/error-page/500' 다시 요청 → 필터 → 서블릿 → 인터셉터 → 컨트롤러(/error-page/500) → View
- 예외 발생 흐름
- 서블릿 예외 처리 - 필터
- 컨트롤러에서 예외가 터져서 예외가 WAS까지 올라가면, WAS가 오류페이지를 다시 요청을 하는데,
여기서 발생하는 문제는, 필터나 인터셉트가 중복호출 될 수 있다는 문제이다. - 그래서 DispatcherType이라는 것이 있었다.
- REQEUST : 클라이언트 요청
- ERROR : 오류 요청
- ex) 필터를 등록할 때, .setDispatcherTypes(DispatcherType.REQUEST); 이렇게 등록하면 REQUEST에서만 필터가 동작하도록 할 수 있었다.
- 참고로, default가 REQUEST이다.
- 컨트롤러에서 예외가 터져서 예외가 WAS까지 올라가면, WAS가 오류페이지를 다시 요청을 하는데,
- 서블릿 예외 처리 - 인터셉터
- 인터셉터는 스프링기술이기 때문에 DispatcherType가지고 할 수는 없다.
- .excludePathPatterns에서 오류페이지 경로를 빼주는 것으로 인터셉터를 오류페이지 호출 시에는 동작하지 않도록 할 수 있다.
- 스프링 부트 - 오류 페이지1
- 스프링 부트는 ErrorPage를 자동으로 등록한다. 이때, '/error'라는 경로로 기본 오류 페이지를 설정한다.
- BasicErrorController라는 스프링 컨트롤러를 자동으로 등록한다. - ErrorPage에서 등록한 '/error'를 매핑해서 처리하는 컨트롤러다.
- BasicErrorController의 처리 순서
- 1. 뷰 템플릿 (500.html → 5xx.html) 내부 우선순위는 구체적인 것 에서 추상적인 것으로
- 2. 정적 리소스
- 3. 적용 대상이 없을 때 뷰 이름('error')
- 스프링 부트 - 오류 페이지2
- BasicErrorController는 모델에 오류 정보를 담아서 반환해준다.
- application.properties에 옵션을 적용해서 오류 정보들을 model에 포함할지 여부를 선택할 수 있다.
(단, 고객에게 보여주지 말고 내부에서 사용할 것을 권장) - 에러 공통 처리 컨트롤러의 기능을 변경하고 싶으면, 'ErrorController'인터페이스를 상속받아서 구현하거나,
BasicErrorController를 상속받아서 기능을 추가하면 된다.
- 정리
반응형
'Spring' 카테고리의 다른 글
스프링 MVC 2 - API 예외 처리 - 스프링 부트 기본 오류 처리 (0) | 2022.09.28 |
---|---|
스프링 MVC 2 - API 예외 처리 - 시작 (0) | 2022.09.28 |
스프링 MVC 2 - 스프링 부트 - 오류 페이지2 (0) | 2022.09.28 |
스프링 MVC 2 - 스프링 부트 - 오류 페이지1 (0) | 2022.09.27 |
스프링 MVC 2 - 서블릿 예외 처리 - 인터셉터 (0) | 2022.09.27 |
댓글
이 글 공유하기
다른 글
-
스프링 MVC 2 - API 예외 처리 - 스프링 부트 기본 오류 처리
스프링 MVC 2 - API 예외 처리 - 스프링 부트 기본 오류 처리
2022.09.28 -
스프링 MVC 2 - API 예외 처리 - 시작
스프링 MVC 2 - API 예외 처리 - 시작
2022.09.28 -
스프링 MVC 2 - 스프링 부트 - 오류 페이지2
스프링 MVC 2 - 스프링 부트 - 오류 페이지2
2022.09.28 -
스프링 MVC 2 - 스프링 부트 - 오류 페이지1
스프링 MVC 2 - 스프링 부트 - 오류 페이지1
2022.09.27