JSP 에러 처리를 위한 필요 요소
JSP 페이지 수행 중 비정상적 동작 수행으로 인해 페이지 내부에서 에러가 발생했을 때 JSP 페이지 내부에 해당 에러를 처리하기 위한 아무런 조치가 없을 경우 웹 서버에서 에러 관련 사항을 웹 브라우저를 통해 출력하게 된다.
일반 사용자의 경우 기본 에러 관련 화면은 대처하기 어렵기 때문에 상황에 맞는 적절한 대응 안내를 사용자에게 해줄 수 있는 새로운 에러 페이지를 제작하는 것이 바람직하다.
응답 상태 코드
JSP 에러 처리에 핵심적인 요소인 응답 상태 코드는 웹 서버가 요청에 대한 응답을 전송할 때 HTTP 응답 메시지에 포함되는 요소 중 하나로 현재 전송하려는 응답에 대응되는 요청의 처리 결과를 나타내는 코드이다.
즉 웹 클라이언트의 요청이 잘 처리되어 있는지, 어떤 문제가 발생했는지에 대한 내용을 의미하는 약속된 코드라고 불 수 있다.
- 응답 상태 코드는 웹 서버의 응답에 함께 첨부된다.
응답 상태 코드는 문제 발생에 따라 여러가지로 분류되어 있으며 일반적으로 많이 사용되는 응답 상태 코드의 값들은 다음과 같다.
200 : OK : 요청이 성공적으로 처리됨
301 : Moved Permanently : URL이 옮겨짐
307 : Temporary Redirect : 임시로 리다이렉트됨
400 : Bac Request : 잘못된 요청
401 : Unauthorized : 허용되지 않은 접근
403 : Forbidden : 요청에 대한 수행 거절
404 : Not Found : 요청한 페이지(파일)가 존재하지 않음
405 : Method Not Allowed : 허용되지 않은 메서드
500 : Internal Server Error : 서버 처리 오류
503 : Service Unavailable : 서버 부화로 인해 요청에 대한 응답 불가
위 코드들은 비교적 자주 사용되는 코드이다.
에러가 발생했을 때 생성된 응답 상태 코드를 분석하여 다양한 에러 처리에 활용할 수 있다.
page 지시자
page 지시자는 여러 기능 외에도 JSP 페이지 내 에러 발생시 해당 에러를 처리해줄 다른 JSP 페이지를 지정하는 기능을 제공한다.
errorPage : 현재 JSP 페이지 내 에러 발생시 해당 에러를 처리할 JSP 페이지를 지정
isErrorPage : 현재 JSP 페이지가 에러 처리를 위해 작성된 페이지인지 설정
위 두 속성을 이용하면 JSP 페이지에서 일어나는 많은 에러 관련 사항들을 체계적으로 관리할 수 있다.
사용자의 요청을 처리하는 일반 JSP 페이지에는 기능 수행 중 일어날 수 있는 에러 처리를 위임할 대상 JSP 페이지를 errorPage 속성으로 지정해 놓는다.
그리고 errorPage속성으로 지정된 대상 페이지는 에러를 처리하기 위한 페이지임을 표시해주기 위해 반드시 isErrorPage 속성값을 "true"로 지정해야 한다.
에러 처리 페이지들은 여러 그래픽적인 요소들과 사용자에게 친숙한 화면을 제공함으로써 그 효율성을 더욱 높일 수 있다.
exception 내장 객체
exception 내장객체는 JSP 페이지에서 생성하지 않고 바로 사용할 수 있는 내장객체이므로, JSP 페이지에서 서블릿 형태의 파일 변환 시 객체 생성이 자동으로 이루어 진다.
exception 내장 객체는 java.lang.Thrwoable 클래스 타입의 참조변수이다.
getMessage() : String : 현재 오류에 대한 상세 메시지를 String 타입으로 리턴
printStackTrace() : void : 현재 오류의 StackTrace 정보를 출력
toString() : String : 현재 오류에 대한 간략한 메시지를 String 타입으로 리턴
getMessage와 toString은 JSP 화면 내에 출력되고 ,
printStackTrace는 이클립스내 콘솔에 출력이 된다.
즉 메세지를 String값으로 리턴해주므로, HTML 페이지의 해당 에러를 출력할때 유용하게 사용할 수 있다.
exeption 내장 객체의 메서드를 활용하면 자바 파일 실행 시 발생하는 오류 출력과 같은 기능을 사용할 수 있으므로 어디서 어떤 오류가 발생했는지에 대한 원인 분석에 도움을 줄 수 있다.
그러나 웹 서비스 사용자 입장에서 이러한 에러에 관련된 메시지는 낯설게 받아들일 수 있으므로, 조금 더 사용자 편의를 고려한 '친절한' 에러 페이지가 필요하다.
JSP 에러 페이지 활용
특정 에러에 대응되는 에러 처리 페이지를 등록해두면 지정해둔 에러는 발생된 웹 페이지에 상관없이 동일한 에러 페이지의 내용이 출력되므로 일관성 있는 에러 처리가 가능하다.
응답 상태 코드별 페이지 활용
응답 상태 코드는 JSP 페이지에서 발생한 에러에 따라 다른 값을 가지게 된다.
web.xml 설정 파일을 통해 웹 애플리케이션에서 발생할 수 있는 특정 상태 코드를 등록하여 해당 코드에 대응되는 에러 페이지를 제작해 놓으면 해당 웹 애플리케이션이 속한 모든 웹 페이지에서 미리 등록해둔 상태 코드 발생 시 동이한 에러 페이지가 출력된다.
이는 웹 애플리케이션의 일관적인 에러 관리가 가능해지는 장점을 가진다.
web.xml 파일에 에러 코드를 등록하기 위해서는
<error-page> 태그 내 등록할 에러 코드, 즉 응답 코드를 지정할 <error-code> 태그와 함께 에러 발생시 에러를 처리할 JSP 페이지를 지정하는 <location> 태그를 사용하여 등록한다.
응답 상태 코드 처리 페이지는 응답 상태 코드별로 제작해둘 수 있다.
따라서 수행중인 페이지의 종류에 상관없이 하나의 웹 애플리케이션 내에 존재하는 모든 페이지에서 일어나는 특정한 응답 상태 코드에 대한 대응 페이지를 마련해둘 수 있으므로, 에러 처리에 대한 일관성 및 사용자의 편의를 위해 보편적으로 사용되는 방식이다.
자바의 예외 타입별 에러 페이지 활용
HTTP 통신상에서 일어날 수 있는 예외 상황 외에 자바의 기능 수행 시에도 에러가 발생할 수 있다.
웹 클라이언트의 요청에 대한 응답에 사용되는 응답 코드 외에도 자바 언어 내부에서 사용되는 에러들을 구체적으로 지정하여 해당 에러를 처리하는 JSP 페이지를 지정해주는 방법도 가능하다.
자바 예외 타입 지정 시에도 응답 코드 처리와 동일하게 <error-page> 태그를 사용하여, <exception-type> 태그를 사용하고, <location>태그를 사용하여 해당 에러를 처리할 JSP 페이지를 지정한다.
web.xml에 에러코드를 등록하면 한 프로젝트내 application에 모든 JSP 페이지의 에러를 처리 한다.
응답 상태 코드와는 조금 다른 방식이지만, 위와 같이 자바 내 특정 exception에 대한 전담 처리 페이지를 제작해두면 다양한 예외 상황에 유연하게 대처가 가능할 것이다.
에러 페이지의 직접 호출
앞서 알아본 바와 같이 초기 설정 파일인 web.xml을 통해 특정 응답 상태 코드 혹은 자바에 정의된 exception에 대한 처리를 담당하는 JSP 페이지를 지정할 수 있었다.
이 외에 JSP 페이지에서 에러가 발생 시 페이지 내부에서 직접 에러 처리를 담당할 페이지를 호출하는 방법도 가능하다.
try-catch문을 사용하여 에러 처리를 한다.
RequestDispatcher dispatcher = request.getRequestDispatcher("~~.jsp");
dispatcher.forward(request, response);
처리시 request 내장 객체의 getRequestDispatcher() 메서드를 이용하여 예외 처리 페이지를 지정한다.