Выполняется ли doFilter() до или после работы Servlet?

Объект javax.servlet.Filter может использоваться как для аутентификации (где Filter должен улавливать запрос до того, как любая работа сервлета должна и для перевода XSLT (где сервлет должен быть полностью закончен, генерируя контент). Когда он действительно выполняется?

Я знаю, что это зависит от реализации (в веб-контейнере), но это, похоже, проблема, которая должна быть решена всеми из них.

Может быть, есть опция конфигурации, установленная где-то для каждой регистрации фильтра в веб-контейнере?

Дополнительно:

Кроме того, что определяет порядок выполнения фильтра? Почему FooFilter запускается до BarFilter?

Ответы

Ответ 1

Цепочка фильтров по существу обертывает вызов сервлета. Цепь будет обрабатывать все ссылки до тех пор, пока она не ударит по "дну", а затем разрешит запуск сервлета и затем вернет цепочку в обратном порядке. Например, если у вас есть новый "примерный фильтр", ваш метод doFilter() может выглядеть следующим образом:

public void doFilter(ServletRequest request,
      ServletResponse response, FilterChain chain) 
      throws IOException, ServletException {
// do pre-servlet work here
chain.doFilter(request, response);
// do post servlet work here

}

Ответ 3

@Rich: Выполняется ли doFilter() до или после выполнения Servlets?

Фильтр - это программа, которая запускается на сервере перед страницей сервлета или JSP с с которым он связан.

Ответ 4

В соответствии с фильтром спецификации servlet2.3 выполняется согласно конфигурации web.xml последовательности отображения фильтра Ref- http://www.programering.com/a/MTMyADOwATI.html