Зачем использовать HttpServletResponseWrapper вместо расширения HttpServletResponse напрямую - PullRequest
2 голосов
/ 10 октября 2010

Я смотрю на декоратор HttpServletResponseWrapper, и мне интересно, каково преимущество использования этой оболочки по сравнению с простым расширением HttpServletResponse и переопределением того, что вам нужно? Какая польза от этой промежуточной оболочки, которая просто делегирует все свои методы?

ТНХ

Ответы [ 3 ]

4 голосов
/ 10 октября 2010

Это избавит вас от использования большого количества шаблонов, если вы в основном оборачиваете другой HttpServletResponse.Но что более важно, это означает, что ваш фильтр будет работать, когда будет выпущена новая версия спецификации JavaEE с новыми методами на интерфейсе httpServletResponse, вместо сбоя во время выполнения (и во время компиляции), потому что вы не реализуете новый интерфейс.

2 голосов
/ 11 октября 2010

Хотя ответ @ Carey верный, это не самая важная причина для класса-оболочки.

В спецификации сервлета сказано, что если вы перенаправляете запрос или ответ внутри сервлета / фильтра / JSP, то объекты запроса и ответа должны быть теми же объектами запроса / ответа, в которых контейнер был изначально передан, либообертки вокруг них, используя предоставленные классы оберток.

Так что для фильтров, которые хотят переопределить поведение предоставленных объектов запроса / ответа, они должны расширять обертки, а не просто создавать новый запрос / ответкласс из интерфейсов.

Обратите внимание, что некоторые контейнеры сервлетов (например, более старые версии Tomcat) игнорируют эту часть спецификации.

2 голосов
/ 10 октября 2010

HttpServletResponse - это интерфейс, * Wrapper - это класс, реализующий этот интерфейс.

Расширяя * Wrapper, вам не нужно реализовывать всю плиту, только несколько битов, которые вы хотите.*

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