使用JSTL在url中获取域名?

时间:2010-09-27 17:02:41

标签: java jsp url jstl el

我正在尝试使用JSTL从网址获取域名。我知道的两种方法返回错误的信息。我需要URL中的确切内容。

当我这样做时:

${pageContext.request.remoteHost}

我得到了服务器的IP。

当我这样做时:

${pageContext.request.serverName}

我通常会获得正确的域名,但在服务器上我们在亚马逊上返回“server1”而不是正确的域名,可能是因为它处理多个域名的方式。

任何人都知道如何在网址中获取当前域名?

我可能需要获取URL然后解析它。我该怎么做?

4 个答案:

答案 0 :(得分:12)

您应该使用ServletRequest#getLocalName()代替。它返回服务器的真实主机名。 ServletRequest#getServerName()确实返回Host标题中设置的值。

${pageContext.request.localName}

这就是全部。其他答案中提出的解决方案显然是笨拙和笨拙的。


顺便说一下,ServletRequest#getRemoteHost()不会返回服务器的主机名,而是返回客户端的主机名(或主机名无法立即解析时的IP)。无论何时在物理上都在同一台机器上运行webserver和webbrowser,它显然与服务器相同。如果您对服务器的IP感兴趣,请使用ServletRequest#getLocalAddr()。术语“本地”和“远程”必须从服务器的角度解释,而不是从客户端解释。它是在所有Java代码运行的所有服务器之后。

答案 1 :(得分:2)

您可以从网址解析域名

 public static String getDomainName(String url)
    {
         URL u;
         try {
             u = new URL(url);
         } 
         catch (Exception e) { 
             return "";
         }
         return u.getHost();
    }

答案 2 :(得分:1)

您可以使用HttpServletRequest.getRequestUrl()

  

重建客户端用于发出请求的URL。返回的URL包含协议,服务器名称,端口号和服务器路径,但不包含查询字符串参数。

这将返回类似Get domain name in url with JSTL?

的字符串

然后解析它以查找the scheme(http,https等)之后和the requestURI之前的字符串应该是微不足道的。

答案 3 :(得分:-3)

$ {pageContext.request.contextPath}