我在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.希望它澄清
答案 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