2012-03-03 60 views
1

我有一個JSP文件下面的代碼片段。在這個代碼片段中,我正在形成帶有IP地址的URL。而不是IP地址,我想要域名。 (在這裏,域名,我的意思是我已經在主機文件本地主機中定義的條目。如果沒有定義,它應該可能返回機器名。這就是我想應該是)如何從Java中主機文件域名?

String ip = ""; 
    InetAddress inetAddress = InetAddress.getLocalHost(); 
    ip = inetAddress.getHostAddress(); 
    appUrl=<%=(new java.net.URL(request.getScheme(),ip,request.getServerPort(), "")).toString() %> 

我試過這些選項

inetAddress.getCanonicalHostName(); 
    inetAddress.getHostName(); 

但都返回計算機名稱。我應該如何獲得域名?

編輯在此說明更多 我已經在主機文件中聲明瞭條目,即127.0.0.1 myProjectApp。 因此,在這種情況下,我想形成像http://myProjectApp/的網址,但如果我不decalre它 它應該返回機器名稱,比如http://machineName/。它背後的意圖是我發送這個網址到另一臺機器上說B在網絡上。使用這個網址B機將到A後面連接希望它澄清

回答

0

有兩種方式獲得域名/主機名,但他們確定不同的東西。一個標識由客戶端使用的URL,而其他標識爲在部署描述符中定義了Servlet的名稱。

檢索客戶端使用的域名:

int port = request.getServerPort(); 

// if port is default or 0, just use the default port. 
String appUrl = 
    request.getScheme() + "://" + request.getServerName(); 

// if it's not the default port, append the port to your url 
if(port != 80 || port != 443 || port != 0) { 
    appUrl += ":" + new Integer(port).toString(); 
} 

檢索由Servlet所使用的主機:

String servletContextName = request.getServletContext().getServletContextName(); 

ServletContext.getServletContextName()

公共Java .lang.String getServletContextNam e()

返回此Web應用程序的名稱,該名稱與此Web應用程序的部署描述符中由display-name元素指定的此ServletContext相對應。

返回: Web應用程序的名稱,如果在部署描述符中未聲明任何名稱,則返回null。

由於: 的Servlet 2.3

+0

但request.getServerName()總是返回本地主機雖然我已經宣佈hosts文件即127.0.0.1 myProjectApp的條目。所以在這種情況下,我期望它應該返回myProjectApp? – 2012-03-03 11:28:08

+0

如果你想閱讀相關的配置信息,可以考慮使用環境變量。您可能還想更新您的問題以包含您正在使用的框架和更多代碼示例。在您的問題中,您要求獲取URL而不是IP地址,並且沒有詳細信息,我假定您的域名與用戶在瀏覽器中鍵入的域名一樣。 – jmort253 2012-03-03 11:33:40

+1

您是否在尋找Servlet上下文名稱? http://docs.oracle.com/javaee/1.3/api/javax/servlet/ServletContext.html#getServletContextName() – jmort253 2012-03-03 11:35:46