WAS의 구동 중 가장 흔한 에러와 관련된 HTTP 상태 코드는 '404'와 '500' 에러 코드 입니다.
500 메시지는 'Internal Server Error'이므로 @ExceptionHandler를 이용해서 처리되지만,
잘못된 URL을 호출할 때 보이는 404 에러 페이지의 경우는 조금 다르게 처리하는 것이 좋습니다.
서블릿이나 JSP를 이용했던 개발 시에는 web.xml을 이용해서 별도의 에러 페이지를 지정할 수 있습니다.
에러 발생 시 추가적인 작업을 하기는 어렵기 때문에 스프링을 이용해서 404와 같이
WAS 내부에서 발생하는 에러를 처리하는 방식을 알아야 합니다.
스프링 MVC의 모든 요청은 DispatcherServlet을 이용해서 처리되므로 404에러도 같이 처리할 수 있도록
web.xml을 수정합니다.
<!-- web.xml -->
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
// 추가
<init-param>
<param-name>throwExceptionIfNoHandlerFound</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
그리고 org.zerock.exception.CommonExceptionAdvice에는 다음과 같은 메서드를 추가합니다.
@ExceptionHandler(NoHandlerFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handle404(NoHandlerFoundException ex) {
return "custom404";
}
리턴값은 custom404이기 때문에 view도 만들겠습니다.
<!-- coustom404.jsp -->
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>해당 URL은 존재하지 않습니다.</h1>
</body>
</html>
이제 존재하지 않는 URL을 호출하면 custom404.jsp가 호출되어 출력되는것입니다.