Gestione delle eccezioni in JSP viene effettuata mediante le pagine di eccezione JSP.
Gestione delle Eccezioni in JSP
Tempo fa ho scritto un post sulla Gestione delle Eccezioni Servlet e sul motivo per cui ne abbiamo bisogno. La stessa spiegazione si applica anche alle pagine JSP, ed è per questo che Java EE fornisce un approccio chiaro per la gestione delle eccezioni in JSP utilizzando le pagine di errore JSP. Per gestire le eccezioni generate dalla pagina JSP, tutto ciò di cui abbiamo bisogno è una pagina di errore e definire la pagina di errore in JSP utilizzando la direttiva pagina jsp.
Pagina di Errore JSP
Per creare una pagina di errore JSP, è necessario impostare il valore dell’attributo della direttiva della pagina isErrorPage a true, quindi possiamo accedere all’oggetto implicito oggetto jsp nella JSP e usarlo per inviare un messaggio di errore personalizzato al client.
Configurazione della Pagina di Errore JSP
È necessario impostare l’attributo errorPage della direttiva della pagina per definire la JSP che gestirà qualsiasi eccezione generata dal metodo di servizio JSP. Quando la pagina di errore JSP viene tradotta in codice servlet, estende org.apache.jasper.runtime.HttpJspBase
in Tomcat.
Configurazione del Descrittore di Distribuzione della Pagina di Errore
Nella maggior parte dei casi, abbiamo una pagina di errore comune che vogliamo utilizzare per tutte le JSP, quindi anziché configurarla in tutte le JSP singolarmente, possiamo definire la pagina di errore in web.xml con l’elemento error-page. Possiamo configurare la pagina di errore JSP per gestire altri codici di errore come il 404. Vediamo come tutto questo si inserisce in un’applicazione web. Creeremo un’applicazione web semplice JSPExceptionHandling il cui struttura del progetto sarà simile all’immagine sottostante. Il punto di ingresso dell’applicazione è
index.jsp
il cui codice è fornito di seguito.
<%@ 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>
Quando inviamo il modulo, la richiesta verrà inviata a login.jsp
, il codice è simile a quanto segue.
<%@ 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>
Si noti che se i parametri di input sono nulli o vuoti, viene lanciata un’eccezione ServletException
con un messaggio adeguato e errorPage
è definito come error.jsp
il cui codice è come di seguito.
<%@ 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>
Si noti che il valore dell’attributo della direttiva di pagina isErrorPage
è true
. Quando le risorse dell’applicazione generano eccezioni, il codice di errore è 500, il codice è scritto per gestire sia le eccezioni di livello applicativo che gli errori come il 404 – pagina non trovata. Si noti anche l’uso della direttiva di inclusione per presentare all’utente la pagina di accesso in caso di eccezione. Ecco il file web.xml dove stiamo definendo la pagina di errore per l’applicazione.
<?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>
Ora quando eseguiamo l’applicazione sopra, otteniamo le seguenti pagine come risposta. Pagina di accesso Pagina di errore JSP per eccezione
Pagina di errore JSP per codice errore 404
Questo è tutto per la gestione delle eccezioni nelle pagine JSP, è molto facile da implementare e dovremmo usarlo per assicurarci di gestire tutte le eccezioni e i codici di errore e inviare una risposta utile al client anziché la pagina di errore predefinita del contenitore.
Source:
https://www.digitalocean.com/community/tutorials/jsp-exception-handling-jsp-error-page