JSP 에러 처리 및 디버깅 (JSP Error Handling and Debugging)
JSP 에러 페이지 설정 (Setting Up JSP Error Pages)
JSP 페이지에서 발생하는 에러를 사용자가 이해할 수 있는 형태로 보여주기 위해 에러 페이지를 설정할 수 있습니다. 이를 통해 특정 에러가 발생했을 때 사용자에게 친절한 메시지를 제공하고, 애플리케이션의 안정성을 향상시킬 수 있습니다.
예제: web.xml 설정
<web-app>
<!-- 에러 페이지 설정 -->
<error-page>
<error-code>404</error-code>
<location>/error404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error500.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>
</web-app>
위의 설정은 404, 500 에러 및 모든 예외에 대해 각각의 에러 페이지로 리디렉션합니다.
예제: error404.jsp
<%@ page isErrorPage="true" %>
<html>
<head>
<title>404 - Page Not Found</title>
</head>
<body>
<h1>404 - 페이지를 찾을 수 없습니다.</h1>
<p>요청하신 페이지가 존재하지 않습니다.</p>
</body>
</html>
예제: error500.jsp
<%@ page isErrorPage="true" %>
<html>
<head>
<title>500 - Internal Server Error</title>
</head>
<body>
<h1>500 - 서버 내부 오류</h1>
<p>서버에서 요청을 처리하는 도중 오류가 발생했습니다.</p>
</body>
</html>
예제: error.jsp
<%@ page isErrorPage="true" %>
<html>
<head>
<title>오류 발생</title>
</head>
<body>
<h1>오류가 발생했습니다.</h1>
<p>오류 메시지: ${exception.message}</p>
<pre><%= exception.printStackTrace(new java.io.PrintWriter(out)) %></pre>
</body>
</html>
예외 처리 (Exception Handling)
JSP에서는 try-catch 블록을 사용하여 예외를 처리할 수 있습니다. 이를 통해 특정 코드 블록에서 발생할 수 있는 예외를 처리하고, 사용자에게 적절한 피드백을 제공할 수 있습니다.
예제: try-catch 블록 사용
<%@ page import="java.io.*, java.sql.*" %>
<%
try {
// 파일 읽기 예제
FileReader reader = new FileReader("somefile.txt");
BufferedReader br = new BufferedReader(reader);
String line;
while ((line = br.readLine()) != null) {
out.println(line + "<br>");
}
br.close();
} catch (FileNotFoundException e) {
out.println("파일을 찾을 수 없습니다: " + e.getMessage());
} catch (IOException e) {
out.println("파일을 읽는 도중 오류가 발생했습니다: " + e.getMessage());
}
%>
위의 예제에서는 파일 읽기 도중 발생할 수 있는 FileNotFoundException과 IOException을 처리하고, 각각의 경우에 적절한 메시지를 출력합니다.
로그 작성 (Logging)
애플리케이션의 디버깅과 문제 해결을 위해 로그를 작성하는 것이 중요합니다. JSP에서는 java.util.logging 패키지를 사용하거나, Log4j, SLF4J와 같은 외부 로깅 프레임워크를 사용할 수 있습니다.
예제: java.util.logging 사용
import java.util.logging.Logger;
import java.util.logging.Level;
// Logger 인스턴스 생성
Logger logger = Logger.getLogger("MyLogger");
try {
// 예제 코드
int result = 10 / 0;
} catch (ArithmeticException e) {
// 로그 기록
logger.log(Level.SEVERE, "ArithmeticException 발생: " + e.getMessage());
}
예제: Log4j 사용
Log4j를 사용하기 위해서는 Log4j 라이브러리를 추가하고, 설정 파일을 작성해야 합니다.
log4j.properties 설정
log4j.rootLogger=DEBUG, file, console
# ConsoleAppender 설정
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# FileAppender 설정
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/app.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
JSP에서 Log4j 사용
<%@ page import="org.apache.log4j.Logger" %>
<%
Logger logger = Logger.getLogger("MyLogger");
try {
// 예제 코드
int result = 10 / 0;
} catch (ArithmeticException e) {
// 로그 기록
logger.error("ArithmeticException 발생: " + e.getMessage(), e);
}
%>
위의 예제는 Log4j를 사용하여 ArithmeticException이 발생했을 때 로그를 기록하는 방법을 보여줍니다. 로그는 콘솔과 파일에 출력됩니다.
이로써 JSP에서 에러를 처리하고 디버깅하는 방법을 상세히 설명했습니다. 에러 페이지 설정, 예외 처리, 로그 작성을 통해 애플리케이션의 안정성과 유지 보수성을 높일 수 있습니다.
