2010-09-27 68 views
7

我想從JSTL的url中獲取域名。我知道的兩種方法會返回錯誤的信息。我需要的是網址中的內容。使用JSTL獲取URL中的域名?

當我這樣做:

${pageContext.request.remoteHost} 

我得到我的服務器的IP。

當我這樣做:

${pageContext.request.serverName} 

我通常會得到正確的域名,但在服務器上,我們對亞馬遜的「回server1的」,而不是正確的網域名稱,可能是因爲它的方式處理多個域。

任何人都知道我可以如何獲取URL中的當前域名?

我可能需要獲取URL然後解析它。我會怎麼做?

回答

2

您可以從網址

OR

public static String getDomainName(String url) 
    { 
     URL u; 
     try { 
      u = new URL(url); 
     } 
     catch (Exception e) { 
      return ""; 
     } 
     return u.getHost(); 
    } 
+0

好的,這就是我需要知道該怎麼做的。我可能需要更好地解釋我的問題。我如何獲得網址,並解析它? – UpHelix 2010-09-27 17:09:05

+0

@Dale更新.. – 2010-09-27 17:39:01

12

您應該使用ServletRequest#getLocalName()來代替。它返回服務器的真實主機名。 ServletRequest#getServerName()的確返回了Host標題中設置的值。

${pageContext.request.localName} 

就是這樣。其他答案中提出的解決方案是簡單笨拙和黑客。


順便說一句,在ServletRequest#getRemoteHost()不返回服務器的主機名,但客戶端的一個(或IP時,主機不能立即resolveable)。當你在同一臺機器上同時運行網絡服務器和瀏覽器時,它顯然與服務器的一樣。如果您對服務器的IP感興趣,請使用ServletRequest#getLocalAddr()。術語「本地」和「遠程」必須從服務器的角度來解釋,而不是來自客戶端。畢竟是所有Java代碼運行的服務器。

+0

localName在此處返回127.0.0.1。原因似乎是我使用Web服務器作爲傳遞代理到碼頭。 – koppor 2013-09-01 16:18:00

-3

$ {pageContext.request.contextPath}

+0

上下文路徑不是主機名。 – Fordi 2014-04-25 19:39:43

+0

..它是webapp /當前上下文的名稱 – Timo 2015-03-09 17:49:36