Filtre

Fermé
abourouq123 Messages postés 7 Date d'inscription samedi 23 avril 2016 Statut Membre Dernière intervention 11 juillet 2016 - 23 avril 2016 à 16:06
abourouq123 Messages postés 7 Date d'inscription samedi 23 avril 2016 Statut Membre Dernière intervention 11 juillet 2016 - 23 avril 2016 à 23:52
bsr a tt le monde

j'ai des difficulté a saisir le concept du filtre on JAVA EE, est-ce que quelqu'un peux m'envoyer un exemple concret ,merci

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
23 avril 2016 à 17:33
Bonjour,

Les filtres permettent de rajouter un comportement soit avant, soit après le traitement de chaque requête pour laquelle le filtre est configuré.

Exemple concret :

Dans le cas où le traitement de la requête renverrait une Exception on pourrait se retrouver avec une page d'erreur affichée à l'utilisateur :
Ces affichages là ne sont généralement pas utiles, d'une part parce que l'utilisateur de base ne saura pas comprendre le message, d'autre part parce que si l'utilisateur comprend l'erreur cela lui apporte des informations sur le code qu'il n'a pas à connaître...

Un moyen d'éviter ces messages d'erreurs c'est de filtrer le traitement de la requête, par exemple avec un try/catch qui va laisser s'exécuter le reste du traitement, mais en cas d'erreur va la récupérer pour afficher en résultat un message d'alerte.

package ccm.kx.servlet;

import javax.servlet.*;
import javax.servlet.http.*;

public class ExceptionFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) {
        // do nothing
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) {
        try {
            filterChain.doFilter(request, response);
        } catch (Throwable t) {
            t.printStackTrace();
            try {
                response.reset();
                response.getWriter().println("An unexpected error occured.");
                if (response instanceof HttpServletResponse) {
                    ((HttpServletResponse) response).setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
                }
            } catch (Throwable t2) {
                t2.printStackTrace();
            }
        }
    }

    @Override
    public void destroy() {
        // do nothing
    }
}

Ne pas oublier de déclarer le filtre dans le web.xml, sachant que l'ordre des filtres dans le fichier web.wml correspond à l'ordre des filtres à l'exécution. Dans notre cas, il vaut mieux que notre filtre soit tout en haut, cela permettra éventuellement de récupérer les exceptions provoquées par les filtres en dessous. Et comme il concerne tout le serveur on va filtrer sur /*

<web-app>
    <!-- Filtre qui récupère toutes les exceptions -->
    <filter>
       <filter-name>ExceptionFilter</filter-name>
       <filter-class>ccm.kx.servlet.ExceptionFilter</filter-class>
    </filter>
    <filter-mapping>
       <filter-name>ExceptionFilter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>
...
</web-app>

Maintenant si tu veux tester ceci tu n'as qu'à provoquer intentionnellement une erreur sur les autres filtres ou servlet de ton serveur et voir ce qui se passe avec ou sans mon filtre.
1
abourouq123 Messages postés 7 Date d'inscription samedi 23 avril 2016 Statut Membre Dernière intervention 11 juillet 2016
23 avril 2016 à 23:52
merci bcp c'est une belle explication
0