Я видел много примеров того, как и почему завернуть ответ. Насколько я понимаю, класс, расширяющий HttpServletResponseWrapper
, предоставляет поток сервлету для записи данных поверх ответа (плюс некоторые дополнительные методы, которые мы можем использовать согласно нашей необходимости). Так что сервлет может записывать данные через настроенный поток ответов.
Кроме того, в пользовательском классе мы можем изменять содержимое потока, как; удаление пробела, преобразование регистра, сжатие и т. д. Но любая такая операция может быть выполнена после того, как сервлет завершит работу и закроет поток ответа. Таким образом, в основном пользовательский класс используется только для хранения данных ответа. И мы обязаны записывать данные в исходный поток ответов дальше, когда управление возвращается обратно в фильтр из сервлета.
Ссылочный код для моего понимания выше
CharResponseWrapper wrapper = new CharResponseWrapper((HttpServletResponse)response);
chain.doFilter(request, wrapper);
response.setContentLength(caw.toString().length());
out.write(caw.toString());
out.close();
Другие ссылки
http://jango.wordpress.com/2009/04/27/js-minify-filter-in-java/
http://onjava.com/pub/a/onjava/2003/11/19/filters.html?page=3
Теперь, пожалуйста, объясните мне код, предложенный balusc
HttpServletResponse httpres = (HttpServletResponse) response;
chain.doFilter(request, wrapResponse(httpres, createTrimWriter(httpres)));
Не требует ли запись данных и в поток ответов? Пожалуйста, скажите мне, что я пропускаю какую-то часть.