Maison > Java > javaDidacticiel > Comment capturer et enregistrer le contenu du flux de sortie de réponse de servlet HTTP en Java ?

Comment capturer et enregistrer le contenu du flux de sortie de réponse de servlet HTTP en Java ?

Mary-Kate Olsen
Libérer: 2024-11-15 16:06:02
original
1033 Les gens l'ont consulté

How to Capture and Log HTTP Servlet Response Output Stream Content in Java?

Capture et journalisation du contenu du flux de sortie de la réponse du servlet HTTP

Dans les serveurs Web Java, vous pouvez rencontrer des situations dans lesquelles vous devez enregistrer à la fois la requête entrante paramètres et la réponse du serveur qui en résulte. Cet article fournit une solution pour obtenir le contenu du flux de sortie de réponse du servlet HTTP à des fins de journalisation.

Pour y parvenir, vous pouvez utiliser un filtre pour envelopper l'objet HttpServletResponse avec une implémentation personnalisée appelée HttpServletResponseWrapper. Dans ce wrapper, nous remplaçons les méthodes getOutputStream() et getWriter() pour renvoyer une implémentation personnalisée de ServletOutputStream, ServletOutputStreamCopier.

Le ServletOutputStreamCopier encapsule le flux de sortie d'origine et copie les octets écrits dans un ByteArrayOutputStream, accessible sous forme d'octet[ ] via la méthode getCopy().

Une fois le wrapper de réponse personnalisé en place, nous le transmettons à l'appel FilterChain#doFilter(). Une fois le cycle requête-réponse terminé, nous récupérons le contenu de la réponse copié à partir du ServletOutputStreamCopier pour la journalisation.

Voici un exemple d'implémentation d'un tel filtre :

public class ResponseLogger implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
        if (response.getCharacterEncoding() == null) {
            response.setCharacterEncoding("UTF-8");
        }

        HttpServletResponseCopier responseCopier = new HttpServletResponseCopier((HttpServletResponse) response);

        chain.doFilter(request, responseCopier);
        responseCopier.flushBuffer();
        byte[] copy = responseCopier.getCopy();
        System.out.println(new String(copy, response.getCharacterEncoding()));
    }
}
Copier après la connexion

Cette implémentation de filtre capture la réponse sortie sous forme de tableau d'octets, vous permettant de gérer la journalisation ou tout autre traitement nécessaire.

Les extraits de code pour HttpServletResponseCopier et ServletOutputStreamCopier sont également fournis pour compléter la solution.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal