일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- phonegap
- tomcat
- ibsheet
- node.js
- MySQL
- Android
- jsr 296
- 선택적조인
- JDOM
- MFC
- dock
- iBATIS
- JSON
- Struts
- oracle
- 가우스
- Ajax
- appspresso
- GPS
- PHP
- PLSQL
- sencha touch
- 전자정부프레임워크
- rowspan
- jQuery
- swingx
- Spring
- Eclipse
- WebLogic
- Google Map
- Today
- Total
Where The Streets Have No Name
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>/404error.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500error.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");
에러 관련하여 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님께 감사드립니다)
<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>
<% } %>