Question

J'ai un Tomcat Filtre que les délégués des demandes pour le traitement d'un objet en fonction de l'URL.C'est le seul filtre dans le FilterChain.J'ai une application Ajax que les marteaux de ce filtre avec beaucoup de demandes.

Récemment, j'ai remarqué un problème où le filtre est doFilter la méthode est souvent appelée avec un engagement de réponse en tant que paramètre (à l'Interne, c'est le coyote réponse qui est marqué commis).

Il me semble que la seule façon que cela peut se produire si l' recycle() la méthode n'est pas appelée sur ce coyote réponse.J'ai vérifié pour s'assurer que je ne suis pas en gardant les références à tout de la requête, la réponse, outputStream, ou de l'écrivain objets.En outre, j'ai fait en sorte pour fermer la outputStream dans un bloc finally.Cependant, cela ne résout pas ce problème.

Cela sonne comme je suis en train de faire quelque chose d'abus du conteneur de servlet, mais je vais avoir du mal à suivre vers le bas.

Était-ce utile?

La solution

J'ai essayé d'utiliser Tomcat 6.16 et 6.18.Ce n'est certainement est le seul filtre de la chaîne.

Il semble que quelque chose est de garder une référence à la servlet outputStream.J'ai enveloppé le ServletOutputStream dans mon propre OutputStream et ensuite veillé à ce que la référence est détruite.Cette correction du problème de sorte que je ne vois plus un commis de réponse transmise.

C'est d'un drôle d'effet secondaire de la tenue d'une référence.Mais je ne pense pas qu'il soit considéré comme un Tomcat bug.Plus probablement un bug dans ImageIO.createImageOutputStream (), que je soupçonne est maintenant la référence.

Autres conseils

Quelle est la version de Tomcat utilisez-vous?Pour moi, cela ressemble à un bug dans Tomcat, je ne peux pas penser à une raison pourquoi votre doFilter méthode doit être appelée avec une réponse qui a déjà été engagés (si le filtre est le seul dans la chaîne, êtes-vous sûr de cela?).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top