2012-03-03 93 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