본문 바로가기

JSP 웹 프로그래밍/수업내용

[JSP 웹 프로그래밍] 예외처리

1. 예외 처리의 개요

예외 처리

프로그램이 처리되는 동안 특정한 문제가 발생했을 때 처리를 중단하고 다른 처리를 하는 것으로 오류 처리라고도

사이트를 이용하다가 주소를 잘못 입력하면 오류 페이지를 보게

   - 서버가 제공하는 오류 페이지로 해당 페이지에 발생한 오류, 디렉터리 구조,

      톰캣 버전 등의 정보가 나타나 있기 때문에 웹 보안이 취약하여 쉽게 해킹 당할 있음

예외 처리

웹 애플리케이션 실행 도중에 발생할 수 있는 오류에 대비한 예외 처리 코드를 작성하여 비정상적인 종료를 막을 수 있음

예외 처리 방법의 종류


2. page 디렉티브 태그를 이용한 예외 처리

errorPage 속성으로 오류 페이지 호출하기

errorPage 속성

 - 오류 페이지를 호출하는 page 디렉티브 태그의 속성

 - JSP 페이지가 실행되는 도중에 오류가 발생하면 웹 서버의 기본 오류 페이지를 대신하여 errorPage 속성에 설정한 페이지가 오류 페이지로 호출

 

예시

더보기
<%@ 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 파일에 오류 코드와 오류 페이지를 설정하는 형식

예외 유형으로 오류 페이지 호출하기

예외 유형에 따른 오류 페이지 호출 방법은 JSP 페이지가 발생시키는 오류가 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

 -  자바의 예외 처리 구문으로 스크립틀릿 태그에 작성

  - try 구문에는 예외가 발생할 수 있는 코드를 작성하고, catch 구문에는 오류가 발생할수 있는 예외 사항을 예측하여 오류를 처리하는 코드를 작성
  -  finally 구문에는 try 구문이 실행된 후 실행할 코드를 작성하는데 이는 생략 가능
 

예제

더보기

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>

참고자료

Ch11 예외처리.pptx
2.00MB