1. 예외 처리의 개요
예외 처리
프로그램이 처리되는 동안 특정한 문제가 발생했을 때 처리를 중단하고 다른 처리를 하는 것으로 오류 처리라고도 함
웹 사이트를 이용하다가 주소를 잘못 입력하면 오류 페이지를 보게 됨
- 웹 서버가 제공하는 오류 페이지로 해당 페이지에 발생한 오류, 디렉터리 구조,
톰캣 버전 등의 정보가 나타나 있기 때문에 웹 보안이 취약하여 쉽게 해킹 당할 수 있음
예외 처리
예외 처리 방법의 종류

2. page 디렉티브 태그를 이용한 예외 처리
errorPage 속성으로 오류 페이지 호출하기
errorPage 속성
- 오류 페이지를 호출하는 page 디렉티브 태그의 속성
예시
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page errorPage="errorPage_error.jsp" %><!-- 오류를 대신 처리할 페이지 -->
<!-- pagr 디렉티브. errorPage 속성의 값으로 jsp페이지를 넣음
JSP 페이지가 실행되는 도중 오류발생 시 오류페이지 호출.
-->
<!DOCTYPE html>
<html>
<head>
<title>Exception</title>
</head>
<body>
<!-- /ch11/errorPage.jsp?name=james -->
<!-- /ch11/errorPage.jsp?name= -->
<!-- /ch11/errorPage.jsp
오류발생(null을 대문자로 변환할 수 없음)
파라미터 name이 없어서 오류발생
-->
<p>name 파라미터 : <%=request.getParameter("name").toUpperCase()%></p>
</body>
</html>
isErrorPage 속성으로 오류 페이지 만들기
isErrorPage 속성
- 현재 JSP 페이지를 오류 페이지로 호출하는 page 디렉티브 태그의 속성
- 이때 오류 페이지에서 exception 내장 객체를 사용할 수 있음
예시 1
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page isErrorPage="true" %>
<!-- isErrorPage 속성 : 현재 JSP 페이지를 오류페이지로 호출하는
page 디렉티브 태스의 속성. 이때 오류페이지에서 exception 내장객체를 사용 할 수 있음
-->
<!DOCTYPE html>
<html>
<head>
<title>Exception</title>
</head>
<body>
<p><img src="/images/여수고양이.jpg" /></p>
<!-- exception객체 : JSP에서 기본적으로 제공해주는 오류 처리용 기본 내장 객체
오류이벤트의 toString()를 호출하여 간단한 오류 메시지 확인
-->
<p>예외유형 : <%=exception.toString() %></p>
<!-- 오류메세지의 발생 근원지를찾아 단계별로 오류를 출력 -->
<p>단계별 오류출력 : <%=exception.printStackTrace() %></p>
<!-- 예외 객체 타입을 출력 -->
<p>예외 유형 : <%=exception.getClass().getName() %></p>
<!-- 오류이벤트와 함께 들어오는 메시지를 출력 -->
<p>예외 메시지 : <%=exception.getMessage() %></p>
</body>
</html>
예시 2
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<title>Exception</title>
</head>
<body>
<p><img src="/images/여수고양이.jpg"/ ></p>
<p>예외 : <%=exception %></p>
<P>toString() : <%=exception.toString() %>
<p>getClass().getNaem() : <%=exception.getClass().getName() %>
<p>getMessage() : <%=exception.getMessage() %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page errorPage="exception_error.jsp" %>
<!-- 본페이지에서 오류 발생 시 exception_error.jspdptj 오류를 대신 처리 -->
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<!--폼페이지
요청 URL : exception_process.jsp
요청 파라미터(HTTP파라미터 = QueryString): {num1=12, num2=6}
요청 방식 : post
-->
<%//스크립틀릿
String num1 = request.getParameter("num1"); //"12"
String num2 = request.getParameter("num2"); //"6"
//문자를 숫자로 형변환
int a = Integer.parseInt(num1); // 12
int b = Integer.parseInt(num2);//6
int c = a / b;
out.print("<p>" + num1 + " / " + num2 + " = " + c);
%>
</body>
</html>
3. web.xml 파일을 이용한 예외 처리
web.xml 파일을 이용한 예외 처리
web.xml 파일을 통해 오류 상태와 오류 페이지를 보여주는 방법
<error-page>…</error-page> 요소 내에 처리할 오류 코드나 오류 유형 및 오류 페이지를 호출

- web.xml 파일은 웹 애플리케이션의 /WEB-INF/폴더에 있어야 함
오류 코드로 오류 페이지 호출하기
오류 코드는 웹 서버가 제공하는 기본 오류 페이지에 나타나는 404, 500과 같이 사용자의 요청이 올바르지 않을 때 출력되는 코드로 응답 상태 코드 라고도 함
JSP 페이지에서 발생하는 오류가 web.xml 파일에 설정된 오류 코드와 일치하는 경우 오류 코드와 오류 페이지를 보여줌
web.xml 파일에 오류 코드와 오류 페이지를 설정하는 형식
예외 유형으로 오류 페이지 호출하기
예시
[web.xml 파일에 오류코드로 오류페이지 호출하기]
<error-page>
<!-- 오류 코드 설정
오류 코드 : 웹 서버가 제공하는 기본 오류 페이지에 나타나는 404, 500과 같이
사용자의 요청이 올바르지 않을 때 출력되는 코드. 응답 상태 코드.
JSP페이지에서 발생하는 오류가 web.xml 파일에 설정된 오류 코드와 일치하는
경우 오류 코드와 오류 페이지를 보여줌
-->
<error-code>404</error-code>
<!-- 오류처리 페이지 설정 -->
<location>/error/error404.jsp</location>
</error-page>
<error-page>
<!-- 오류 코드 설정
오류 코드 : 웹 서버가 제공하는 기본 오류 페이지에 나타나는 404, 500과 같이
사용자의 요청이 올바르지 않을 때 출력되는 코드. 응답 상태 코드.
JSP페이지에서 발생하는 오류가 web.xml 파일에 설정된 오류 코드와 일치하는
경우 오류 코드와 오류 페이지를 보여줌
-->
<error-code>403</error-code>
<!-- 오류처리 페이지 설정 -->
<location>/error/error403.jsp</location>
</error-page>
[각 오류에 해당하는 JSP 파일 만들기 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>404오류</title>
</head>
<body>
<img src="/images/404.jpg"/>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>403오류</title>
</head>
<body>
<img src="/images/403.jpg"/>
</body>
</html>
web.xml 파일에 예외 유형과 오류 페이지를 설정하는 형식
예제
<!--
[2] 예외 유형으로 오류페이지 호출
예외 유형에 따른 오류 페이지 호출 방법은 JSP 페이지가 발생시키는 오류가 web.xml 파일에
설정된 예외 유형과 일치하는 경우 예외 유형과 오류 페이지를 보여줌
우선순위
jsp페이지의 psge 디렉티브의 errorPage > web.xml 의 error-code
-->
<error-page>
<!-- 자바예외 유형의 정규화된 클래스 이름을 설정 -->
<exception-type>java.lang.NullPointerExcrption</exception-type>
<location>/error/errorNullPointer.jsp</location>
</error-page>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<h3>errorNullPointer.jsp</h3>
</body>
</html>
4. try-catch-finally를 이용한 예외 처리
try-catch-finally
예제
tryCatch.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Exception</title>
</head>
<body>
<!--폼페이지
요청 URL : tryCatch_process.jsp
요청 파라미터(HTTP파라미터 = QueryString): {num1=12, num2=6}
요청 방식 : post
-->
<form action="tryCatch_process.jsp" method="post">
<!-- 폼데이터 -->
<p>숫자1 : <input type="text" name="num1"/>
<p>숫자2 : <input type="text" name="num2"/>
<p><input type="submit" value="나누기"/>
</form>
</body>
</html>
tryCatch_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page errorPage="exception_error.jsp" %>
<!-- 본페이지에서 오류 발생 시 exception_error.jspdptj 오류를 대신 처리 -->
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<!--폼페이지
요청 URL : exception_process.jsp
요청 파라미터(HTTP파라미터 = QueryString): {num1=12, num2=6}
요청 방식 : post
-->
<%//스크립틀릿
try{
//스크립틀릿
String num1 = request.getParameter("num1"); //"12"
String num2 = request.getParameter("num2"); //"6"
//문자를 숫자로 형변환
int a = Integer.parseInt(num1);//12
int b = Integer.parseInt(num2); //6
int c = a / b; //2
out.print("<p>" + num1 + " / " + num2 + " = " + c);
}catch(ArithmeticException e){
//오류가 발생 시 tryCatch_error.jsp로 포워딩
//포워딩(forward) : JSP 리턴. 데이터를 전달할 수 있음
//리다이렉트(redirect) : 새로운 URL을 재요청. 데이터를 전달하기 어려움
RequestDispatcher dispatcher =
request.getRequestDispatcher("tryCatch_error.jsp");
//request{num1=12,num2=0}
//request객체와 response객체를 전달함
//tryCatch_error.jsp에서도 요청파라미터인 ?num1=12&num2=0을 사용할 수 있음
dispatcher.forward(request, response);
}
%>
</body>
</html>
tryCatch_error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<!--
request{num1=12,num2=0} -->
<h3>잘못된 데이터가 입력되었습니다.</h3>
<p>숫자1 : <%=request.getParameter("num1") %></p>
<p>숫자2 : <%=request.getParameter("num2") %></p>
<p><a href="/ch11/tryCatch.jsp">처음으로 이동</a></p>
</body>
</html>
참고자료
'JSP 웹 프로그래밍 > 수업내용' 카테고리의 다른 글
[JSP 웹 프로그래밍] 세션(session) (0) | 2024.07.16 |
---|---|
[JSP 웹 프로그래밍] 필터(filter) (0) | 2024.07.15 |
[JSP 웹 프로그래밍] 예외처리 (0) | 2024.07.12 |
[JSP 웹 프로그래밍] 시큐리티 (0) | 2024.07.10 |
[JSP 웹 프로그래밍] 다국어 처리 (0) | 2024.07.10 |