Java 从请求中获取根域

Java 从请求中获取根域,java,servlets,Java,Servlets,以下面的URL为例。 是否有任何方法可以将“example.com”作为输出。我知道有一个方法servletrequest.getServerName()。它给我的输出是test1.example.com 非常感谢您的帮助。在中,您可以使用以下方法获取URI的各个部分。您还可以使用它们逐个重建URL(以帮助调试或其他任务),如下所示: // Example: http://myhost:8080/people?lastname=Fox&age=30 String uri = requ

以下面的URL为例。

是否有任何方法可以将“example.com”作为输出。我知道有一个方法
servletrequest.getServerName()
。它给我的输出是test1.example.com

非常感谢您的帮助。

在中,您可以使用以下方法获取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"
这是我们最接近你需要的

“根域”: 对于“根域”,您必须处理从
getServerName()
返回的
字符串。这是必要的,因为Servlet无法提前知道您称之为“主机”的内容,或者什么只是一个域,如
.com
(它可能是网络中名为
com
的机器,而不仅仅是后缀,谁知道呢?)

对于您提供的模式(三分之一+secondlevel+com/net),以下内容应满足您的需要:

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

您可以通过简单的字符串操作来执行此操作:

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

没有从
a.b.c.example.com
获取
example.com
的标准方法,因为这样的转换通常没有用处。存在不允许在上注册的TLD;例如考虑到
news.bbc.co.uk
你想以
bbc.co.uk
结束,对吧?

我们有更可靠的方法来做同样的事情。有谷歌图书馆“番石榴”。 在pom中添加以下依赖项

<dependency>
     <groupId>com.google.guava</groupId>
     <artifactId>guava</artifactId>
     <version>19.0</version>
</dependency>
这将为您提供
“example.co.in”


希望这能有所帮助。

谢谢您的回复……但在您的示例中,您的主机只是我的主机。。当您的URL如我在问题中提到的,并且其中包含子域时,请重新考虑。@Alexandurada问题中的示例仅适用于
.com
.net
等。对于所需内容,您必须使用:
String domain=request.getServerName().replaceAll(“.\\.”(?=.\\\..*\\),”)。请注意,与不适用于
.co.uk
的方法相同,此方法适用于
.co.uk
(及类似),但不适用于
.com
等。或使用
^[^\.]*.(*)$
删除第一个子域,但这个问题基本上是关于如何在Java中获取根域的,我相信这是针对JSP的。
InternetDomainName.from("subdomain.example.co.in").topPrivateDomain().toString()
import java.net.InetAddress;

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