Почему мы проверяем фильтры, которые будут применены дважды в sitemesh и других местах?

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

1 ответ

Решение

Начиная с Servlet 2.4, фильтры могут применяться и к запросу, вызываемому через диспетчер запросов. Если фильтр задан для включения или включения, например, он может выполняться несколько раз. например

<filter-mapping>
  <filter-name>Logging Filter</filter-name>
  <url-pattern>/products/*</url-pattern>
  <dispatcher>FORWARD</dispatcher>
  <dispatcher>INCLUDE</dispatcher>
  <dispatcher>REQUEST</dispatcher>
  <dispatcher>ERROR</dispatcher>
</filter-mapping>

Так, например, когда запрос обрабатывается сервлетом, и этот сервлет перенаправляет запрос куда-то еще

httpServletRequest.getRequestDispatcher("/products/somewhereElse").forward(httpServletRequest, httpServletResponse);

, тогда фильтр может работать дважды. Один раз для исходного запроса, а затем снова для пересылки, позволяющей указать URL-путь и конфигурацию диспетчера.

Другие вопросы по тегам