以下面的URL为例。 http://www.test1.example.com
是否有任何方法可以将“example.com”作为输出。我知道有一种方法servletrequest.getServerName()
。它为我输出 test1.example.com
任何帮助表示感谢。
答案 0 :(得分:77)
在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()
是我们最接近你需要的。
对于“根域”,您必须完成从String
返回的getServerName()
。这是必要的,因为Servlet无法提前知道您称之为“主机”的内容,或者只是.com
之类的域(它可能是您网络中名为com
的机器 - 并且不只是一个后缀 - 谁知道?)。
对于你给出的模式(三分之一+第二级+ 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
答案 1 :(得分:15)
我们有更可靠的方法来做同样的事情。有谷歌图书馆"番石榴"。 在你的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"
答案 2 :(得分:3)
您可以将其作为简单的字符串操作:
String A = "http://www.test1.example.com";
String B = A.substring(A.lastIndexOf('.', A.lastIndexOf('.')-1) + 1);
从example.com
获取a.b.c.example.com
没有标准方法,因为这种转换通常没用。有些顶级域名不允许在second level上注册;例如 all .uk
domains。鉴于news.bbc.co.uk
,您最终需要bbc.co.uk
,对吗?
答案 3 :(得分:0)
对于 HttpServletRequest request
,您可以使用:
String domain = request.getRequestURL().toString().replace(request.getRequestURI(),"");
答案 4 :(得分:-2)
import java.net.InetAddress;
void Func() {
InetAddress ia = InetAddress.getLocalHost();
System.out.println (ia.getHostName());
}
希望这有帮助。