[英]Get root domain from request
以下面的 URL 為例。 http://www.test1.example.com
有什么方法可以讓我得到“example.com”作為輸出。 我知道有一個方法servletrequest.getServerName()
。 它給了我作為test1.example.com 的輸出
任何幫助表示贊賞。
在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
的機器——而不僅僅是一個后綴——,誰知道?)。
對於您提供的模式(三分之一+第二級+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
我們有更可靠的方法來做同樣的事情。 有谷歌圖書館“番石榴”。 在您的 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"
對於HttpServletRequest request
您可以使用:
String domain = request.getRequestURL().toString().replace(request.getRequestURI(),"");
import java.net.InetAddress;
void Func() {
InetAddress ia = InetAddress.getLocalHost();
System.out.println (ia.getHostName());
}
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.