41

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

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

任何帮助表示赞赏。

4

5 回答 5

100

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()需要的最接近您的也是如此。

“根域”:

对于“根域”,您必须处理StringgetServerName(). 这是必要的,因为 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
于 2013-06-21T18:02:09.670 回答
17

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

<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"

于 2016-05-14T14:19:27.327 回答
3

您可以将其作为简单的字符串操作来执行:

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

没有标准的获取方式example.coma.b.c.example.com因为这种转换通常没有用。有些顶级域名不允许二级注册;例如所有.uk。鉴于news.bbc.co.uk你想以 结束bbc.co.uk,对吧?

于 2013-06-21T18:06:14.723 回答
1

对于HttpServletRequest request您可以使用:

 String domain = request.getRequestURL().toString().replace(request.getRequestURI(),"");
于 2021-07-29T13:36:20.360 回答
-2
import java.net.InetAddress;

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

希望这可以帮助。

于 2016-06-15T22:29:32.457 回答