티스토리 뷰

프로그래밍/Web

Spring Error Page

국윤창 2018. 8. 9. 17:17

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이 응답으로 사용자에게 보여질 것이다.



참고

http://www.baeldung.com/custom-error-page-spring-mvc

댓글
댓글쓰기 폼