서블릿은 다음 2가지 방식으로 예외 처리를 지원한다.
1. Exception(예외) - 500처리
2. response.sendError(HTTP 상태코드, 오류 메시지)
->직접 오류메시지 담아서 처리
1.Exception
먼저 스프링부트가 제공하는 기본 예외페이지를 꺼둔다.
- application.properties
server.error.whitelabel.enabled=false
package hello.exception.servlet;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Slf4j
@Controller
public class ServletExController {
@GetMapping("/error-ex")
public void errorEx(){
throw new RuntimeException("예외발생!");
}
}
실행 결과:
HTTP Status 500 – Internal Server Error
:서버 내부에서 처리할 수 없는 오류
exception이 WAS까지 전달되면 서버에서 처리할 수 없는 예외로 간주하고 500으로 상태코드를 만들어서 반환해주고 페이지를 뿌려준다.
exception터진건 무조건 500오류로 나간다.
response.sendError(HTTP 상태코드, 오류메시지)
: 오류가 발생할때 HttpServletResponse가 제공하는 sendError라는 메서드 사용할 수 있다.
@GetMapping("/error-404")
public void error404(HttpServletResponse response) throws IOException {
response.sendError(404, "404 오류!");
}
@GetMapping("/error-500")
public void error500(HttpServletResponse response) throws IOException {
response.sendError(500);
}
sendError흐름
WAS(sendError 호출 기록 확인) <- 필터 <- 서블릿 <- 인터셉터 <- 컨트롤러 |
response.sendEroor()호출하면 response내부에는 오류가 발생했다는 상태를 저장해둔다.
그리고 서블릿 컨테이너는 고객에게 응답전에 response에 sendError()가 호출되었는지 확인한다.
만약 호출되었다면 설정한 오류고드에 맞추어 기본 오류페이지를 보여준다.
*본 게시물은 인프런 스프링MVC2편 - 백엔트 웹 개발 활용 기술 강의를 토대로 작성했습니다.
'Study > SpringBoot' 카테고리의 다른 글
[SpringBoot] 문제해결: template might not exist or might not be accessible by any of the configured Template Resolvers (1) | 2021.11.18 |
---|---|
[SpringBoot]@Mapper (0) | 2021.10.10 |
[Spring Boot]스프링 인터셉터 (0) | 2021.09.03 |
[Spring Boot]서블릿 필터란? (0) | 2021.09.01 |
로그인처리 - 세션 방식 (0) | 2021.08.31 |