Pregunta

Tengo un filtro Tomcat que delega solicitudes a un objeto de manejo según la URL.Este es el único filtro en el FilterChain.Tengo una aplicación Ajax que aplica este filtro con muchas solicitudes.

Recientemente noté un problema donde el filtro doFilter El método a menudo se llama con una respuesta comprometida como parámetro (internamente, es la respuesta del coyote la que está marcada como comprometida).

Me parece que la única manera de que esto pueda suceder es si el recycle() El método no se invoca en esta respuesta de coyote.He verificado para asegurarme de no mantener referencias a ninguno de los objetos de solicitud, respuesta, flujo de salida o escritor.Además, me aseguré de cerrar OutputStream en un bloque finalmente.Sin embargo, esto no resuelve este problema.

Parece que estoy haciendo algo para abusar del contenedor de servlets, pero tengo problemas para localizarlo.

¿Fue útil?

Solución

Intenté usar Tomcat 6.16 y 6.18.Este es definitivamente el único filtro de la cadena.

Parece que algo mantiene una referencia al servlet OutputStream.Envolví ServletOutputStream en mi propio OutputStream y luego me aseguré de que la referencia estuviera destruida.Esto solucionó el problema por lo que ya no veo una respuesta confirmada.

Este es un extraño efecto secundario de tener una referencia.Pero no creo que califique como un error de Tomcat.Lo más probable es que haya un error en ImageIO.createImageOutputStream() que sospecho que contiene la referencia.

Otros consejos

¿Qué versión de Tomcat estás usando?Para mí, esto suena como un error en Tomcat, no se me ocurre ninguna razón por la que se deba llamar a su método doFilter con una respuesta que ya ha sido confirmada (si ese filtro es el único en la cadena, ¿está seguro de esto? ).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top