【发布时间】:2013-06-18 22:57:01
【问题描述】:
以下面的 URL 为例。 http://www.test1.example.com
有什么方法可以让我得到 "example.com" 作为输出。我知道有一个方法servletrequest.getServerName()。它给我输出 test1.example.com
任何帮助表示赞赏。
【问题讨论】:
以下面的 URL 为例。 http://www.test1.example.com
有什么方法可以让我得到 "example.com" 作为输出。我知道有一个方法servletrequest.getServerName()。它给我输出 test1.example.com
任何帮助表示赞赏。
【问题讨论】:
对于HttpServletRequest request,您可以使用:
String domain = request.getRequestURL().toString().replace(request.getRequestURI(),"");
【讨论】:
在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 的机器 - 而不仅仅是后缀-,谁知道?)。
对于您提供的模式(三分之一+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
【讨论】:
.com、.net 等。对于您想要的,您必须使用:String domain = request.getServerName().replaceAll(".*\\.(?=.*\\..*\\.)", ""));。请注意,同样的方式不适用于.co.uk,这种方式适用于.co.uk(和类似的),但不适用于.com 等。
^[^\.]*\.(.*)$ 删除第一个子域
import java.net.InetAddress;
void Func() {
InetAddress ia = InetAddress.getLocalHost();
System.out.println (ia.getHostName());
}
希望这会有所帮助。
【讨论】:
我们有更可靠的方法来做同样的事情。有谷歌图书馆“番石榴”。 在您的 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"
【讨论】:
您可以将其作为简单的字符串操作:
String A = "http://www.test1.example.com";
String B = A.substring(A.lastIndexOf('.', A.lastIndexOf('.')-1) + 1);
没有从a.b.c.example.com 获取example.com 的标准方法,因为这样的转换通常没有用处。有些顶级域名不允许在second level 上注册;例如 all .uk domains。给定news.bbc.co.uk,您最终会希望得到bbc.co.uk,对吗?
【讨论】: