[JSP] 에러 페이지를 만드는 세가지 방법

1. 첫째는 옛날 방식으로 JSP페이지에 직접 에러페이지를 표시해주는 방식입니다.

이때 error.jsp에 라고 선언해야합니다.
JSP페이지에 에러가 발생하면 error.jsp로 제어가 넘어가고 error.jsp에서는
"exception"이라는 implicit 객체를 사용하여 에러메시지를 보여줄 수 있습니다.
에러를 우아하게 처리하기 위해서는 JSP페이지마다 errorPage속성을 지정해야하는
불편이 있었던 방식입니다.

2. 둘째는 서블릿2.3에서 추가된 것으로, web.xml에 에러유형별로 에러페이지를
지정해 주는 좀더 진화된 방식입니다.(첨부파일 참조)

404
/error.jsp

500
/error.jsp

java.lang.Throwableexception-type>
/error.jsp

이제 JSP에서 예외가 발생하면 해당 JSP페이지에 errorPage속성을 선언 안해도
error.jsp가 자동으로 에러를 처리합니다. 그리고 error-page에서 지정해준 error.jsp에는
등의 선언이 불필요합니다. 그러나 이전 방식과는 다르게
예외객체인 "exception"을 직접 접근하진 못합니다.
대신 새로이 추가된 속성값으로 예외객체를 불러올 수 있습니다.

Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception");


에러 관련하여 request 스코프에 저장된 속성의 목록입니다.
(http://network.hanbitbook.co.kr/view_news.htm?serial=78)


javax.servlet.error.status_code: 에러 상태 코드를 말해 주는 정수이다.

javax.servlet.error.exception_type: 에러가 생기게 된 예외 형을 지적해 주는 클래스 인스턴스이다.
javax.servlet.error.message: 예외 메시지를 말해주는 스트링이며, 예외 컨스트럭터로 보내어 진다.
javax.servlet.error.exception: 실제 예외가 없어지면 버릴 수 있는 객체이다.
javax.servlet.error.request_uri: 문제를 일으킨 리소스의 URI를 말해주는 스트링이다.


에러페이지를 JSTL로 작성한다면 위의 속성들은 이렇게 접근할 수 있습니다.
(가르쳐주신 ares님께 감사드립니다)


저처럼 로 하지 마시길...

3. 추가로 스트러츠 고유의 에러 처리법도 있습니다.
struts-config.xml에서 Exception의 타입에 따라 에러 페이지를 매핑합니다.
(ExceptionHandler를 새로 구현하셔도 됩니다)



exceptions>
type="java.lang.Exception"
handler="org.apache.struts.action.ExceptionHandler"
path="/error.jsp"
scope="request"/>
exceptions>

스트러츠를 사용하는 어플리케이션에서 Exception이 발생하면 Exception 객체는
request에 org.apache.struts.Globals.EXCEPTION_KEY 키로 저장되고 제어권은
error.jsp로 넘어갑니다. 스트러츠용 error.jsp의 예입니다.

댓글

이 블로그의 인기 게시물

[LINUX] CentOS 부팅시 오류 : UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY

[MSSQL] 데이터베이스가 사용 중이어서 배타적으로 액서스할 수 없습니다

구글코랩) 안전Dream 실종아동 등 검색 오픈API 소스를 공유합니다. (구글드라이브연동, 이미지 수집 소스)