Что doFilter делает в doFilter методе в фильтрах Java?

Я хочу знать, что в нашем dofilter методе я выполнил этот вызов chain.doFilter. Что doFilter делает в doFilter? Это не собирающийся получать рекурсивный вызов?

38
задан BalusC 27 April 2010 в 21:41
поделиться

5 ответов

Фильтры сервлета являются реализацией цепочки ответственности .

Все фильтры цепны (в порядке их определения в web.xml). Цепь () продолжается к следующему элементу в цепочке. Последний элемент цепи является целевой ресурс / сервлет.

53
ответ дан 27 November 2019 в 03:33
поделиться

Это называет дофильтром методом цепи Объект, не сам, поэтому нет, это не будет рекурсивным.

Название Цепочка позволяет предположить, что у вас есть последовательность фильтров, причем каждый фильтр выполняет некоторую обработку, а затем передающую следующую последовательность, поэтому каждый объект имеет элемент Чтобы указать на следующий фильтр в последовательности, которая вызывается после того, как фильтр выполнил свою собственную обработку. Последнее в последовательности, вероятно, будет тогда NULL как цепочка значение, или она умеет самостоятельно, что это последний в последовательности.

14
ответ дан 27 November 2019 в 03:33
поделиться

, вызывая Chain.doFilter Вы передаете запрос / ответ на следующий фильтр в вашей цепочке фильтра. Если вы не назваете это, то следующий фильтр (вероятно, определен в вашем web.xml), не будет выполнен.

Если вы только что позвонили дофильтеру, то да, у вас будет бесконечная рекурсия и стойка. Тем не менее, вы называете дофилтер-метод объекта FilterChain, который дает ему выполнить следующий фильтр.

1
ответ дан 27 November 2019 в 03:33
поделиться

Внутренне он вызывает doFilter следующего фильтра в цепочке фильтрации, а по завершении цепочки вызывает целевой сервлет.

2
ответ дан 27 November 2019 в 03:33
поделиться

Не имея ни одного кода, о котором вы говорите, я могу только предположить, что вам что-то вроде:

class Filter implements FilterAPI {
  private FilterAPI chain;
  FilterAPI(FilterAPI chain) { this.chain = chain; }
  @override void doFilter (Set setToFilter) {
    // do some filtering on setToFilter
    chain.doFilter(setToFilter);
  }
}

, если это так, то вы не звоните ничего рекурсивно, вы звоните в дофильтере () на другом объекте. Как упомянуто на другом ответе, это хорошо известная цепочка дизайн ответственности.

1
ответ дан 27 November 2019 в 03:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: