Comment gérer correctement les Exceptions dans une application JSP / Servlet?

comment gérer correctement les erreurs rencontrées dans un servlet? En ce moment, l'application que j'ai hérité (utilise uniquement JSP/Servlet) a une superclasse appelée Controller qui s'étend <!-Et dont tous les autres servlets proviennent. Dans ce Controller classe est un try et catch bloc comme suit:

try {
    // execute doPost or doGet here
} catch (Exception e) {
    // show a generic error page
}

Est-ce la bonne façon de le faire? Il semble maladroit et ne semble pas toujours fonctionner. Je ne suis qu'un stagiaire donc je n'ai pas beaucoup d'expérience avec cette. Tous les conseils? Je suis en essayant de rendre l'application robuste..

12
demandé sur Damian Wells 2011-05-31 07:37:40

4 réponses

la chose standard à faire est d'avoir votre Servlet doXxx() méthode (par exemple. doGet(),doPost(), etc. lancer un ServletException et laisser le conteneur attraper et le manipuler. Vous pouvez spécifier une page d'erreur personnalisée à afficher dans WEB-INF/web.xml<error-page> balise:

<error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
</error-page>

si vous finissez par attraper un Exception vous ne pouvez pas manipuler avec élégance, simplement envelopper dans un ServletException comme ceci:

try {
    // code that throws an Exception
} catch (Exception e) {
    throw new ServletException(e);
}
16
répondu Asaph 2011-05-31 03:42:54

Ou vous pouvez intercepter toutes vos exceptions à l'aide d'une servlet:

<!-- WEB-INF/web.xml -->
<servlet>
    <servlet-name>ErrorServlet</servlet-name>
    <servlet-class>com.domain.MyErrorServlet</servlet-class>
</servlet>    
<servlet-mapping>
<servlet-name>ErrorServlet</servlet-name>
    <url-pattern>/error</url-pattern>
</servlet-mapping>
<error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/error</location>
</error-page>

Puis dans la servlet vous pouvez gérer l'exception comme ceci

public class MyErrorServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response){
       Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception");
       // You can log the exception, send to email, etc
    }
}
17
répondu Dorin Grecu 2011-11-25 13:33:21

il existe quelques bonnes pratiques en matière d'exceptions. En général, vous pouvez le gérer, le laisser gonfler(pour les exceptions non vérifiées), le log, ou l'envelopper.

vous devriez éviter d'attraper et de lancer exception, à la place attraper l'exception plus spécifique, ou créer votre propre type d'exception et envelopper l'exception actuelle dans cela.

Heres une grande ressource pour l'utiliser comme "ne pas faire" en termes de exception: http://today.java.net/article/2006/04/04/exception-handling-antipatterns

2
répondu Dimitar 2011-05-31 03:50:35

dans JSP vous pouvez utiliser la bibliothèque JSTL core

1) Importer tablib sur le dessus du fichier JSP

<%@ taglib prefi x=”c” uri=”http://java.sun.com/jsp/jstl/core” %>
<c:catch var="myExceptionObject">
    Code that might throw Exception
</c:catch>

<c:if test="${myExceptionObject} != null">
    There was an exception: ${myExceptionObject.message}
</c:if>
1
répondu Chirag Visavadiya 2018-02-07 15:56:59