web-dev-qa-db-fra.com

Comment afficher une page d'erreur conviviale dans le navigateur lorsque l'exception d'exécution est levée par le servlet?

Je développe une application web avec JSF. Je l'ai testé comme je le pouvais, mais de temps en temps, des exceptions d'exécution sont levées.

Alors, comment rediriger l'utilisateur vers une page d'erreur spéciale chaque fois qu'une exception est levée (au lieu d'afficher 500 erreur avec les journaux Tomcat complets)?

39
Roman

Déclarez simplement un <error-page> dans web.xml dans lequel vous pouvez spécifier la page qui doit être affichée sur un certain Throwable (ou l'une de ses sous-classes) ou un code d'état HTTP . Par exemple.

<error-page>
    <exception-type>Java.lang.Exception</exception-type>
    <location>/error.jsp</location>
</error-page>

qui affichera la page d'erreur sur n'importe quelle sous-classe du Java.lang.Exception, mais donc pas Java.lang.Throwable ou Java.lang.Error. De cette façon, vous pouvez avoir votre propre page d'erreur pour tout type de Throwable. Par exemple. Java.sql.SQLException, Java.io.IOException etc.

Ou,

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

qui affichera la page d'erreur sur une erreur HTTP 500, mais vous pouvez également en spécifier une autre pour 404 (Page non trouvée), 403 (Interdit), etc.

Si vous déclarez <%@page isErrorPage="true" %> en haut de error.jsp, alors vous avez accès au jeté Exception (et donc aussi à tous ses getters) par ${exception} dans EL.

<p>Message: ${exception.message}</p>

Voir aussi le tutoriel Java EE 5 sur le sujet .

59
BalusC

Dans votre web.xml:

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

Vous pouvez également intercepter des exceptions spécifiques ou des exceptions qui étendent Throwable:

<error-page>
  <exception-type>Java.lang.Throwable</exception-type>
  <location>/errorpages/500.jsp</location>
</error-page>
10
Pascal Thivent
    If you use Java config in spring, you can follow,

   @Configuration
   public class ExcpConfig {

    @Bean(name = "simpleMappingExceptionResolver")
    public SimpleMappingExceptionResolver simpleMappingExceptionResolver() {
        SimpleMappingExceptionResolver resolver= new SimpleMappingExceptionResolver();

        Properties mappings = new Properties();
        resolver.setExceptionMappings(mappings); // None by default
        resolver.setExceptionAttribute("ErrorOccurred"); // Default is "exception"
        resolver.setDefaultErrorView("500"); // 500.jsp
        return r;
    }

}
0
Md. Kamruzzaman