본문 바로가기
JSP/JSP기초

JSP 예외처리 4가지 정리

by 미눅스[멘토] 2023. 7. 11.
728x90

 

 

예외 처리에는 4가지 방법이 있음

우선순위대

1.try-catch

2.page디렉티브

 

3.web-xml  = 웹브라우저에서 많이 쓰이는 방법, 많이 쓰이는 이유는 편함

  1)code :

      404,

      500,

      200,

   2)type : 

 

4.웹브라우저

 


프로세스 : 실행중인 프로그램 = CPU점유

ex) 냄비에 물넣음 → 불켜기→기다리기→물 끓으면→스프→면→계란

만약 물이 안끓으면 오류처리를 하는데

오류처리에는 4가지방법 처리

1.try-catch, 2.page디렉티브, 3.web-xml ,4.웹브라우저

 

1. try-catch = 동생 스스로 해결 = 자기 스스로 catch로 해결 -가장신속한 방법 그래서 우선순위가 높다.

2. page디렉티브 =형 도와줘 ㅠ = 다른페이지를 불러서 오류 해결 -형(다른페이지)이 없을 수 도 있음

 3.web-xml = 엄마가 적어논 메뉴얼 보고 해결 - 엄마의 메뉴얼을 항상 있음(보고 해결하면됨 그리고 화면도 깔금함)

4.웹브라우저 = 가스렌지(시스템)가 직접 알려줌 = 노출되면 시스템이 노출되는것이라 별로 좋지 않다.

 

 


 

예외 처리 방법 설명
page디렉티브 태그를 이용한 예외 처리   errorPage와 isErrorPage속성이용
web.xml 파일을 이용한 예외처리  <error-code>또는 <exception-type>
try/catch/finally를 이용한 예외처리 자바 언어의 예외 처리 구문을 이용

 

 

 

 


 

웹브라우저 예외처리 하는법

 

 

 

 

시스템이 알아서 예외처리를 해주는데

보기도 안좋고 화면에 노출된다.

 

 

 

 


 

페이지 디렉티브 예외처리 하는법

 

 

 

<%@ page errorPage="임포트할 파일.jsp" %>를 임포트해준다

나는 errorPage_error.jsp를 만들어 주었다.

 

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page isErrorPage="true" %>
<!-- isErrorPage 속성 : 현재 JSP 페이지를 오류 페이지로 호출하는
	page 디렉티브 태그의 속성. isErrorPage를 true로 변경시 exception 내장 객체를 사용할 수 있음 -->
<!DOCTYPE html>
<html>
<head>
<title>Exception</title>
</head>
<body>
	<p>오류가 발생했습니다.</p>
	<!-- 
	exception : JSP 에서 제공해주는 오류 처리용 기본 내장 객체
	오류 이벤트의 toString()를 호출해서 간단한 오류 메시지 확인
	 -->
	<p>예외 유형 : <%=exception.toString() %></p>
	<!-- 오류 메시지의 발생 근원지를 찾아 단계별로 오류를 출력 -->
<%-- 	<p>단계별 오류 출력 : <%=exception.printStackTrace()%></p> --%>
	<!-- 오류 이벤트와 함께 들어오는 메시지를 출력 -->
	<p>오류 메시지 : <%=exception.getMessage() %></p>
	<p>예외 객체 타입 : <%=exception.getClass().getName()%></p>
	
</body>
</html>

 

 

단계별 오류 출력 주석 해제하면

 

결과는 이렇게 나온다.

 

 

 

 

 


 

web.xml 처리방법

 

 

요소 설명
<error-code> 오류 코드를 설정하는데 사용
<exception-type> 자바 예외 유형의 정규화된 클래스 이름을 설정하는데 사용
<location> 오류 페이지의 URL을 설정하는데 사용

 

 

 

주요 오류코드의 종류

코드 설명
200 요청이 정상적으로 처리되었다
307 임시로 페이지가 리다이렉트 된다
400 클라이언트의 요청이 잘못된 구문으로 구성된다
401 접근이 허용되지 않는다.
404 지정된 URL을 처리하기 위한 자원이 존재하지 않는다(페이지가 없음)
405 요청된 메소드가 허용되지 않는다,
500 서버 내부의 에러다(JSP에서 예외가 발생하는 경우)
503 서버가 일시적으로 서비스를 제공할 수 없다(서버 과부하나 보수 중인 경우)

  <!-- 
  	오류가 나면 오류 코드에 맞춰 오류 퍼리jsp로 매핑 
  	[대표 오류 코드]
  	404 : 지정된 URL을 처리하기 위한 자원이 없음
  	500 : 개발자 오류
  -->
  <error-page>
  <!-- 오류코드
  	오류 코드 : 웹 서버가 제공하는 기본 오류. 응답 상태 코드.
  	JSP페이지에서 발생된 오류가 이 오류 코드와 일치 시 매핑된 오류 페이지로 이동
   -->
   	<error-code>404</error-code>
   	<!--  오류 페이지 설정 -->
   	<location>/error/error404.jsp</location>
  </error-page>
  <error-page>
  <!-- 오류코드 설정. ex) 10/0과 같은 잘못된 코드를 실행 시 -->
  	<error-code>500</error-code>
  	<location>/error/error500.jsp</location>
  </error-page>

 

404에러가 났을때

500에러가 났을때 

요청페이지를 설정한다.

 

설정한  파일을 만든다.

 

 

error404.jsp 파일 코드

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
404오류 발생
</body>
</html>

 

erro500.jsp 파일 코드

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
500오류 발생
</body>
</html>

이렇게 설정해주고

 

 

 

오류발생시 wbe페이지보다 우선순위인 xml에서 처리하게 된다.

 

 

 

 

결과

 

 

 

 

 

 

 

exception-type오류로 예외처리하기

 

 

  <error-page>
  	<exception-type>java.lang.NullPointerException</exception-type>
  	<location>/error/errorNullPointer.jsp</location>
  </error-page>

 

exception-type 에 러 타입과

location에 error처리할 페이지 설정

 

 

 

파일생성

 

 

 

 

오류처리 페이지 작성

결과

 

 


 

 

 

try-catch-finally를 이용한 예외처리

우선순위가 가장 높은 방법이다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Exception</title>
</head>
<body>
	<!--
	POST방식 
	요청 URL : tryCatch_process.jsp
	요청파라미터 : {num1=12&num2=6n}
	
	GET방식 
	요청 URL : exception_process.jsp?num1=12&num2=6
	요청파라미터 : num1=12&num2=6n
	 -->
	<form action="tryCatch_process.jsp" method="post">
		<p>숫자1 : <input type="text" name="num1" /></p>
		<p>숫자2 : <input type="text" name="num2" /></p>
		<p><input type="submit" value="나누기" /></p>
	</form>
</body>
</html>

 

여기서 숫자2 : 6n문자열 보냄

 

 

tryCatch_process.jsp로 간다

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%-- <%@ page errorPage="exception_error.jsp" %> --%>
<!DOCTYPE html>
<html>
<head>
<title>Exception</title>
</head>
<body>
	<% //스크립틀릿
// 	POST방식 
// 	요청 URL : exception_process.jsp
// 	요청파라미터 : {num1=12&num2=6}
	
	
	try{
		String num1 = request.getParameter("num1");	//"12"
		String num2 = request.getParameter("num2");	//"6"
		
		
		//문자를 숫자로 형변환
		int a = Integer.parseInt(num1); //12
		int b = Integer.parseInt(num2); //12
		int c = a / b;
		out.print("<p>" + num1 +"/" + num2 + "=" + c + "</p>");
	}catch(NumberFormatException e){
		//오류 발생시 tryCatch_error.jsp로 포워딩
		/*
			1) forwarding : jsp를 해석 -> 컴파일 -> html리턴 받음. 데이터를 전달할 수 있음
			2) redirect : URL를 재요청. 데이터를 전달하기 어려움
		*/
		//request 객체와 response객체를 전달
		//tryCatch_error.jsp에서도 요청파라미터인 ?num1=12&num2=6n을 사용할 수 있게됨
		RequestDispatcher dispatcher = 
			request.getRequestDispatcher("tryCatch_error.jsp");
		dispatcher.forward(request, response);
	}
	
	%>
</body>
</html>

여기서 오류처리하고 catch에서 

RequestDispatcher dispatcher = 
request.getRequestDispatcher("tryCatch_error.jsp");
dispatcher.forward(request, response);
}를 써서 Parameter값을 그대로

 

tryCatch_error.jsp 파일로 보냄

 

tryCatch_error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
	<p>잘못된 데이터가 입력되었습니다.</p>
	<p>숫자 1 : <%=request.getParameter("num1")%></p>
	<p>숫자 2 : <%=request.getParameter("num2")%></p>
</body>
</html>

 

결과