티스토리 뷰

학교공부/JSP

JSP - 9

날따라해봐요요롷게 2021. 4. 6. 18:15

<출처 : 쉽게 배우는 JSP 웹 프로그래밍>

 

예외 처리

 

 - 예외처리의 개요

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

 - web.xml 파일을 이용한 예외 처리

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


  •  - 예외처리의 개요

프로그램이 실행동안 문제가 발생 했을 때 처리를 중단하고 다른 처리를 하는 것을 예외처리라고 한다.

 

예외처리 방법은 3가지가 있다.

 

- page 디렉티브 태그 이용 : errorpage 와 isErrorPage 속성을 이용

- web.xml 파일을 이용 : <error-code>, <exception-type> 요소를 이용

- try-catch-finally 이용 : 자바 언어의 예외 처리 구문 사용

 

#예외처리 우선순위#

- JSP페이지에서 try-catch-finally 문으로 처리하는 경우 오류 출력

- page 디렉티브 태그의 errorPage 속성에서 설정한 오류 페이지 출력

- JSP 페이지에서 예외 유형이 web.xml 파일에서 설정한 예외 유형과 동일한 경우 설정한 오류 페이지 출력

- JSP 페이지에서 발생한 오류 콛가 web.xml 파일에서 설정한 오류 코드와 동일한 경우 오류코드 출력

- 위 항목이 해당되지 않는 경우 기본오류 페이지 출력


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

 

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

 : <%@ page errorPage = "오류페이지 URL" %>

<%@ page contentType="text/html; charset=utf-8"%>
<%@ page errorPage = "errorPage_error.jsp" %>
<html>
<head>
<title>Exception</title>
</head>
<body>
		name 파라미터 : <%= request.getParameter("name").toUpperCase() %>
</body>
</html>
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>Exception</title>
</head>
<body>
		오류 발생!
</body>
</html>

첫 번째 파일 : errorPage.jsp // 두 번째 파일 : errorPage_error.jsp

-> errorPage 디렉티브 태그에  errorPage_error.jsp 에러페이지 주소를 작성.

파라미터로 입력받은 name을 대문자로 바꿔 출력 하지만, 입력받을 name이 존재하지 않기에 오류 발생!

errorPage_error.jsp 페이지 호출됨

 

## isErrorPage 속성으로 오류 페이지 만들기

<%@ page isErrorPage = "true" %>

isErrorPage 속성은 현재 JSP 페이지를 오류 페이지로 호출하는 page 디렉티브 속성이다.

오류 페이지에서는 exception 내장 객체를 사용할 수 있다.

내장객체 메서드

 - getMessage()  : 오류 이벤트와 함께 들어오는 메시지 출력

 - toString() : 오류 이벤트의 toString()을 호출 출력

 - printStackTrace() : 오류 메시지의 발생 근원을 찾아 단계별로 출력 (함부로 사용하면 안됨)

 

 

<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>Exception</title>
</head>
<body>
		<form action="exception_process.jsp" method="get">
			<p> 숫자 : <input type="text" name="num1">
			<p> 숫자 : <input type="text" name="num2">
			<p> <input type="submit" value="나누기">
		</form>
</body>
</html>
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page errorPage = "exception_error.jsp" %>
<html>
<head>
<title>Exception</title>
</head>
<body>
		<%
			String num1 = request.getParameter("num1");
			String num2 = request.getParameter("num2");
			int a = Integer.parseInt(num1);
			int b = Integer.parseInt(num2);
			int c = a / b;
			out.print(num1 + " / " + num2 + " = " + c);

		%>
</body>
</html>
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page isErrorPage = "true" %>
<html>
<head>
<title>Exception</title>
</head>
<body>
		<p> 오류 발생! 오류 내용 보여주기 exception 내장객체의 메서드 이용
		<p> 예외 : <%=exception%>
		<p> toString() : <%=exception.toString() %>
		<p> getMessage() : <%=exception.getMessage() %>
		<p> getClass().getName() : <%=exception.getClass().getName() %>
</body>
</html>

exception.jsp // exception_process.jsp // exception_error.jsp 세 개의 파일을 작성

- exception.jsp : form 태그를 사용하여 값을 입력 받는다. action page는 exception_process.jsp로 작성

- exception_process.jsp : 입력받은 숫자 num1, num2를 나눈다. 즉, 연산처리 파일.

- exception.error.jsp : 연산처리 과정에서 예외가 발생할 경우 해당 페이지 출력한다. exception 내장객체의 메서드를 활용하여 예외 내용 출력

 

 

 - web.xml 파일을 이용한 예외 처리

: web.xml 파일에 처리할 오류코드나 오류 유형및 페이지 호출 정보를 작성

<error-page>

    <error-code>오류 코드</error-code>|<exception-type>오류 유형</exception-type>

    <location>오류페이지 URL 작성</location>

</error-page>

 

주요 오류 코드

- 404 : 지정된 URL을 처리하기 위한 자원이 존재하지 않음.

- 500 : 서버 내부의 에러(JSP에서 예외가 발생하는 경우)

 

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

 : JSP 에 발생하는 오류가 web.xml 파일에 설정된 예외 유형과 일치하는 경우 해당 예외 유형과 오류 페이지 보여줌.

<error-page>

    <exception-type>예외 유형</exception-type>

    <location>오류페이지 URL 작성</location>

</error-page>

 

# 주요 예외 유형의 종류

  • ClassNotFoundExeption : 클래스를 찾지 못함
  • NullPointerException : null 오브젝트로 접근할 때 발생
  • ClassCastException : 변환할 수 있는 유형으로 각체를 변환할 때
  • OutOfMemoryException : 메모리 부족으로 메모리 확보하지 못할 때
  • StackOverFlowError : 스택 오버플로우 발생
  • ArrayIndexOutOfBoundException : 범위 밖의 배열을 사용할 경우
  • NegativeArraySizeException : 음수로 배열의 크기 설정
  • illegalArgumentException : 부적절한 문자열을 숫자로 치환하려 할 때
  • IOException : 요청된 메서드가 허용되지 않을 때
  • NumberFormatException : 부적절한 문자열을 숫자로 치환하려 할 때
  • ArithmeticException : 연산시 문제 (어떤 숫자를 0으로 나누려 할 때)
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>Exception</title>
</head>
<body>
	<form action="errorCode_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>
==========
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>Exception</title>
</head>
<body>
	<%
		String num1 = request.getParameter("num1");
		String num2 = request.getParameter("num2");
		int a = Integer.parseInt(num1);
		int b = Integer.parseInt(num2);
		int c = a / b;
		out.print(num1 + " / " + num2 +" = "+c);
	
	%>
</body>
</html>
============
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>Exception</title>
</head>
<body>
	errorCode 505 발생
	오류 내용 => web.xml 작성!!
</body>
</html>

form 태그를 작성한 jsp 파일에 숫자를 입력하여 액션이 취해진 페이지로 데이터를 보낸다.

action에 있던 주소 페이지는 작동하여 parameter로 값을 받아와 계산한다.

web.xml 에 오류상태와 오류페이지를 작성하였기에 오류가 발생시 web.xml 에 작성한대로 <location>에 작성한 페이지가 호출된다.

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

 : 자바의 예외처리 구문을 스크립틀릿 태그에 작성하여 예외처리 함

 

# 서블릿에서 jsp 호출 => forward() 와 include() 메서드의 차이

 : forward -> 페이지 호출 순간 서블릿이 멈추고 JSP 페이지로 넘어가 실행 후 프로그램 끝

RequestDispatcher rd = this.getServletContext().getRequestDispatcher("파일.jsp");

request.setAttribute("name", "value");

rd.forward(request, response);

 : include -> JSP 페이지가 실행된 후 나머지 서블릿 프로그램 실행

RequestDispatcher rd = this.getServletContext().getRequestDispatcher("파일.jsp");

rd.include(request, response);

<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>Exception</title>
</head>
<body>
		<form action="tryCatch_process.jsp" method="get">
			<p> 숫자 : <input type="text" name="num1">
			<p> 숫자 : <input type="text" name="num2">
			<p> <input type="submit" value="전송">
		</form>
</body>
</html>
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>Exception</title>
</head>
<body>
		<%
			try{
				String num1 = request.getParameter("num1");
				String num2 = request.getParameter("num2");
				int a = Integer.parseInt(num1);
				int b = Integer.parseInt(num2);
				int c = a / b;
				out.print(num1 + " / " + num2 + " = " + c);
			} catch(NumberFormatException e){
				RequestDispatcher dispatcher = request.getRequestDispatcher("tryCatch_error.jsp");
				dispatcher.forward(request, response);
			}
		%>
</body>
</html>
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>Exception</title>
</head>
<body>
		<p> 잘못된 데이터가 입력 
		<p> <%="숫자1 : " + request.getParameter("num1") %>
		<p> <%="숫자2 : " + request.getParameter("num2") %>
</body>
</html>

 

자바의 예외처리 구문은 try-catch-finally 구문을 스크립틀릿 태그에 작성하여 예외를 처리한다.

 

<출처 : 쉽게 배우는 JSP 웹 프로그래밍>

'학교공부 > JSP' 카테고리의 다른 글

JSP - 8  (0) 2021.04.17
JSP - 10  (0) 2021.04.15
JSP - 7  (0) 2021.03.24
JSP - 4  (0) 2021.03.09
JSP - 3  (0) 2021.03.09
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함