Java 从请求中获取根域
以下面的URL为例。 是否有任何方法可以将“example.com”作为输出。我知道有一个方法Java 从请求中获取根域,java,servlets,Java,Servlets,以下面的URL为例。 是否有任何方法可以将“example.com”作为输出。我知道有一个方法servletrequest.getServerName()。它给我的输出是test1.example.com 非常感谢您的帮助。在中,您可以使用以下方法获取URI的各个部分。您还可以使用它们逐个重建URL(以帮助调试或其他任务),如下所示: // Example: http://myhost:8080/people?lastname=Fox&age=30 String uri = requ
servletrequest.getServerName()
。它给我的输出是test1.example.com
非常感谢您的帮助。在中,您可以使用以下方法获取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"
这是我们最接近你需要的
“根域”:
对于“根域”,您必须处理从getServerName()
返回的字符串。这是必要的,因为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
您可以通过简单的字符串操作来执行此操作:
String A = "http://www.test1.example.com";
String B = A.substring(A.lastIndexOf('.', A.lastIndexOf('.')-1) + 1);
没有从a.b.c.example.com
获取example.com
的标准方法,因为这样的转换通常没有用处。存在不允许在上注册的TLD;例如考虑到news.bbc.co.uk
你想以bbc.co.uk
结束,对吧?我们有更可靠的方法来做同样的事情。有谷歌图书馆“番石榴”。
在pom中添加以下依赖项
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
这将为您提供“example.co.in”
希望这能有所帮助。谢谢您的回复……但在您的示例中,您的主机只是我的主机。。当您的URL如我在问题中提到的,并且其中包含子域时,请重新考虑。@Alexandurada问题中的示例仅适用于.com
,.net
等。对于所需内容,您必须使用:String domain=request.getServerName().replaceAll(“.\\.”(?=.\\\..*\\),”)代码>。请注意,与不适用于.co.uk
的方法相同,此方法适用于.co.uk
(及类似),但不适用于.com
等。或使用^[^\.]*.(*)$
删除第一个子域,但这个问题基本上是关于如何在Java中获取根域的,我相信这是针对JSP的。
InternetDomainName.from("subdomain.example.co.in").topPrivateDomain().toString()
import java.net.InetAddress;
void Func() {
InetAddress ia = InetAddress.getLocalHost();
System.out.println (ia.getHostName());
}