如何从java中的主机文件中获取域名?

时间:2012-03-03 11:13:50

标签: java web-applications

我在JSP文件中有以下代码片段。在此代码段中,我正在使用IP地址形成URL。而不是IP地址,我想要域名。 (这里,域名,我的意思是我在主机文件中为localhost定义的条目。如果没有定义,它应该返回机器名。这就是我认为应该是的)

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

我尝试了这些选项

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

但两者都返回计算机名称。我该如何获得域名?

编辑以澄清更多相关信息 我在hosts文件中声明了条目,即127.0.0.1 myProjectApp。 所以在这种情况下,我想形成像http://myProjectApp/这样的网址,但如果我没有去掉它 它应该返回机器名称http://machineName/。它背后的意图是我将这个网址发送到另一台机器上说B在网络上。使用此URL机器B将后面连接到A.希望它澄清

1 个答案:

答案 0 :(得分: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()

  

public java.lang.String getServletContextName()

     
    

返回此web应用程序的名称,该应用程序与display-name元素在此Web应用程序的部署描述符中指定的ServletContext相对应。

         

返回:     Web应用程序的名称,如果在部署描述符中未声明任何名称,则返回null。

         

自:     Servlet 2.3