UrlRewriteFilter — объединение правил перенаправления и перенаправления

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

Вот кусок конфига:

<rule>
  <from>/patha</from>
  <to type="redirect">/pathb</to>
</rule>

<rule>
  <from>/pathb</from>
  <to type="forward">/pathc</to>
</rule>

Что я ожидаю от этих правил, пока пытаюсь получить доступ к patha

  • Правило для patha перенаправляет мой браузер на pathb, URL-адрес в адресной строке меняется.
  • Поскольку это правило не последнее, правило для pathb также хорошо подходит, поэтому браузер перенаправляется на pathc, но поскольку это переадресация, URL-адрес в адресной строке остается pathb.

Но на самом деле происходит то, что я перенаправляю на pathc без каких-либо изменений в адресной строке.

Мой вопрос: почему это так и как я могу на самом деле достичь того, что я ищу?

UPD: протестировал переадресацию urlrewritefilter с перенаправлением в jsp через:

response.setStatus(302);
response.setHeader("Location", "pathb");
response.setHeader("Connection", "close");

Результат тот же - URL не перезаписывается.


person shabunc    schedule 12.09.2012    source источник


Ответы (1)


То, что вы замечаете, является ожидаемым поведением. С forward вы никогда не увидите URL-адрес в браузере. Ниже приведены различия между forward и redirect:

Вперед

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

Перенаправить

  • перенаправление — это двухэтапный процесс, когда веб-приложение указывает браузеру получить второй URL-адрес, который отличается от исходного. Повторная загрузка браузером второго URL-адреса не будет повторять исходный запрос, а скорее извлечет второй URL-адрес.
  • редирект немного медленнее, чем форвард, так как требует два запроса браузера, ни один объект, помещенный в исходную область запроса, недоступен для второго запроса
person Ram G    schedule 22.09.2012