Filtre

abourouq123 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
abourouq123 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention  
 
merci bcp c'est une belle explication
0