Подтвердить что ты не робот

Получить домен root из запроса

Рассмотрим приведенный ниже URL-адрес. http://www.test1.example.com

Есть ли какой-либо метод, с помощью которого я могу получить "example.com" в качестве вывода. Я знаю, что есть метод servletrequest.getServerName(). Это дает мне результат как test1.example.com

Любая помощь была оценена.

4b9b3361

Ответ 1

В HttpServletRequest вы можете получить отдельные части URI, используя приведенные ниже методы. Вы также можете использовать их для восстановления URL-адреса по частям (для помощи в отладке или других задачах), например:

// Example: http://myhost:8080/people?lastname=Fox&age=30

String uri = request.getScheme() + "://" +   // "http" + "://
             request.getServerName() +       // "myhost"
             ":" + request.getServerPort() + // ":" + "8080"
             request.getRequestURI() +       // "/people"
            (request.getQueryString() != null ? "?" +
             request.getQueryString() : ""); // "?" + "lastname=Fox&age=30"

Так что request.getServerName() является самым близким к вам.

"Корневой домен":

Для "корневого домена" вам придется работать через String, возвращенный с getServerName(). Это необходимо, потому что у Servlet не было бы возможности заранее знать, что вы называете "хостом" или что такое домен, например .com (это может быть машина под названием com в вашей сети), а не только суффикс - кто знает?).

Для полученного вами шаблона (одна треть + второй уровень + ком/сеть) следующее должно получить то, что вам нужно:

String domain = request.getServerName().replaceAll(".*\\.(?=.*\\.)", "");

Приведенные выше будут содержать следующие входы/выходы:

www.test.com       -> test.com
test1.example.com  -> example.com
a.b.c.d.e.f.g.com  -> g.com
www.com            -> www.com
com                -> com

Ответ 2

У нас есть более надежный способ сделать то же самое. Существует google-библиотека "guava". Добавьте следующую зависимость в свой pom.

<dependency>
     <groupId>com.google.guava</groupId>
     <artifactId>guava</artifactId>
     <version>19.0</version>
</dependency>

Затем попробуйте

InternetDomainName.from("subdomain.example.co.in").topPrivateDomain().toString()

Это даст вам "example.co.in"

Ответ 3

Вы можете сделать это как простое манипулирование строками:

String A = "http://www.test1.example.com";
String B = A.substring(A.lastIndexOf('.', A.lastIndexOf('.')-1) + 1);

Нет стандартного способа получить example.com из a.b.c.example.com, потому что такое преобразование вообще не полезно. Существуют TLD, которые не разрешают регистрацию на втором уровне; например все .uk домены. Учитывая news.bbc.co.uk, вы хотите получить bbc.co.uk, правильно?

Ответ 4

import java.net.InetAddress;

void Func() {
    InetAddress ia = InetAddress.getLocalHost();
    System.out.println (ia.getHostName());
}

Надеюсь, что это поможет.