簡體   English   中英

從請求中獲取根域

[英]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"

您可以通過簡單的字符串操作來執行此操作:

String A = "http://www.test1.example.com";
String B = A.substring(A.lastIndexOf('.', A.lastIndexOf('.')-1) + 1);

沒有從abcexample.com獲取example.com標准方法,因為這種轉換通常沒有用。 有些頂級域名不允許在二級注冊; 例如所有.uk 考慮到news.bbc.co.uk你會想要bbc.co.uk ,對吧?

對於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM