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가 호출되어 출력되는것입니다.

 

+ Recent posts