서블릿 예외 처리

WAS(여기까지 전파) <- 필터 <- 서블릿 <- 인터셉터 <- 컨트롤러(예외발생)

response.sendError(HTTP 상태 코드)
response.sendError(HTTP 상태 코드, 오류 메시지)

필터의 예외 처리 적용보다는 인터셉터는 경로 정보로 중복 호출 제거( excludePathPatterns("/error-page/") )**

  1. WAS(/error-ex, dispatchType=REQUEST) -> 필터 -> 서블릿 -> 인터셉터 -> 컨트롤러
  2. WAS(여기까지 전파) <- 필터 <- 서블릿 <- 인터셉터 <- 컨트롤러(예외발생)
  3. WAS 오류 페이지 확인
  4. WAS(/error-page/500, dispatchType=ERROR) -> 필터(x) -> 서블릿 -> 인터셉터(x) -> 컨트롤러(/error-page/500) -> View

스프링 부트 - 오류 페이지1

이제 오류가 발생했을 때 오류 페이지로 /error 를 기본 요청한다. 스프링 부트가 자동 등록한 BasicErrorController 는 이 경로를 기본으로 받는다.

개발자는 오류 페이지만 등록

BasicErrorController 는 기본적인 로직이 모두 개발되어 있다. 개발자는 오류 페이지 화면만 BasicErrorController 가 제공하는 룰과 우선순위에 따라서 등록하면된다. 정적 HTML이면 정적 리소스, 뷰 템플릿을 사용해서 동적으로 오류 화면을 만들고 싶으면 뷰 템플릿 경로에 오류 페이지 파일을 만들어서 넣어두기만 하면 된다.

뷰 템플릿이 정적 리소스보다 우선순위가 높고, 404, 500처럼 구체적인 것이 5xx처럼 덜 구체적인 것 보다우선순위가 높다

resources/static/error/404.html
resources/static/error/4xx.html

resources/templates/error/500.html
resources/templates/error/5xx.html

// 적용 대상이 없을 때 뷰 이름( error )
resources/templates/error.html

application.properties

never : 사용하지 않음 always :항상 사용 on_param : 파라미터가 있을 때 사용

그런데 이 부분도 개발 서버에서 사용할 수 있지만, 운영 서버에서는 권장하지 않는다.