La recherche d'un exemple pour l'insertion du contenu dans la réponse à l'aide d'un filtre de servlet

J'ai été cherché sur le net et stackoverflow pour un exemple de quelqu'un que l'insertion du contenu dans la réponse à l'aide d'un filtre de servlet, mais ne peut trouver des exemples de personnes de capture/de la compression de la sortie et/ou de modifier les en-têtes. Mon but est d'ajouter un morceau de code HTML, juste avant la fermeture </body> de tous HTML réponses.

Je suis en train de travailler sur une solution qui s'étend de la HttpServletResponseWrapper à utiliser mon propre PrintWriter, puis en substituant les méthodes d'écriture à ce sujet. À l'intérieur de la méthode d'écriture je suis stocker les 7 derniers caractères pour voir si elle est égale à la balise body de clôture, et puis j'écris mon code HTML chunk plus de la clôture de la balise body, avant de poursuivre normal des opérations d'écriture pour le reste du document.

J'ai l'impression que quelqu'un doit avoir résolu ce problème, déjà, et probablement plus élégamment que je le ferai. J'apprécierais des exemples d'utilisation d'un filtre de servlet pour insérer du contenu dans une réponse.

Mis à JOUR

De répondre à un commentaire, je suis aussi en train d'essayer de mettre en œuvre la CharResponseWrapper de http://www.oracle.com/technetwork/java/filters-137243.html. Voici mon code:

PrintWriter out = response.getWriter();
CharResponseWrapper wrappedResponse = new CharResponseWrapper(
        (HttpServletResponse)response);

chain.doFilter(wrappedRequest, wrappedResponse);
String s = wrappedResponse.toString();

if (wrappedResponse.getContentType().equals("text/html") &&
        StringUtils.isNotBlank(s)) {
    CharArrayWriter caw = new CharArrayWriter();
    caw.write(s.substring(0, s.indexOf("</body>") - 1));
    caw.write("WTF</body></html>");
    response.setContentLength(caw.toString().length());
    out.write(caw.toString());
}
else {
    out.write(wrappedResponse.toString());
}

out.close();

Je suis également emballage de la demande, mais que le code fonctionne et ne devrait pas affecter la réponse.

InformationsquelleAutor matt snider | 2013-02-06