Я создал приложение, которое должно принять wildcard dns и запросить базу данных, используя это значение подстановочного знака. Я попытался имитировать виртуальную среду для себя, чтобы добиться того, чего хочу:
1) в моей ОС Linux я изменил /etc/hosts и добавил следующие строки:
127.0.0.1 test-domain.com
127.0.0.1 mehdi.test-domain.com
2) Я изменил файл tomcat server.xml следующим образом:
<Host name="test-domain.com"
appBase="webapps/ROOT"
unpackWARs="true"
autoDeploy="true"
xmlValidation="false"
xmlNamespaceAware="false">
<Alias>www.test-domain.com</Alias>
<Context path="" docBase="."/>
</Host>
<Host name="*.test-domain.com"
appBase="webapps/ROOT"
unpackWARs="true"
autoDeploy="true"
xmlValidation="false"
xmlNamespaceAware="false">
<Alias>*.test-domain.com</Alias>
<Context path="" docBase="."/>
</Host>
3) Я разворачиваю свой файл войны проекта "Root.war" в папку $ {TOMCAT}/webapps/ROOT
теперь, когда я прошу "www.test-domain.com", я вижу домашнюю страницу в Интернете, и я хочу, когда я набираю этот URL-адрес "mehdi.test-domain.com", я получаю mehdi из URL-адреса и что-то делаю с ним и показать страницу mehdi для моих пользователей.
Вопрос 1: Как я могу получить значение подстановки в моем приложении?
Вопрос 2: Возможно ли, что tomcat конвертирует URL-адрес запроса во что-то еще во время выполнения и передает его в приложение (мне нужно значение подстановочного знака ex: mehdi)?
http://mehdi.test-domain.com CONVERT TO http://test-domain.com/mehdi
Вопрос 3: Возможно ли иметь только второе определение <Host name =... и удалить первый? как я могу справиться с этим в своем приложении?
Q1: используйте request.getServerName()
Q2: вы можете использовать фильтр UrlRewrite или аналогичный
Q3: групповые символы AFAIK не поддерживаются, поэтому вам потребуется одиночное имя хоста = "localhost", которое будет получать все запросы. См. Также Как размещать поддомены случайных или подстановочных символов на Tomcat и Java