
Envoyé par
Jacques - 06
Si cela intéresse d'autres, voici ma réponse MP:
Le filtre te permet d'intercepter l'appel à une url entrante de ton application, et donc de manipuler éventuellement la request, et d'intercepter le flux sortant sur la response.
Dans ton cas, il te faut intercepter le flux de sortie. Donc dans ton filtre, une fois la Jsp exécutée, tu lis l'OutputStream, que tu renvoies sur la sortie, agrémenté de ton code Javascript.
Pour cela il te faut surcharger l'objet Response afin de pouvoir intercepter la génération du flux de sortie (sinon tu ne pourras pas le lire). Ceci se fait ensurchargeant l'objet HttpServletResponseWrapper ainsi que l'objet ServletOutputStreamWrapper (c'est lui qui va te permettre d'accéder au contenu généré). Il faut bien sûr une méthode te permettant d'accéder au ServletOutputStreamWrapper.
Dans le ServletOutputStreamWrapper tu surcharges les méthodes write, afin qu'elles écrivent dans un buffer. Tu ajoutes une méthode pour accéder à ton buffer.
La surcharge du ServletOutputStreamWrapper doit te permettre d'instancier ta nouvelle classe ServletOutputStreamWrapper en surchargeant la méthode getOutputStream.
Enfin dans ton filter, après l'appel à chain.doFilter(req, resp), où resp est ta classe surchargeant HttpServletResponseWrapper tu peux récupérer le flux généré, que tu vas pouvoir parcourir et renvoyer au browser sur l'OutputStream ou le Writer, avec tes modifications.
Cela peut sembler complexe, mais c'est à ma connaissance la seule méthode d'intercepter et de modifier le code généré par une Jsp/Servlet.
Jacques Desmazières
Partager