从请求中获取根域

Rit*_*esh 35 java servlets

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

有什么方法可以让"example.com"作为输出.我知道有一种方法servletrequest.getServerName().它给我输出test1.example.com

任何帮助赞赏.

acd*_*ior 82

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"
Run Code Online (Sandbox Code Playgroud)

所以request.getServerName()我们最接近你需要的.

"根域":

对于"根域",您必须完成String返回的getServerName().这是必要的,因为Servlet无法提前知道你所谓的"主机"或者什么只是一个域.com(它可能是一台名为的机器)com你的网络中 - 而不仅仅是后缀 - 谁知道?) .

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

String domain = request.getServerName().replaceAll(".*\\.(?=.*\\.)", "");
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于www.domainname.co.uk (4认同)
  • @AlexandruRada问题中的例子仅适用于`.com`,`.net`等.对于你想要的,你将不得不使用:`String domain = request.getServerName().replaceAll(".*\\.(?=.*\\ ..*\\.)","")) ;`.请注意,对于`.co.uk`不起作用的方式相同,这个方法适用于`.co.uk`(和类似的方法),但不适用于`.com`等. (3认同)

Vai*_*hav 16

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

<dependency>
     <groupId>com.google.guava</groupId>
     <artifactId>guava</artifactId>
     <version>19.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

然后试试

InternetDomainName.from("subdomain.example.co.in").topPrivateDomain().toString()
Run Code Online (Sandbox Code Playgroud)

这会给你 "example.co.in"