Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ServletContextListener, можно ли достать имя хоста в нем? 
:(
    Опции темы
twin84
Дата 28.9.2006, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 28.9.2006

Репутация: нет
Всего: нет



Есть ServletContextListener. 

Можно ли и, если можно, то как в нем получить имя хоста? 
Т.е. если к сервлету будут идти обращения типа:

http://aaa.bbb.ccc/ddd

получить aaa.bbb.ccc ???
PM MAIL   Вверх
Stampede
Дата 28.9.2006, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Цитата(twin84 @  28.9.2006,  05:52 Найти цитируемый пост)
Можно ли и, если можно, то как в нем получить имя хоста?


Похоже что нельзя. По крайней мере судя по докам из Servlet API. И этому есть хорошая причина. Дело в том, что один и тот же ресурс может быть доступен через разные домены. Классический пример: если у нас есть есть сайт с доменным именем puplin.com, мы можем захотеть, чтобы к нему можно было также обратиться через www.pupkin.com (почему - это отдельный вопрос).

Для этой цели разные контейнеры предусматриваеют возможность прописания алиаса(ов) в том или ином виде. Например, в Томкате это будет выглядеть так:

Код

<Host name="pupkin.com"  appBase="webapps" reloadable="false">
    <Alias>www.pupkin.com</Alias>
    <Alias>vasya-pupkin.com</Alias>
</Host>


Отсюда вывод: поскольку нет гарантии взаимно-однозначного соответствия между экземпляром веб-приложения и именем хоста, под которым оно будет доступно, то даже если каким-то образом удастся получить имя хоста на этапе инициализации приложения (например, используя контейнер-специфические методы), то это в общем случае мало чего дает, ибо при обслуживании реальных запросов вполне может оказаться, что юзер пришел по адресу, который не совпадает с дефолтным именем хоста.

Цитата
Кстати, предупреждаю: метод request.getLocalName(), который по идее должен возвращать имя хоста, по которому произошло обращение, в Томкате работает неправильно


Блин, минутное затмение нашло. Конечно, метод getServerName() (kkorsakoff, спасибо за поправку). А проблемы c ним действительно возникали в каких-то нештатных ситуациях (уж не помню, в каких версиях). И самым надежным средством получить именно то имя хоста, которое шло из браузера - было смотреть на заголовок Host: request.getHeader("Host");


Это сообщение отредактировал(а) Stampede - 28.9.2006, 22:12


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
kkorsakoff
Дата 28.9.2006, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 6
Всего: 14



Всмысле getServerName()?
Хм....всегда работал нормально, выдавал имя хоста.

А через ServletContext достать им хоста невозможно именно по причинам, которые указал Stampede.
Но если очень надо и сервер - Tomcat, можно поиграть с MBeans. Можно получить конфиг Host'a и оттуда взять домен и все альясы.
PM MAIL WWW ICQ   Вверх
y3u
Дата 28.9.2006, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 7
Всего: 13



 smile хотя бы для том кета! А есть какое-нибудь контенеронезависимое решение? К примеру для JBoss, у которого вебконтейнерами могут быть много кто, тот же том кет, джетти и т.д....


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
batigoal
Дата 29.9.2006, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



Может, стоит просто запихать имя домена в параметры инициализации? Оно ведь навряд ли будет часто меняться.

Это сообщение отредактировал(а) batigoal - 29.9.2006, 12:09


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Stampede
Дата 29.9.2006, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Цитата(batigoal @  29.9.2006,  03:06 Найти цитируемый пост)
Может, стоит просто запихать имя домена в параметры инициализации? Оно ведь навряд ли будет часто меняться.


А что, резонно. Я бы наверно так и сделал. Ну или не в параметрах, а в собственном конфиге.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0735 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.