JSP-예외 처리
이 챕터에서는. JSP에서 예외를 처리하는 방법에 대해 설명합니다. JSP 코드를 작성할 때 코드의 모든 부분에서 발생할 수있는 코딩 오류를 만들 수 있습니다. JSP 코드에서 다음과 같은 유형의 오류가 발생할 수 있습니다.
확인 된 예외
확인 된 예외는 일반적으로 사용자 오류 또는 프로그래머가 예측할 수없는 문제인 예외입니다. 예를 들어, 파일을 열어야하는데 파일을 찾을 수없는 경우 예외가 발생합니다. 이러한 예외는 컴파일시 무시할 수 없습니다.
런타임 예외
런타임 예외는 프로그래머가 피할 수 있었던 예외입니다. 확인 된 예외와 달리 런타임 예외는 컴파일시 무시됩니다.
오류
이것들은 전혀 예외가 아니라 사용자 나 프로그래머의 통제를 넘어서 발생하는 문제입니다. 오류에 대해 거의 아무것도 할 수 없기 때문에 오류는 일반적으로 코드에서 무시됩니다. 예를 들어 스택 오버플로가 발생하면 오류가 발생합니다. 또한 컴파일시 무시됩니다.
JSP 코드에서 발생하는 런타임 예외 / 오류를 처리하는 방법에 대해 자세히 설명합니다.
예외 개체 사용
예외 객체는 Throwable의 하위 클래스 (예 : java.lang. NullPointerException)의 인스턴스이며 오류 페이지에서만 사용할 수 있습니다. 다음 표에는 Throwable 클래스에서 사용할 수있는 중요한 메서드가 나열되어 있습니다.
S. 아니. | 방법 및 설명 |
---|---|
1 | public String getMessage() 발생한 예외에 대한 자세한 메시지를 반환합니다. 이 메시지는 Throwable 생성자에서 초기화됩니다. |
2 | public Throwable getCause() Throwable 객체가 나타내는 예외의 원인을 반환합니다. |
삼 | public String toString() 결과와 연결된 클래스의 이름을 반환합니다. getMessage(). |
4 | public void printStackTrace() 결과를 인쇄합니다. toString() 스택 추적과 함께 System.err, 오류 출력 스트림. |
5 | public StackTraceElement [] getStackTrace() 스택 추적의 각 요소를 포함하는 배열을 반환합니다. 인덱스 0의 요소는 호출 스택의 맨 위를 나타내고 배열의 마지막 요소는 호출 스택의 맨 아래에있는 메서드를 나타냅니다. |
6 | public Throwable fillInStackTrace() 이 Throwable 개체의 스택 추적을 현재 스택 추적으로 채우고 스택 추적의 이전 정보에 추가합니다. |
JSP는 다음을 지정할 수있는 옵션을 제공합니다. Error Page각 JSP에 대해. 페이지에서 예외가 발생할 때마다 JSP 컨테이너는 자동으로 오류 페이지를 호출합니다.
다음은 오류 페이지를 지정하는 예입니다. main.jsp. 오류 페이지를 설정하려면<%@ page errorPage = "xxx" %> 지령.
<%@ page errorPage = "ShowError.jsp" %>
<html>
<head>
<title>Error Handling Example</title>
</head>
<body>
<%
// Throw an exception to invoke the error page
int x = 1;
if (x == 1) {
throw new RuntimeException("Error condition!!!");
}
%>
</body>
</html>
이제 아래에 주어진 하나의 오류 처리 JSP ShowError.jsp를 작성합니다. 오류 처리 페이지에는 지시문이 포함되어 있습니다.<%@ page isErrorPage = "true" %>. 이 지시문은 JSP 컴파일러가 예외 인스턴스 변수를 생성하도록합니다.
<%@ page isErrorPage = "true" %>
<html>
<head>
<title>Show Error Page</title>
</head>
<body>
<h1>Opps...</h1>
<p>Sorry, an error occurred.</p>
<p>Here is the exception stack trace: </p>
<pre><% exception.printStackTrace(response.getWriter()); %></pre>
</body>
</html>
액세스 main.jsp, 다음과 같은 출력을 받게됩니다.
java.lang.RuntimeException: Error condition!!!
......
Opps...
Sorry, an error occurred.
Here is the exception stack trace:
오류 페이지에 JSTL 태그 사용
JSTL 태그를 사용하여 오류 페이지를 작성할 수 있습니다. ShowError.jsp. 이 페이지는 더 나은 구조와 더 많은 정보를 가진 위의 예와 거의 동일한 로직을 가지고 있습니다.
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<%@page isErrorPage = "true" %>
<html>
<head>
<title>Show Error Page</title>
</head>
<body>
<h1>Opps...</h1>
<table width = "100%" border = "1">
<tr valign = "top">
<td width = "40%"><b>Error:</b></td>
<td>${pageContext.exception}</td>
</tr>
<tr valign = "top">
<td><b>URI:</b></td>
<td>${pageContext.errorData.requestURI}</td>
</tr>
<tr valign = "top">
<td><b>Status code:</b></td>
<td>${pageContext.errorData.statusCode}</td>
</tr>
<tr valign = "top">
<td><b>Stack trace:</b></td>
<td>
<c:forEach var = "trace"
items = "${pageContext.exception.stackTrace}">
<p>${trace}</p>
</c:forEach>
</td>
</tr>
</table>
</body>
</html>
main.jsp에 액세스하면 다음이 생성됩니다.
Opps...
Error:
java.lang.RuntimeException: Error condition!!!
URI:
/main.jsp
Status code:
500
Stack trace:
org.apache.jsp.main_jsp._jspService(main_jsp.java:65)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:68)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
Try ... Catch Block 사용
동일한 페이지 내에서 오류를 처리하고 오류 페이지를 실행하는 대신 조치를 취하려면 다음을 사용할 수 있습니다. try....catch 블록.
다음은 try ... catch 블록을 사용하는 방법을 보여주는 간단한 예입니다. main.jsp에 다음 코드를 넣으십시오.
<html>
<head>
<title>Try...Catch Example</title>
</head>
<body>
<%
try {
int i = 1;
i = i / 0;
out.println("The answer is " + i);
}
catch (Exception e) {
out.println("An exception occurred: " + e.getMessage());
}
%>
</body>
</html>
main.jsp에 액세스하면 다음과 같은 출력이 생성됩니다.
An exception occurred: / by zero