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..
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);
}
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
}
}
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
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>