从请求中获取根域

以下面的URL为例。 http://www.test1.example.com

有没有什么方法可以让“example.com”作为输出。 我知道有一个方法servletrequest.getServerName() 。 它给我输出test1.example.com

任何帮助赞赏。

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()是我们最接近你需要的。

“根域”:

对于“根域”,您将必须处理从getServerName()返回的String 。 这是必要的,因为Servlet无法提前知道你所谓的“主机”或者只是像.com这样的域名(它可能是你网络中称为com的机器 – 而不仅仅是后缀 – ,谁知道?)。

对于你给出的模式(三分之一+二级+ com / net),以下内容应该得到你需要的:

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

以上将给出以下输入/输出:

 www.test.com -> test.com test1.example.com -> example.com abcdefgcom -> g.com www.com -> www.com com -> com 

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

  com.google.guava guava 19.0  

然后试试

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

这会给你"example.co.in"

你可以这样做一个简单的字符串操作:

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

没有标准的方法从abcexample.com获取example.com ,因为这种转换通常abcexample.com 。 有些顶级域名不允许在二级注册; 例如所有.uk域名 。 鉴于news.bbc.co.uk你想最终得到bbc.co.uk ,对吧?

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

希望这可以帮助。