Получить реальный requestURI без добавления index.xhtml при использовании файла приветствия
Итак, вот 2 запроса:
- http://example.com/someUrl/
- 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();
}
// ...