웹사이트 검색

JSP 예외 처리 - JSP 오류 페이지


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

JSP의 예외 처리

예전에 jsp 페이지 지시문에 대한 글을 쓴 적이 있습니다.

JSP 오류 페이지

JSP 오류 페이지를 생성하려면 페이지 지시어 속성 isErrorPage 값을 true로 설정해야 합니다. 그런 다음 JSP의 예외 JSP 암시적 개체에 액세스하고 이를 사용하여 사용자 정의된 오류 메시지를 클라이언트에 보낼 수 있습니다.

JSP 오류 페이지 구성

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

오류 페이지 배포 설명자 구성

<%@ 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을 던지고 errorPage는 다음과 같은 코드를 가진 error.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>