페이지를 사용한 에러 처리 예제
1. 먼저 에러가 발생되는 페이지인 readParameter.jsp 페이지를 코딩하고 저장한다.
- 2번 줄에 <% page errorPage = "/error/viewErrorMessage.jsp" %> 에 에러가 발생하면 에러 페이지를 보여줄 경로를 적어준다.
경로를 정확히 하지 않으면 내가 만든 errorPage가 아닌 원래 errorPage가 나올 것이다.
- 그럼 10번 줄에서 일부러 오타를 내보고 실행을 시켜보자. toUpperCase 이렇게 뒤에 괄호를 빼고 실행을 시켜보자.
2. 에러페이지인 viewErrorMessage.jsp 를 /error/폴더 밑에다가 작성하도록 하자.
3. 웹 브라우저를 실행시켜 결과를 확인해보자.
막상 실행을 시켜보면 에러 페이지에 의한 에러 처리가 일어나지 못함을 볼 수 있다.
톰캣의 버전에 따라 결과가 다를 수 있다. 이것은 컨테이너에 따라 에러 페이지에 의한 에러 처리를 지원하지 않을 수 있기 때문이다.
실제로 현재의 에러 처리는 에러 페이지를 사용하지 않고 에러 코드별 처리나 에러 종류별 처리를 사용한다.
에러가 한 가지 종류만 발생하는 것이 아니기 때문이다. 이번엔 에러 코드별 처리에 대해 알아보자.
- 우리가 가장 많이 사용하는 웹브라우저 에러 코드
404 : Not Fount, 문서를 찾을 수 없음. 이 에러는 클라이언트가 요청한 문서를 찾지 못한 경우에 발생. (URL 제대로 입력 되었는지 확인)
500 : Internal Server Error. 이 에러는 웹 서버가 요청사항을 수행할 수 없을 경우에 발생. (대부분이 코딩 에러)
에러 코드별 처리를 어떻게 해야 할까? 답은 web.xml 이다.
[] 에러 코드별 에러 처리 예제
1. 먼저 에러를 코드별로 처리하는 web.xml에 작성한다.
<error-page>
<error-code>에러 코드</error-code>
<location>에러 페이지의 URI</location>
</error-page>
편의상, 500 에러가 발생했을 때 요청되는 페이지와 404 에러가 발생했을 때 요청되는 페이지를 같은 곳으로 처리했다.
2. 에러 페이지인 viewErrorMessage.jsp 페이지를 작성한다.
- response.setStatus(HttpServletResponse.SC_OK);
이 코드는 현재 페이지가 정상적으로 응답되는 페이지임을 지정하는 코드이다.
이렇게 지정하지 않으면 웹 브라우저에는 404 응답코드가 전달되며, 이 경우 웹브라우저는 자체적으로 404 에러일 때 보여주는 화면을 출력한다.
따라서 우리가 지정한 에러 메세지의 출력 결과가 웹 브라우저에 그대로 출력되도록 하기 위해서는 이렇게 지정해주어야 한다.
일부러 에러를 발생시켜서 실행시키면, 우리가 지정한 에러 메세지가 출력되는 것을 확인할 수 있다.
똑똑한 미나의 에러처리방법 ^__________^ V
이왕 에러페이지 시작한 김에 예외 페이지까지 함께 살펴보자.
[] 예외 종류별 에러 페이지 지정하기.
1. web.xml 작성
JSP 페이지에서 발생하는 예외 종류에 따라서 에러 페이지를 지정할 수 있다.
앞에서 살펴봤던 에러 코드별 에러 페이지 지정 방법과 거의 같은 방법으로 지정할 수 있는데,
다음과 같이 <error-code>태그 대신에 <exception-type> 태그를 사용하면 된다.
2. 에러를 발생시킬 코드 readParameter2.jsp 작성
3. /error/errorNullPointer.jsp 작성
이 페이지는 앞서 작성한 readParameter.jsp 와 동일하며 에러페이지만 지정하지 않았다. 즉 readParameter.jsp의 2번째 줄이 없다.
따라서 readParameter2.jsp를 실행할 때 name 파라미터를 전달하지 않으면 NullPointerException이 발생하게 되는데,
이 때 web.xml 파일에 이 예외에 대한 에러 페이지를 앞에서처럼 지정했다면 다음과 같은 결과가 출력 될 것이다.
지금까지 에러 페이지를 지정하는 3가지 방법에 대해서 살펴봤었는데, 에러 페이지를 선택할 때에는 다음과 같은 우선 순위를 따르게 된다.
1. Page 디렉티브의 errorPage 속성에서 지정한 에러 페이지를 보여준다.
2. JSP 페이지에서 발생한 예외 타입이 web.xml 파일의 <exception-type>에서 지정한 예외 타입과 동일한 경우 지정한 에러 페이지를 보여준다.
3. JSP 페이지에서 발생한 에러 코드가 web.xml파일의 <error=code>에서 지정한 에러 코드와 동일한 경우 지정한 에러 페이지를 보여준다.
4. 아무것도 해당되지 않을 경우, 톰캣 엔진이 제공하는 기본 에러 페이지를 보여준다.
똑똑한 미나의 에러처리 끝 ^_________^*
출처 - http://blog.naver.com/PostView.nhn?blogId=mnkongju&logNo=90048184405
'Framework & Platform > Spring' 카테고리의 다른 글
spring - @MVC 확장 포인트 (0) | 2012.08.22 |
---|---|
spring - @ModelAttribute와 @SessionAttributes의 이해와 한계 (0) | 2012.08.22 |
Spring - REST Supports (0) | 2012.06.08 |
Spring - @ResponseBody 응답 시 한글 인코딩(깨짐) 문제 (3) | 2012.06.08 |
Spring - ajax 연동 및 json 응답 (0) | 2012.06.08 |