JSP-Fehlerbehandlung – JSP-Fehlerseite

Ausnahmebehandlung in JSP

Vor einiger Zeit habe ich einen Beitrag über die Behandlung von Servlet-Ausnahmen geschrieben und warum wir sie benötigen. Die gleiche Erklärung gilt auch für JSP-Seiten, und deshalb bietet Java EE einen klaren Ansatz für die Ausnahmebehandlung in JSP mithilfe von JSP-Fehlerseiten. Um Ausnahmen zu behandeln, die von der JSP-Seite ausgelöst wurden, benötigen wir lediglich eine Fehlerseite und definieren diese in JSP mithilfe der jsp page-Direktive.

JSP-Fehlerseite

Um eine JSP-Fehlerseite zu erstellen, müssen wir den Wert des isErrorPage-Attributs der Seitendirektive auf true setzen. Dann können wir auf die Ausnahme über das jsp implizite Objekt in der JSP zugreifen und es verwenden, um eine benutzerdefinierte Fehlermeldung an den Client zu senden.

Konfiguration der JSP-Fehlerseite

Wir müssen das Seitenanweisungsattribut errorPage festlegen, um die JSP zu definieren, die jede vom JSP-Service-Methoden geworfene Ausnahme behandelt. Wenn die JSP-Fehlerseite in Servlet-Code übersetzt wird, erweitert sie org.apache.jasper.runtime.HttpJspBase in Tomcat.

Konfiguration des Fehlerseitenbereitstellungsdokuments

Oft haben wir eine gemeinsame Fehlerseite, die wir für alle JSPs verwenden möchten. Anstatt sie in allen JSPs individuell zu konfigurieren, können wir die Fehlerseite in der web.xml-Datei mit dem Element error-page definieren. Wir können die JSP-Fehlerseite auch konfigurieren, um andere Fehlercodes wie 404 zu behandeln. Schauen wir uns an, wie all dies in einer Webanwendung zusammenpasst. Wir erstellen eine einfache Webanwendung namens JSPExceptionHandling, deren Projektstruktur wie im untenstehenden Bild aussehen wird. Der Einstiegspunkt der Anwendung ist index.jsp, dessen Code unten angegeben ist.

<%@ 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>

Wenn wir das Formular absenden, wird die Anfrage an login.jsp gesendet, dessen Code wie folgt aussieht.

<%@ 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>

Beachten Sie, dass bei leeren oder null Eingabeparametern eine ServletException mit einer geeigneten Nachricht ausgelöst wird und errorPage als error.jsp definiert ist, dessen Code wie folgt aussieht.

<%@ 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>

Beachten Sie, dass der Wert des isErrorPage-Seitendirektivattributs true ist. Wenn Anwendungsressourcen Ausnahmen auslösen, ist der Fehlercode 500. Der Code ist so geschrieben, dass er sowohl Anwendungsfehler als auch Fehler wie 404 – Seite nicht gefunden behandelt. Beachten Sie auch die Verwendung der Include-Direktive, um dem Benutzer im Falle einer Ausnahme die Anmeldeseite anzuzeigen. Hier ist die web.xml, in der wir die Fehlerseite für die Anwendung definieren.

<?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>

Wenn wir die oben genannte Anwendung ausführen, erhalten wir folgende Seiten als Antwort. Anmeldeseite JSP-Fehlerseite für Ausnahme JSP-Fehlerseite für Fehlercode 404 Das ist alles zur Behandlung von Ausnahmen in JSP-Seiten. Es ist sehr einfach zu implementieren und wir sollten es verwenden, um sicherzustellen, dass wir alle Ausnahmen und Fehlercodes behandeln und eine nützliche Antwort an den Client senden, anstatt die Standardfehlerseite des Containers zu verwenden.

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