Tomcat doFilter () вызывается с подтвержденным ответом - PullRequest
7 голосов
/ 05 сентября 2008

У меня есть Tomcat Filter, который делегирует запросы объекту обработки в зависимости от URL. Это единственный фильтр в FilterChain. У меня есть приложение Ajax, которое забивает этот фильтр большим количеством запросов.

Недавно я заметил проблему, когда метод фильтра doFilter часто вызывается с подтвержденным ответом в качестве параметра (внутренне это ответ койота, помеченный как принятый).

Мне кажется, что это может произойти только в том случае, если метод recycle() не вызывается для этого ответа койота. Я проверил, чтобы убедиться, что я не храню ссылки ни на один из объектов запроса, ответа, outputStream или объекта записи. Кроме того, я позаботился о том, чтобы закрыть outputStream в блоке finally. Однако это не решает эту проблему.

Звучит так, будто я что-то делаю, чтобы злоупотребить контейнером сервлета, но у меня возникают проблемы с его отслеживанием.

Ответы [ 2 ]

3 голосов
/ 05 сентября 2008

Я пытался использовать Tomcat 6.16 и 6.18. Это определенно единственный фильтр в цепочке.

Кажется, что-то хранит ссылку на сервлет outputStream. Я обернул ServletOutputStream в свой собственный OutputStream, а затем убедился, что ссылка уничтожена. Это устранило проблему, так что я больше не вижу принятый ответ, переданный.

Это странный побочный эффект от удержания ссылки. Но я не думаю, что это квалифицируется как ошибка Tomcat. Скорее всего, ошибка в ImageIO.createImageOutputStream (), которая, как я подозреваю, содержит ссылку.

0 голосов
/ 05 сентября 2008

Какую версию Tomcat вы используете? Для меня это звучит как ошибка в Tomcat, я не могу придумать причину, по которой ваш метод doFilter должен вызываться с уже отправленным ответом (если этот фильтр - единственный в цепочке, вы уверены в этом? ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...