2010-09-27 154 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