Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- jpa
- 김영한
- 인프런
- Proxy
- Android
- kotlin
- Exception
- http
- springdatajpa
- QueryDSL
- JPQL
- Spring Boot
- SpringBoot
- 백준
- transaction
- spring
- 스프링
- 스프링 핵심 기능
- 자바
- 알고리즘
- java
- Thymeleaf
- 스프링 핵심 원리
- db
- Servlet
- Greedy
- JDBC
- 그리디
- pointcut
- AOP
Archives
- Today
- Total
개발자되기 프로젝트
[예외처리] Servlet 예외처리 본문
1. Servlet의 예외처리 방법
- Exception (예외) : Exception이 WAS까지 날라감.
- response.sendError(HTTP 상태 코드, 오류 메시지)
2. Exception(예외)
- 자바 직접 실행
- 자바의 메인 메서드를 직접 실행하는 경우 main 이라는 이름의 쓰레드가 실행됨.
- 실행 도중에 예외를 잡지 못하고 처음 실행한 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를
- 남기고 해당 쓰레드는 종료된다.
- 웹 애플리케이션
- 웹 애플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다.
- 애플리케이션에서 예외가 발생했는데,
- 어디선가 try ~ catch로 예외를 잡아서 처리하면 아무런 문제가 없다.
- 그런데 만약에 애플리케이션에서 예외를 잡지 못하고,
- 서블릿 밖으로 까지 예외가 전달되면 어떻게 동작할까?
- WAS(여기까지 전파) <- 필터 <- 서블릿 <- 인터셉터 <- 컨트롤러(예외발생)
- 결국 톰캣 같은 WAS 까지 예외가 전달된다.
- WAS는 예외가 올라오면 어떻게 처리? 한번 테스트 해보자.
2.1 Test
- 스프링 부트가 제공하는 기본 예외 페이지는 꺼두자
- application.properties
- server.error.whitelabel.enabled=false
- ServletExceptionController
@Slf4j
@Controller
public class ServletExceptionController {
@GetMapping("/error-ex")
public void errorEx(){
throw new RuntimeException("예외 터짐!");
}
}
- 개발자 모드로 확인하면 HTTP 상태 코드가 500인 것을 확인할 수 있음.
- Exception 의 경우 서버 내부에서 처리할 수 없는 오류가 발생한 것으로 판단하여
- HTTP 상태 코드 500을 반환
- 즉 WAS는 Exception이 발생하면 서버 내부 문제로 판단 -> 500에러
- Resource가 없는 경우 -> 400에러
3. response.sendError(HTTP 상태 코드, 오류 메시지)
- 오류가 발생했을 때 HttpServletResponse 가 제공하는 sendError 라는 메서드를 사용 가능.
- 서블릿 컨테이너에게 오류가 발생한 것을 전달할 수 있음
- 이 메서드를 사용하면 HTTP 상태 코드와 오류 메시지도 추가 가능.
- response.sendError(HTTP 상태 코드)
- response.sendError(HTTP 상태 코드, 오류 메시지)
@GetMapping("/error-404")
public void error404(HttpServletResponse response) throws IOException {
response.sendError(404, "404 404 404 404");
}
@GetMapping("/error-500")
public void error500(HttpServletResponse response) throws IOException {
response.sendError(404, "500 500 500 500 500");
}
- sendError 흐름
- WAS(sendError 호출 기록 확인) <- 필터 <- 서블릿 <- 인터셉터 <- 컨트롤러(response.sendError())
- response.sendError() 를 호출하면 response 내부에는 오류가 발생했다는 상태를 저장
- 서블릿 컨테이너는 고객에게 응답 전에 sendError() 가 호출되었는지 확인
- 호출되었다면 설정한 오류 코드에 맞추어 기본 오류 페이지를 보여준다.
4. GitHub : Exception
'인프런 > [인프런] 스프링 MVC 2' 카테고리의 다른 글
[예외] Servlet 예외처리 - 오류 페이지 작동 원리 (0) | 2021.09.27 |
---|---|
[예외] Servlet 예외처리 - 오류화면 등록 (0) | 2021.09.27 |
[로그인] ArgumentResolver 활용 (0) | 2021.09.27 |
[로그인] Spring Interceptor - 인증 체크 (0) | 2021.09.27 |
[로그인] Spring Interceptor - 요청 로그 (0) | 2021.09.26 |
Comments