Выполняется ли 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
}
Ответ 2
alt text http://img228.imageshack.us/img228/8945/filter.png
О заказе: как я помню из контейнера spec сервлетов, не гарантирует, что фильтры будут вызываться в некотором порядке.
Ответ 3
@Rich: Выполняется ли doFilter() до или после выполнения Servlets?
Фильтр - это программа, которая запускается на сервере перед страницей сервлета или JSP с с которым он связан.
Ответ 4
В соответствии с фильтром спецификации servlet2.3 выполняется согласно конфигурации web.xml последовательности отображения фильтра Ref- http://www.programering.com/a/MTMyADOwATI.html