Получить реальный requestURI без добавления index.xhtml при использовании файла приветствия

Итак, вот 2 запроса:

  1. http://example.com/someUrl/
  2. http://example.com/someUrl/index.xhtml (расширение xhtml не относится только к примеру)

Когда <welcome-file>index.xhtml</welcome-file> установлено, запрос 1 обрабатывается сервером как 2.

Однако в обоих случаях request.getRequestURI() возвращает полный URI: someUrl/index.xhtml,

В соответствии с документацией это не должно, но в большинстве случаев это то, что мы хотим, поэтому кажется, что это хорошо.

Я работаю с JSF под JBoss Wildfly (веб-сервис Undertow), и я не знаю, кто из них ответственен.

Я не хочу, чтобы изменить, как это работает, но я ищу способ получить оригинальный URI, как конечный пользователь видит в адресной строке браузера, таким образом, без index.xhtml часть в случае 1.

Чтобы быть более точным, я должен получить тот же URL-адрес, который был возвращен document.location.href в JavaScript.

1 ответ

Решение

Приветственный файл был показан форвардом, который под прикрытием сервера был выполнен RequestDispatcher#forward(), В этом случае исходный URI запроса доступен как атрибут запроса с ключом, идентифицированным как RequestDispatcher#FORWARD_REQUEST_URI, который javax.servlet.forward.request_uri,

Итак, это должно сделать:

String originalURI = request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI);

if (originalURI == null) {
    originalURI = request.getRequestURI();
}

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