우리가 지금까지 오류페이지를 등록할 때,
에러페이지 컨트롤러를 따로 만들고,
그걸
@Component
public class WebServerCustomizer implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {
@Override
public void customize(ConfigurableWebServerFactory factory) {
ErrorPage errorPage404 = new ErrorPage(HttpStatus.NOT_FOUND, "/error-page/404");
ErrorPage errorPage500 = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error-page/500");
ErrorPage errorPageEx = new ErrorPage(RuntimeException.class, "/error-page/500");
factory.addErrorPages(errorPage404, errorPage500, errorPageEx);
}
}
이런 식으로 기다란 인터페이스를 구현하면서 등록을 해 줬다.
스프링 부트는 이런 것들을 자동으로 해준다.
우리가 할 일은 그냥, 오류 페이지들(템플릿)만 만들어 주면 된다.
templates/error 경로에 만들어 주면된다.
또 파일 이름도
4xx.html
이렇게 하면 400번대 오류이다.
404.html
이렇게 하면 딱 404번 오류일 때 호출된다. 구체적이니까.
500.html
500번 호출 (참고로 예외던지는 것도 500에 해당됨.)
우리가 해준 일은 그저
templates/error
에 코드.html 로 페이지를 만들어 준 것 밖에 없는데
오류 코드에 따라 자동으로 저 템플릿이 호출된다.
이렇게 될 수 있는 이유는,
스프링 부트가 ErrorPage를 자동으로 /error를 경로로 기본 오류 페이지로 지정한다. new ErrorPage("/error")
그리고, 스프링 컨테이너가 시작될 때,
BasicErrorController라는 컨트롤러를 등록시켜 준다.
이건 /error에 등록한 것들을 매핑해서 처리해주는 컨트롤러이다.
템플릿을 찾는 우선순위는
templates/error
뷰 템플릿
static/error
정적 리소스
그 다음 아예 폴더가 없으면 error.html 뷰 이름으로 찾는다.
'스프링 > 4. 스프링 MVC-2' 카테고리의 다른 글
67. API 예외처리 (0) | 2023.09.12 |
---|---|
66. BasicErrorController가 제공하는 정보들 (0) | 2023.09.10 |
64. 서블릿 예외처리 인터셉터 (0) | 2023.09.10 |
63. 서블릿 예외처리 필터 (0) | 2023.09.10 |
62. 오류 화면 커스텀 (0) | 2023.09.10 |