메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 JSP & Servlet

뇌를 자극하는 JSP & Servlet 질의응답 게시판입니다.

[5장] 예외 처리 페이지의 우선순위에 대한 질문

2012-07-14

|

by 권혁수

2204

//예제는 다운로드 받아서 사용했습니다.

5장에서 예외 처리 공부하다가 우선순위가 매우 헷갈려서 질문올립니다.
제가 읽은 바로 에러 페이지의 우선순위는
1. page의 errorPage 속성으로 지정한 페이지
2. web.xml의 error-type으로 지정한 페이지
3. web.xml의 error-code로 지정한 페이지
로 알고 있습니다.

그런데 예제를 하다보니 try-catch로 지정한 에러 처리들이 헷갈리네요.
다음 경우는 더하기 예제들에 고의로 NumberFormatException 을 일으킨 경우입니다.

1. catch에서 forward메소드를 쓴 경우
①Adder.jsp는 web.xml에서 error-code로 지정한 ServerInternalError.jsp가 실행됩니다.
(code우선, web.xml의 error-page로 지정한 NumberFormatException 무시?)
반면
②new-adder는 try-catch에서 지정한 data-error-servlet이 실행됩니다.
(try-catch우선)

2. catch에서 자체적으로 처리한 경우
Adder_old.jsp는 catch의 내용을 출력합니다.
(try-catch우선)

정리해보면 이렇네요
1.① forward메소드가 무시되어 DataError.jsp를 실행하지 않고 또 error-page로 지정한 NumberFormatError.jsp를 무시하고
error-code로 지정한 ServerInternalError.jsp를 실행
1.② forward메소드가 적용되어 data-error-servlet 실행
1.* 1.①번에 errorPage="DataError.jsp" 지정하면 DataError.jsp실행
2. 그냥 catch실행
2.* 2번에 errorPage="DataError.jsp" 지정해도 catch실행

이렇게 되니 뭐가 먼저인지 너무 헷갈립니다. 질문을 정리해보면
A. 1.①에서 code를 최우선으로 실행됐는데 어떻게 된건가요? forward는 무시하더라도 page가 우선시되는것 아닌가요?
B. 1.①, 1.②를 보면 서블릿은 forward를 무시 안했는데 jsp도 결국 서블릿이 되는건데 왜 둘의 처리 결과가 다른가요? 서블릿도 ServerInternalError.jsp를 실행해야 하는 것 아닌가요?
C. 2.*에서 errorPage="DataError.jsp"를 지정해도 catch에서 지정한 출력만 출력하고 끝나는데요. 1.*처럼 최우선 순위를 가지는 errorPage의 속성을 따라서 DataError.jsp가 실행되야 하는것 아닌가요?

읽어주셔서 감사합니다.
댓글 입력
자료실