개발 공부중

[JSP] JSP에서 에러를 처리하는 방법(try - catch/throws/web.xml) 본문

JSP

[JSP] JSP에서 에러를 처리하는 방법(try - catch/throws/web.xml)

개발자 leelee 2024. 7. 25. 22:04

JSP 에서의 예외처리 방법

 

1.  try - catch- finally사용하기
try{
	//일반예외, 실행 예외 발생 가능 코드
catch(예외 클래명 참조 변수명){
	//예외가 발생했을 때 처리
} finally{
	//예외 발생 여부에 상관 없이 무조건 실행 (생략가능)
}

 

특정 코드 블록에서 발생할 수 있는 에러를 줄이는데에 도움이 된다.

데이터베이스 연결 시 오류 처리, 널 포인트 익셉션 (NullPointerException) 처리 할 때 많이 사용된다.

 

<%@ page import="java.sql.*, javax.sql.*" %>
<%
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
    Class.forName("com.mysql.cj.jdbc.Driver");
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");
    stmt = conn.createStatement();
    rs = stmt.executeQuery("SELECT * FROM mytable");
    while (rs.next()) {
        out.println(rs.getString("columnname"));
    }
} catch (SQLException e) {
    out.println("데이터베이스 오류: " + e.getMessage());
} catch (ClassNotFoundException e) {
    out.println("드라이버를 찾을 수 없습니다: " + e.getMessage());
} finally {
    try {
        if (rs != null) rs.close();
        if (stmt != null) stmt.close();
        if (conn != null) conn.close();
    } catch (SQLException e) {
        out.println("리소스를 닫는 도중 오류 발생: " + e.getMessage());
    }
}
%>

 

 

2. throws 키워드로 예외 전가
리턴 타입 메서드명(입력매개변수) throws 예외 클래스명 {
	//예외 발생 코드
}

 

자신을 호출한 시점으로 예외를 전가할 수 있다.

public void connectToDatabase() throws SQLException, ClassNotFoundException {
    Class.forName("com.mysql.cj.jdbc.Driver");
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");
    // 데이터베이스 작업 수행
    conn.close();
}

 

<%@ page import="java.sql.*, javax.sql.*" %>
<%
try {
    connectToDatabase();
} catch (SQLException e) {
    out.println("데이터베이스 오류: " + e.getMessage());
} catch (ClassNotFoundException e) {
    out.println("드라이버를 찾을 수 없습니다: " + e.getMessage());
}
%>

 

 

3. web.xml 파일을 사용해서 예외 처리

 

에러 타입별로 에러페이지를 보여줄 수 있다.

 

3-1. 에러 처리 페이지를 작성한다.

isErrorPage="true" 속성을 사용하여 예외 처리 페이지임을 보여준다.

 

error500.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>에러 페이지</title>
</head>
<body>
<h1> 500 오류가 발생했습니다</h1>
<p>에러 타입: <%= exception.getClass().getTypeName() %></p>
<p>에러 메시지: <%= exception.getMessage() %></p>
</body>
</html>

 

 

3-2. web.xml 파일에 에러시 넘어갈 페이지를 설정해준다.

<exception-type>: 예외의 전체 클래스 이름(패키지 포함)을 지정

<location>: 지정된 예외가 발생했을 때 표시할 JSP 페이지의 경로를 지정

 

web.xml

<error-page>
   	<exception-type>java.lang.NullPointerException</exception-type>
   	<location>/WEB-INF/err/errorNull.jsp</location>
</error-page>

<error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/err/error404.jsp</location>
</error-page>

<error-page>
    <error-code>500</error-code>
    <location>/WEB-INF/err/error500.jsp</location>
</error-page>

 

 

3-3. 오류 발생 시 오류 코드 별 jsp 페이지로 이동하게 된다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Example Page</title>
</head>
<body>
<h1> Page</h1>
<%
    // 의도적으로 예외를 발생시킴
    int result = 10 / 0;  // ArithmeticException 발생
%>
</body>
</html>
Comments