출처 : http://blog.naver.com/nillwow/7631084
JSP 에러 페이지를 만드는 세가지 방법 |
JSP에서 에러페이지를 보여주는 방식은 크게 세가지로 나눌수 있습니다. 1. 첫째는 옛날 방식으로 JSP페이지에 직접 에러페이지를 표시해주는 방식입니다. <%@ page errorPage="error.jsp" %>
이때 error.jsp에 <%@ page isErrorPage="true" %>라고 선언해야합니다.
JSP페이지에 에러가 발생하면 error.jsp로 제어가 넘어가고 error.jsp에서는 "exception"이라는 implicit 객체를 사용하여 에러메시지를 보여줄 수 있습니다. 에러를 우아하게 처리하기 위해서는 JSP페이지마다 errorPage속성을 지정해야하는 불편이 있었던 방식입니다. 2. 둘째는 서블릿2.3에서 추가된 것으로, web.xml에 에러유형별로 에러페이지를
지정해 주는 좀더 진화된 방식입니다.(첨부파일 참조) <error-page>
<error-code>404</error-code> <location>/error.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/error.jsp</location> </error-page> <error-page> <exception-type>java.lang.Throwable</exception-type> <location>/error.jsp</location> </error-page> 이제 JSP에서 예외가 발생하면 해당 JSP페이지에 errorPage속성을 선언 안해도 error.jsp가 자동으로 에러를 처리합니다. 그리고 error-page에서 지정해준 error.jsp에는 <%@ page isErrorPage="true" %> 등의 선언이 불필요합니다. 그러나 이전 방식과는 다르게 예외객체인 "exception"을 직접 접근하진 못합니다. 대신 새로이 추가된 속성값으로 예외객체를 불러올 수 있습니다. Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception");
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님께 감사드립니다) <c:out value="${requestScope['javax.servlet.error.message']}"/>
저처럼 <c:out value="${javax.servlet.error.message}"/> 로 하지 마시길...
3. 추가로 스트러츠 고유의 에러 처리법도 있습니다. struts-config.xml에서 Exception의 타입에 따라 에러 페이지를 매핑합니다. (ExceptionHandler를 새로 구현하셔도 됩니다) <global-exceptions>
<exception key="error.general" type="java.lang.Exception" handler="org.apache.struts.action.ExceptionHandler" path="/error.jsp" scope="request"/> </global-exceptions> 스트러츠를 사용하는 어플리케이션에서 Exception이 발생하면 Exception 객체는 request에 org.apache.struts.Globals.EXCEPTION_KEY 키로 저장되고 제어권은 error.jsp로 넘어갑니다. 스트러츠용 error.jsp의 예입니다. <% Exception ex = (Exception)request.getAttribute(org.apache.struts.Globals.EXCEPTION_KEY); %> <% if (ex != null) { %> <table width=100% border=1 cellpadding=6 cellspacing=0> <tr align="center" bgcolor="#FFCC66"><td>에러 메시지</td></tr> <tr align="center"><td><b><%= ex %></b></td></tr> </table> <p> <table width=100% border=1 cellpadding=6 cellspacing=0> <tr align="center" bgcolor="lightgrey"><td>에러 스택 추적 정보 </td></tr> <tr align="left"><td> <pre><% ex.printStackTrace(new java.io.PrintWriter(out)); %></pre> </td></tr> </table> <p> <% } %> ※ 내용에 오류가 있으면 지적해 주시기 바랍니다. |
ares |
세번째 파트에 첨가를 하자면
struts 커스텀 태그 중에 <html:errors /> 태그 단 한줄을 이용해도 쉽게 에러메세지를 표현할수 있습니다. 하지만 html:errors 태그로 stack의 정보를 아는 방법은 없는것 같습니다. 2003-01-31 12:00:26.0 |
박종진 |
부연하자면 <html:errors/> 태그를 사용하실때는 (1) 에러메시지를 담고있는 메시지 리소스 파일(ex: ApplicationResources.properties)을 작성하셔야하고, (2) Form 또는 Action에서 에러 발생시에 적절한 ActionError를 만들어주는 작업이 필요합니다. (3) struts-config.xml의 action요소에서 input 파라미터 세팅하는 것도 빼먹어선 안되겠죠. |