Как использовать продолжения причала с диспетчеризацией Filter и FORWARD? - PullRequest
0 голосов
/ 26 февраля 2011

У меня есть фильтр сервлетов, который служит основой моего веб-стека.В моем файле web.xml я указал, что хочу, чтобы фильтр также выполнял функции диспетчера FORWARD.

  <filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>  
  </filter-mapping>

Это требуется для другой функции в моей среде.

Теперь я пытаюсь добавить поддержку асинхронных продолжений.Проблема, с которой я столкнулся, заключается в том, что при возобновлении продолжения (или когда истечение срока действия продолжения) Jetty никогда не отправляет «возобновленный» запрос моему фильтру.Если я напишу сервлет, то он получит «возобновленный» запрос.И если я удаляю <dispatcher>FORWARD</dispatcher> из моего файла web.xml, тогда фильтр получает запрос «возобновлен».В любом случае, я могу отправить «возобновленный» запрос на мой фильтр даже при включенной диспетчеризации FORWARD?

После того, как я немного поиграю, проблема возникает, когда у меня есть какие-либо записи <dispatcher>.Даже если есть только запись <dispatcher>REQUEST</dispatcher>.Для того, чтобы он работал, не должно быть dispatcher записей вообще.

1 Ответ

2 голосов
/ 26 февраля 2011

После копания в исходном коде Jetty я нашел ответ.Оказывается, что Jetty поддерживает другой тип диспетчера, называемый ASYNC.Поэтому, если я добавлю какие-либо строки <dispatcher> в раздел <filter-mapping> файла web.xml, мне придется включить запись для ASYNC, поскольку при отправке «возобновленного» продолжения используется тип диспетчера.

<filter-mapping>
  <filter-name>MyFilter</filter-name>
  <url-pattern>/*</url-pattern>
  <dispatcher>REQUEST</dispatcher>
  <dispatcher>FORWARD</dispatcher>
  <dispatcher>ASYNC</dispatcher>
</filter-mapping>
...