💻본 포스팅은 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 김영한'님의 강의를 듣고 작성되었습니다.
목차
1. 서블릿 예외처리 방식
2. Exception(예외)
서블릿 예외처리 방식
서블릿은 다음 2가지 방식으로 예외 처리를 지원한다.
- Exception(예외 발생) 시 처리 지원
- response.sendError(HTTP 상태코드, 오류메시지)시 처리 지원
- 예외가 발생하진 않았지만 HttpServletResponse가 제공하는 sendError( ) 메서드를 사용해서 오류를 서블릿 컨테이너에게 전달 해준다.
- 당장에 예외가 발생하는 것은 아니지만 서블릿 컨테이너에게 오류가 발생했다는 것을 전달할 수 있다.
- 이 메서드를 사용하면 HTTP 상태 코드와 오류 메시지 추가도 할 수 있다.
Exception(예외)
자바 직접 실행
- 자바의 메인 메서드를 직접 실행하게 될 땐 main( )이라는 이름의 쓰레드가 실행된다.
- 실행 도중에 이 예외를 잡지 못하고 처음 실행한 main( ) 메서드를 넘어서 예외가 던져지게 되면, 예외 정보를 남기고 해당 쓰레드는 종료하게 된다.
웹 애플리케이션
Exception(예외)
- 웹 애플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되며 서블릿 컨테이너 안에서 실행된다.
- 애플리케이션에서 예외가 발생했다면 try ~ catch로 예외를 잡아 처리할 땐 문제가 없지만 애플리케이션에서 예외를 잡지 못하고 서블릿 밖으로까지 예외가 전달된다면 아래와 같이 동작하게 된다.
서블릿 밖으로 예외가 전달된 경우
WAS(여기까지 전파) <- 필터 <- 서블릿 <- 인터셉터 <- 컨트롤러(예외 발생!!)
- 결국 WAS까지 예외가 전달되게 되고 WAS에 예외가 오게되면 톰캣이 기본으로 제공하는 오류 화면을 보게 된다.
response.sendError(HTTP 상태 코드, 오류 메시지)
- 오류 발생 시 HttpServletResponse가 제공하는 sendError( ) 라는 메서드를 사용해도 된다.
- sendError( )는 호출한다고 당장 예외가 발생하진 않지만 서블릿 컨테이너에게 오류가 발생했다는 점을 전달해준다.
- 이 메서드를 사용하면 HTTP 상태코드와 오류 메시지를 추가할 수 있다.
- response.sendError(HTTP 상태 코드, 오류 메시지)
- response.sendError(HTTP 상태 코드)
sendError( )의 흐름
WAS(sendError 호출 기록 확인) <- 필터 <- 서블릿 <- 인터셉터 <- 컨트롤러 (response.sendError())
- response.sendError( )를 호출하면 response 내부에 오류가 발생했다는 상태를 저장해둔다.
- 서블릿 컨테이너는 고객에게 응답 전에 response에 sendError( )가 호출되었는지 확인한다.
- 호출되었다면 설정 오류 코드에 맞춰 기본 오류 페이지를 보여준다(따로 설정한 것이 있다면 그 페이지를 보여줄 수도 있다. -> 따로 컨트롤러 처리해주면 된다.)
- 호출되지 않았다면 그대로 정상 처리 진행하면 된다.
'Back-End > Spring' 카테고리의 다른 글
[Spring MVC2][예외 처리와 오류 페이지] - 필터와 인터셉터 (0) | 2022.05.28 |
---|---|
[Spring MVC2][예외 처리와 오류 페이지] - 서블릿 예외 처리를 사용해서 오류 화면을 제공해보자 (0) | 2022.05.28 |
[Spring MVC2][로그인 처리] - 스프링 인터셉터(공통의 관심사 해결 방안) (0) | 2022.05.20 |
[Spring MVC2][로그인 처리] - 서블릿 필터(공통의 관심사 해결 방안) (0) | 2022.05.19 |
[Spring MVC2][로그인 처리] - 쿠키와 세션 (0) | 2022.05.17 |