스프링에서 에러페이지 보여주기
web.xml
<error-page>
<error-code>400</error-code>
<location>/error/error</location>
</error-page>
<error-page>
<error-code>401</error-code>
<location>/error/error</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/error/error</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/error/error</location>
</error-page>
<error-page>
<error-code>405</error-code>
<location>/error/error</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/error</location>
</error-page>
<error-page>
<error-code>503</error-code>
<location>/error/error</location>
</error-page>
</web-app>의 바로 위에 이렇게 넣어주고 Controller를 만들어주면 된다.
에러페이지가 하나 뿐인 것 같다고?
Controller
@Controller
@AllArgsConstructor
@Log4j
public class ErrorController {
@RequestMapping(value = "/error/error", method = RequestMethod.GET)
public String renderErrorPage(Model model, HttpServletRequest request) {
String errorMsg = "";
int httpErrorCode = getErrorCode(request);
switch (httpErrorCode) {
case 400: {
errorMsg = "잘못된 요청입니다.";
break;
}
case 401: {
errorMsg = "인증에 실패하였습니다.";
break;
}
case 403: {
errorMsg = "접근 권한이 없습니다.";
break;
}
case 404: {
errorMsg = "요청하신 페이지를 찾을 수 없습니다.";
break;
}
case 500: {
errorMsg = "서버 오류입니다.";
break;
}
}
model.addAttribute("error", httpErrorCode);
model.addAttribute("msg", errorMsg);
log.info("status_code : " + request.getAttribute("javax.servlet.error.status_code"));
log.info("exception_type : " + request.getAttribute("javax.servlet.error.exception_type"));
log.info("message : " + request.getAttribute("javax.servlet.error.message"));
log.info("request_uri : " + request.getAttribute("javax.servlet.error.request_uri"));
log.info("exception : " + request.getAttribute("javax.servlet.error.exception"));
log.info("servlet_name : " + request.getAttribute("javax.servlet.error.servlet_name"));
return "/error/error";
}
private int getErrorCode(HttpServletRequest request) {
return (Integer) request.getAttribute("javax.servlet.error.status_code");
}
}
Switch Case 문으로 분기해주면 된다.
※ error message는 null이 뜨는데 그 이유를 아직 잘 모르겠다.
404에러의 경우에는
<init-param>
<param-name>throwExceptionIfNoHandlerFound</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
위와 같이 error-page로 처리해주지 않고 <servlet></servlet> 안에서 처리하기도 한다.
서블릿 컨테이너에서 처리하느냐 아니면 스프링에서 처리하느냐의 차이인 것 같다.
스프링부트는 ErrorController를 자체적으로 제공하므로 스프링보단 커스텀하기가 한결 편하다.
이 글은 스프링 레거시를 위한 것이다.
https://goodteacher.tistory.com/413
[spring]spring 에서의 error page 설정
error 페이지는 예상치 못했던 클라이언트의 요청에 대해 WAS가 응답하는 결과라고 볼 수 있다. 하지만 WAS가 보여주는 error 페이지는 너무나 흉찍하고 여기서 보여지는 error 정보들을 헤커의 먹이
goodteacher.tistory.com
jsp 공통 에러 페이지 처리 (Servlet Exception Handling)
0. 들어가기 전에.. - 해당 내용은 Spring Framework 3.x기반으로 작성 - 모델 2 서블릿도 비슷할 거라 생각은 되지만... - 바쁘다. 본문만 보자. 1. 공통 에러 페이지 처리 (Servlet Exception Handling) 1..
jhgan.tistory.com
'BE > Spring' 카테고리의 다른 글
[Logging Library] Logback 또는 Log4j2 사용법 (0) | 2022.10.13 |
---|---|
Authentication Entry Point 와 Access Denied Handler 그리고... (0) | 2022.03.20 |
Spring Security 커스텀 시 고려사항 (0) | 2022.03.20 |
@ControllerAdvice @ExceptionHandler (0) | 2022.03.20 |
@DateTimeFormat 과 @JsonFormat (0) | 2022.03.14 |