우리는 사이트를 이용할때 404에러 뜨면서 특정 에러페이지로 이동하는것을 흔히 볼 수 있다.
ErrorResolver 가 그러한 화면을 처리해줄수있다.
우선 ErrorResolver class 파일을 만들어주고 SimpleMappingExceptionResolver을 상속해준다
package com.resolver.ErrorResolve; //해당경로에 만들었다.
public class ErrorResolver extends SimpleMappingExceptionResolver {
@Override
protected void logException(Exception ex, HttpServletRequest request) {
System.out.println("ErrorException :: "+ex);
}
}
해당 클래스를 빈에 불러와 설정하여 사용하면 된다.
<bean class="com.resolver.ErrorResolver">
<property name="defaultErrorView">
<value>error/defaultPage</value>
</property>
<property name="defaultStatusCode">
<value>404</value>
</property>
<property name="exceptionMappings">
<props>
<prop key="java.lang.NullPointerException">error/nullpointPage</prop>
</props>
</property>
<property name="statusCodes">
<props>
<prop key="error/nullpointPage">999</prop>
</props>
</property>
</bean>
- defaultErrorView : 디폴트로 불러올 에러 화면 파일 위치를 작성하면된다. (파일 위치는 ViewResolver가 설정 되어있다면 해당 경로로 맞추어 작성하면 된다.)
- defaultStatusCode : 디폴트 에러 코드를 설정한다.
- exceptionMappings : 키값으로 여러개의 에러를 맵핑 가능하며 마찬가지로 해당하는 페이지를 셋팅해주면 된다.
- statusCodes : 맵핑된 페이지에 에러코드를 설정한다. 에러 경로를 키 값으로 작성한다.
컨트롤 단에서 테스트할 페이지를 만들어서 호출해보면된다. (물론, 에러 jsp도 만들어 빈에 작성한 위치에 둔다.)
@RequestMapping(value = "errorTest")
public String errorTest(HttpServletRequest request, HttpServletResponse respose) throws Exception {
throw new NullPointerException();
//throw new Exception("defalut");
}
따로 찾아봤는데 Controller를 새로 만들어 @ExceptionHandler로 맵핑해 사용하면 될거같다.
@Controller
public class ExceptionController {
@ExceptionHandler({NullPointerException.class, FileNotFoundException.class})
public String npError(Exception e) {
return "error";
}
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) // 요청값바꾸기
public String commonError(Exception e) {
return "error";
}
참고자료들___
(참고) Java Config로 Exception Resolver 설정하기
(참고) Exception 예외처리