| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > ServletContextListener |
| Автор: twin84 28.9.2006, 14:52 |
| Есть ServletContextListener. Можно ли и, если можно, то как в нем получить имя хоста? Т.е. если к сервлету будут идти обращения типа: http://aaa.bbb.ccc/ddd получить aaa.bbb.ccc ??? |
| Автор: Stampede 28.9.2006, 19:10 | ||||
Похоже что нельзя. По крайней мере судя по докам из Servlet API. И этому есть хорошая причина. Дело в том, что один и тот же ресурс может быть доступен через разные домены. Классический пример: если у нас есть есть сайт с доменным именем puplin.com, мы можем захотеть, чтобы к нему можно было также обратиться через www.pupkin.com (почему - это отдельный вопрос). Для этой цели разные контейнеры предусматриваеют возможность прописания алиаса(ов) в том или ином виде. Например, в Томкате это будет выглядеть так:
Отсюда вывод: поскольку нет гарантии взаимно-однозначного соответствия между экземпляром веб-приложения и именем хоста, под которым оно будет доступно, то даже если каким-то образом удастся получить имя хоста на этапе инициализации приложения (например, используя контейнер-специфические методы), то это в общем случае мало чего дает, ибо при обслуживании реальных запросов вполне может оказаться, что юзер пришел по адресу, который не совпадает с дефолтным именем хоста.
Блин, минутное затмение нашло. Конечно, метод getServerName() (kkorsakoff, спасибо за поправку). А проблемы c ним действительно возникали в каких-то нештатных ситуациях (уж не помню, в каких версиях). И самым надежным средством получить именно то имя хоста, которое шло из браузера - было смотреть на заголовок Host: request.getHeader("Host"); |
| Автор: kkorsakoff 28.9.2006, 20:17 |
| Всмысле getServerName()? Хм....всегда работал нормально, выдавал имя хоста. А через ServletContext достать им хоста невозможно именно по причинам, которые указал Stampede. Но если очень надо и сервер - Tomcat, можно поиграть с MBeans. Можно получить конфиг Host'a и оттуда взять домен и все альясы. |
| Автор: y3u 28.9.2006, 23:15 |
| |
| Автор: batigoal 29.9.2006, 12:06 |
| Может, стоит просто запихать имя домена в параметры инициализации? Оно ведь навряд ли будет часто меняться. |