`JSP` 예외 처리 – `JSP` 오류 페이지

JSP에서 예외 처리는 JSP 예외 페이지를 통해 수행됩니다.

JSP에서 예외 처리

얼마 전에 서블릿 예외 처리에 대해 포스트를 작성했으며, 왜 필요한지에 대한 설명도 동일하게 JSP 페이지에도 적용됩니다. 그래서 Java EE에서는 JSP 오류 페이지를 사용하여 JSP에서 발생하는 예외를 처리하기 위한 명확한 접근 방식을 제공합니다. JSP 페이지에서 발생하는 예외를 처리하기 위해서는 오류 페이지가 필요하며, JSP에서 jsp 페이지 지시문을 사용하여 오류 페이지를 정의해야 합니다.

JSP 오류 페이지

JSP 오류 페이지를 생성하기 위해서는 페이지 지시문 속성 isErrorPage의 값을 true로 설정해야 하며, 그런 다음 JSP에서 예외 jsp 암시적 객체에 액세스하여 사용자 정의 오류 메시지를 클라이언트에게 전송할 수 있습니다.

JSP 오류 페이지 구성

JSP 서비스 메소드에서 발생하는 예외를 처리할 JSP를 정의하기 위해 페이지 지시문 errorPage 속성을 설정해야합니다. JSP 오류 페이지는 Tomcat에서 서블릿 코드로 변환될 때 org.apache.jasper.runtime.HttpJspBase를 상속합니다.

오류 페이지 배포 서술자 구성

대부분의 경우 모든 JSP에서 공통 오류 페이지를 사용하려는 경우 JSP 개별적으로 구성하는 대신 web.xml에 error-page 요소로 오류 페이지를 정의할 수 있습니다. 또한 404와 같은 다른 오류 코드를 처리하기 위해 JSP 오류 페이지를 구성할 수도 있습니다. 이를 웹 응용 프로그램에서 모두 어떻게 사용하는지 살펴보겠습니다. 아래 이미지와 같이 JSPExceptionHandling이라는 간단한 웹 응용 프로그램을 만들 것입니다. 응용 프로그램의 진입점은 다음과 같은 코드를 가진 index.jsp입니다.

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Login Page</title>
</head>
<body>
<form action="login.jsp" method="post">
<strong>User ID</strong>:<input type="text" name="id"><br>
<strong>Password</strong>:<input type="password" name="password"><br>
<input type="submit" value="Login">
</form>
</body>
</html>

양식을 제출하면 요청이 login.jsp로 전송되며, 코드는 다음과 같습니다.

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII" errorPage="error.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>User Home Page</title>
</head>
<body>
<%
	String user = request.getParameter("id");
	String pwd = request.getParameter("password");
	
	if(user == null || "".equals(user) || pwd == null || "".equals(pwd)){
		throw new ServletException("Mandatory Parameter missing");
	}
	
%>

<%-- do some DB processing, not doing anything for simplicity --%>
Hi <%=user %>
</body>
</html>

입력 매개변수가 null이거나 비어있는 경우, 이에 대해 ServletException을 throw하고 적절한 메시지와 함께 errorPageerror.jsp로 정의되어 있음을 알려드립니다.

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII" isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Error Page</title>
</head>
<body>
<% if(response.getStatus() == 500){ %>
<font color="red">Error: <%=exception.getMessage() %></font><br>

<%-- include login page --%>
<%@ include file="index.jsp"%>
<%}else {%>
Hi There, error code is <%=response.getStatus() %><br>
Please go to <a href="/index.jsp">home page</a>
<%} %>
</body>
</html>

isErrorPage 페이지 지시자 속성 값이 true임을 유의해주세요. 응용 프로그램 리소스에서 예외가 발생하는 경우, 오류 코드는 500이며, 응용 프로그램 수준의 예외와 404 – 페이지를 찾을 수 없음과 같은 오류를 처리하기 위해 코드가 작성되었음을 알려드립니다. 또한 예외 발생 시 사용자에게 로그인 페이지를 제시하기 위해 include 지시자를 사용하는 것에 유의해주세요. 다음은 응용 프로그램의 오류 페이지를 정의하는 web.xml입니다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://java.sun.com/xml/ns/javaee" xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>JSPExceptionHandling</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
   
   <error-page>
   <error-code>404</error-code>
   <location>/error.jsp</location>
   </error-page>
   
   <error-page>
   <exception-type>java.lang.Throwable</exception-type>
   <location>/error.jsp</location>
   </error-page>
   
</web-app>

이제 위의 응용 프로그램을 실행하면 다음과 같은 페이지가 응답으로 표시됩니다. 로그인 페이지 예외에 대한 JSP 오류 페이지 404 오류 코드에 대한 JSP 오류 페이지 JSP 페이지에서의 예외 처리에 대한 설명은 여기까지입니다. 이는 구현하기 매우 쉽고, 모든 예외와 오류 코드를 처리하고 컨테이너의 기본 오류 페이지 대신 유용한 응답을 클라이언트에게 전송하는 데 사용해야 합니다.

Source:
https://www.digitalocean.com/community/tutorials/jsp-exception-handling-jsp-error-page