프로젝트 생성#

서블릿 예외 처리#
순수 서블릿 컨테이너가 에러를 처리하는 방법
Exceptionresponse.sendError
자바를 직접 실행할때, main()에서 에러를 던지면 해당 쓰레드는 종료됨 웹 어플리케이션은 Was 까지 던져지고, 해당 화면을 보게됨

서블릿은 Exception이 서블릿 밖으로 전달되거나, response.sendError()가 호출 되었을 때 상황에 맞게 오류 처리 기능을 제공
작동원리
- 예외가 발생해서 WAS까지 전파
- WAS는 오류 페이지 경로를 찾아서 내부에서 호출 (오류 페이지 경로로 다시 요청됨)
Was는 오류 페이지를 요청하면서 오류 정보를 request의 attribute에 추가해서 넘겨줌
서블릿은 클라이언트로부터 발생한 정상 요청인지, 아니면 오류 페이지 출력을 위한 내부 요청인지 구분하기 위해 `DispatcherType` 정보 제공
DispatcherType
REQUEST: 클라이언트 요청ERROR: 에러 요청FORWARD:RequestDispatcher.forward(request,response)Include: 서블릿이나 다른 서블릿에서 JSP 결과 포함할때ASYNC: 비동기 호출
스프링 부트 예외 처리#
오류가 발생했을 때, /error를 요청.
스프링 부트가 자동 등록한 BasicErrorController는 이 경로를 기본으로 받음
개발자 할일
BasicErrorController는 기본적인 로직이 모두 개발되어 있으므로,
오류 페이지 화면만 등록하면 됨
/resorces/templates/error/...에 오류 페이지 파일을 넣어두기만 하자
4xx.html은 모든 400번대 에러를 처리
BasicErrorController가 제공하는 정보
timestamp: Sun Feb 12 15:15:03 KST 2023
path: /error-ex
status: 500
message: null
error: Internal Server Error
exception: null
errors: null
trace: null