Получение реального (виртуального) имени хоста под сервером приложений - PullRequest
2 голосов
/ 22 апреля 2009

У меня есть приложение, работающее под Jetty, и я хочу, чтобы приложение возвращало абсолютные URL-адреса, ссылающиеся на себя (при создании RSS-канала, поэтому клиент должен иметь возможность работать без контекста «текущий URL»).

Проблема в том, что я заранее не знаю, под каким именем хоста будет развернуто приложение, и вполне вероятно, что оно будет развернуто в среде виртуального хостинга, где несколько имен хостов сопоставлены одному и тому же IP. адрес. Я попытался использовать HttpServletRequest.getLocalName(), но это возвращает разрешенное имя хоста [1] для IP-адреса, на который был получен запрос (обычно то, что установлено в локальном файле хостов), а не имя хоста из URL-адреса, который клиент указано в запросе HTTP.

По сути, я хочу получить то, что в CGI было бы переменной среды SERVER_NAME, но это не похоже на то, как это обеспечивает Java API. Любая помощь будет оценена.

[1] только если мне повезет - при некоторых настройках он возвращает только IP-адрес.

1 Ответ

3 голосов
/ 22 апреля 2009

Используйте ServletRequest.getServerName(), чтобы получить имя виртуального хоста из заголовка «Хост». Это эквивалентно переменной SERVER_NAME CGI.

...