JAVA/JSP
JSP | 에러 처리 with XML
pathas
2020. 2. 22. 23:02
JSP 에러 처리
에러 처리 개요
- JSP페이지는 에러 발생 시 웹 브라우저 전체 화면이 에러 메세지로 표시됨
- 에러가 어떠한 경로로 발생하게 되었는지 스택을 뒤집어서 추적하는 것
- 에러 페이지가 무시무시하기 때문에 그대로 출력하지 않고
에러 발생시 다른 페이지를 출력함으로써 에러를 처리함
에러 코드
HTTP 에러 코드 | 에러 메세지 |
---|---|
200 | OK, 에러 없이 전송 성공 |
404 | Not Found 문서를 찾을 수 없음 요청 문서를 찾지 못한 경우 발생하는 에러 URL을 잘 보고 주소가 올바로 입력되었는지 확인 |
500 | Internal Server Error, 서버 내부 오류 웹 서버가 요청 사항을 수행할 수 없는 경우 발생 |
- 404 코드는 주로 사용자가 잘못된 페이지를 요청할 때 발생
- 500 코드는 프로그램 코딩 오류일 때 발생
에러 처리
- 과거에는 page 디렉티브의 errorPage 속성을 사용하여 에러를 처리했으나
이 방법은 최근에 나온 웹 컨테이너들은 지원하지 않을 수도 있음 - WEB-INF 폴더의 web.xml 파일에 < error-page > 엘리먼트를 사용
에러 처리 XML Element
엘리먼트 | 설명 |
---|---|
error-page | 에러 발생시 출력할 페이지를 감싸는 상위 태그 |
error-code | 에러 코드를 지정하는 태그 |
location | 해당 에러 코드 발생 시 출력할 페이지의 상대 경로 지정 |
에러 처리 JSP 코드
<%response.setStatus(HttpServletResponse.SC_OK);%>
- 현재 페이지가 정상적으로 응답되는 페이지임을 지정하는 코드
- 이 코드를 생략하면 웹 브라우저는 자체적으로 제공하는 에러 화면을 표시
예제
WEB-INF 폴더의 web.xml 파일에서 에러를 처리하는 예제
WEB-INF/web.xml
환경설정 시 사용하는 xml 파일 수정
<?xml version="1.0" encoding="UTF-8"?>
<!-- DTD문, 표준 xml 태그를 사용하기 위해 선언 -->
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>JspStudy_200221</display-name>
<!-- welcome-file-list 메인페이지 지정시 사용하는 태그 -->
<!-- welcome-file 태그로 메인페이지 찾는 순서 지정 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>HelloTest.java</welcome-file>
</welcome-file-list>
<!-- 에러 처리 -->
<error-page>
<error-code>404</error-code>
<location>/error/404code.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/500code.jsp</location>
</error-page>
</web-app>
error/404code.jsp
404 에러 발생 시 출력할 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% // 현재 페이지가 정상적으로 응답되는 페이지임을 지정
// 코드 생략 시 웹 브라우저가 자체적으로 제공하는 에러 페이지 출력
response.setStatus(HttpServletResponse.SC_OK);
%>
<h1>404 에러 발생!!</h1>
<h2>요청하신 문서를 찾지 못했습니다.</h2>
<h3>문서의 경로를 다시 한 번 확인해주세요!</h3>
error/500code.jsp
500 에러 발생 시 출력할 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta charset="UTF-8">
<%
response.setStatus(HttpServletResponse.SC_OK);
%>
<h1>500 에러 발생!!</h1>
<h2>요청 문서에 문법적인 에러가 있습니다!</h2>
<h3>프로그램의 코드를 확인해 주세요!</h3>
<h3>어떤 수를 0으로 나누면 안됩니다!</h3>
zero.jsp
에러 발생 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 문법 에러를 발생시키기 위해 9를 0으로 나눔 -->
<%=9/0 %>
</body>
</html>
결과
JSP 페이지에서 에러를 처리하는 방법에 대해 알아보았습니다.
JSP 페이지에 에러가 발생하면 웹 브라우저 전체 화면에 에러 메세지가 출력되기 때문에
이를 적절한 페이지로 대체해서 출력하는 것이 필요하다고 할 수 있겠습니다.
에러 처리는 에러 메세지 대신 출력할 페이지를 작성하고
/WEB-INF/web.xml 소스코드 내부에서 에러 코드와 출력 페이지를 연결함으로써 이루어집니다.
단, 출력할 JSP 페이지에 <%response.setStatus(HttpServletResponse.SC_OK)%>
코드를 작성하지 않으면 웹 브라우저가 자체적으로 제공하는 에러 페이지가 출력된다는 것을 기억해야 하겠습니다.