Spring Error Page
404, 500 등 에러가 발생했을 때 처리할 페이지를 만드는 방법을 알아보자.
web.xml에 URL 매핑
에러가 발생했을 때 어떤 URL로 redirect 할 것인지 web.xml에 작성할 수 있다. Servlet 버전 3.0 이상이어야 이용 가능한데, 요즘엔 걱정 안해도 될 것 같다. 혹시라도 그 아래 버전을 사용하고 있다면 다른 방법을 찾아보자.
아래처럼 error-page 태그 하위에 어떤 에러인지, 어디로 매핑할지를 작성할 수 있다.
<error-page>
<location>/errors</location>
</error-page>
위와 같이 작성하면 default로 사용할 에러 처리 URL을 만든 것이다.
만약 404, 500을 따로 처리하고 싶다면 아래처럼 에러 종류와 함께 error-page 태그를 여러개 작성하면 된다.
<!-- Error -->
<error-page>
<error-code>404</error-code>
<location>/error/no-resource</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/server-error</location>
</error-page>
<error-page>
<location>/error</location>
</error-page>
404 에러가 발생하면, http://도메인/error/no-resource에 요청을 보내고, 500 에러가 발생하면, http://도메인/error/server-error로 요청을 보낸다.
만약 그 외에 다른 에러면 http://도메인/error로 요청을 보낸다.
Controller
Error 컨트롤러라고 별 다를 것 없다. 평상시 만들었던 Controller처럼 URL 별로 request mapping 메서드를 작성하고, view로 보내주면 된다.
@Controller
@RequestMapping(path = "/error")
public class ErrorController {
@GetMapping
public String defaultError() {
return "error/default";
}
@GetMapping("/no-resource")
public String noResource() {
return "error/noResource";
}
@GetMapping("/server-error")
public String serverError() {
return "error/serverError";
}
}
View
위에 작성한 ErrorController에서 내보내는 문자열에 따라 view resolver가 view를 사용자에게 내보내므로, 그에 맞게 html이나 jsp같은 view 리소스를 작성하면 된다.
예를 들어, error 폴더 밑에 noResource.html을 작성하면, 404 에러가 발생했을 때 해당 html이 응답으로 사용자에게 보여질 것이다.