Uitzonderingsafhandeling in JSP wordt gedaan met behulp van JSP-uitzonderingspagina’s.
Uitzonderingsafhandeling in JSP
Enige tijd geleden schreef ik een bericht over Uitzonderingsafhandeling in Servlets en waarom we dit nodig hebben. Dezelfde uitleg is ook van toepassing op JSP-pagina’s en daarom biedt Java EE een duidelijke aanpak voor uitzonderingsafhandeling in JSP met behulp van JSP-foutpagina’s. Om uitzonderingen die door de JSP-pagina worden gegenereerd af te handelen, hebben we alleen een foutpagina nodig en moeten we de foutpagina definiëren in de JSP met behulp van jsp-pagina-directive.
JSP-foutpagina
Om een JSP-foutpagina te maken, moeten we de attribuutwaarde isErrorPage van de pagina-directive instellen op true. Vervolgens kunnen we de uitzondering jsp impliciet object in de JSP benaderen en gebruiken om aangepaste foutmeldingen naar de client te sturen.
JSP Foutpagina Configuratie
We moeten de paginadirective errorPage attribuut instellen om de JSP te definiëren die elke uitzondering afgehandeld door de JSP-servicemethode zal verwerken. Wanneer de JSP-foutpagina naar servletcode wordt vertaald, breidt deze uit naar org.apache.jasper.runtime.HttpJspBase
in Tomcat.
Configuratie van foutpaginabeschrijving
Meestal hebben we een gemeenschappelijke foutpagina die we voor alle JSP’s willen gebruiken, dus in plaats van deze afzonderlijk in te stellen voor alle JSP’s, kunnen we de foutpagina definiëren in web.xml met het element error-page. We kunnen de JSP-foutpagina configureren om andere foutcodes zoals 404 te behandelen. Laten we kijken hoe al deze elementen samenkomen in een webtoepassing. We zullen een eenvoudige webtoepassing JSPExceptionHandling maken waarvan de projectstructuur eruit zal zien als de onderstaande afbeelding. Het instappunt van de toepassing is
index.jsp
waarvan de code hieronder wordt gegeven.
<%@ 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>
Wanneer we het formulier verzenden, wordt het verzoek naar login.jsp
gestuurd, de code is als volgt.
<%@ 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>
Let op dat als invoerparameters null of leeg zijn, het een ServletException
werpt met een passend bericht en errorPage
is gedefinieerd als error.jsp
waarvan de code er als volgt uitziet.
<%@ 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>
Let op dat de waarde van het isErrorPage
paginadirective attribuut true
is. Wanneer toepassingsbronnen uitzonderingen veroorzaken, is de foutcode 500, de code is geschreven om zowel uitzonderingen op toepassingsniveau als fouten zoals 404 – pagina niet gevonden te behandelen. Let ook op het gebruik van de include directive om de gebruiker een aanmeldingspagina te tonen in geval van een uitzondering. Hier is de web.xml waarin we de foutpagina voor de toepassing definiëren.
<?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>
Wanneer we de bovenstaande toepassing uitvoeren, krijgen we de volgende pagina’s als reactie. Aanmeldingspagina JSP-foutpagina voor uitzondering
JSP-foutpagina voor foutcode 404
Dat is alles voor het behandelen van uitzonderingen in JSP-pagina’s, het is heel gemakkelijk te implementeren en we zouden het moeten gebruiken om ervoor te zorgen dat we alle uitzonderingen en foutcodes afhandelen en een nuttige reactie naar de client sturen in plaats van de standaardfoutpagina van de container.
Source:
https://www.digitalocean.com/community/tutorials/jsp-exception-handling-jsp-error-page