스프링/4. 스프링 MVC-2

65. 스프링 부트 오류페이지

sdafdq 2023. 9. 10. 20:22

우리가 지금까지 오류페이지를 등록할 때,

 

에러페이지 컨트롤러를 따로 만들고,

그걸 

@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 뷰 이름으로 찾는다.