Ответ BalusC хороший, но он может быть немного ошеломляющим, если вы только начинаете.
Проще говоря: SerlvetResponse и его расширение HttpServletResponse - это интерфейсы, сообщающие вам, какие методы доступны для вызова, чтобы выполнить то, что вам нужно. В ходе обычной работы с Filters, Servlets и др. Вы будете часто использовать HttpServletResponse, чтобы сообщить своему приложению, как реагировать на запросы.
HttpServletResponseWrapper - это одна конкретная реализация HttpServletResponse, которая дает вам удобный способ обернуть существующий ответ некоторой собственной логикой без необходимости написания совершенно новой реализации интерфейса. У него есть много методов, так что это действительно хорошо. В качестве тривиального примера предположим, что вы хотите запретить вызовы response.flushBuffer () . Этот код, используя HttpServletResponseWrapper, сделает это:
class DisallowFlushResponseWrapper extends HttpServletResponseWrapper {
public DisallowFlushResponseWrapper(HttpServletResponse response) {
super(response);
}
@Override
public void flushBuffer() {
throw new UnsupportedOperationException("Don't call this!");
}
}
Типичный способ использования такой оболочки - создать фильтр, подобный этому:
class DisallowFlushFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) {
if (response instanceof HttpServletResponse) {
HttpServletResponse newResponse =
new DisallowFlushResponseWrapper((HttpServletResponse) response);
chain.doFilter(request, newResponse);
}
...
}
...
}
Обратите внимание, что мы оборачиваем ответ, поступающий в фильтр, экземпляром нашей собственной оболочки. Затем мы передаем упаковщик следующему элементу в цепочке фильтров. Таким образом, все, что идет после этого фильтра, получит исключение, если вызовет flushBuffer (), потому что он вызовет его в нашей оболочке. Оболочка из-за своего поведения по умолчанию делегирует любой другой вызов обернутого ответа, который является реальным, поэтому все, кроме вызовов этого одного метода, будет работать нормально.