【问题标题】:Get domain name in url with JSTL?使用 JSTL 在 url 中获取域名?
【发布时间】:2011-04-17 21:20:37
【问题描述】:

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

当我这样做时:

${pageContext.request.remoteHost}

我得到了我的服务器的 IP。

当我这样做时:

${pageContext.request.serverName}

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

有人知道我如何在 URL 中获取当前域名吗?

我可能需要获取 URL,然后对其进行解析。我该怎么做?

【问题讨论】:

    标签: java jsp url jstl el


    【解决方案1】:

    ${pageContext.request.contextPath}

    【讨论】:

    • 上下文路径不是主机名。
    • .. 它是 webapp/当前上下文的名称
    【解决方案2】:

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

    ${pageContext.request.localName}
    

    就是这样。其他答案中建议的解决方案非常笨拙和hacky。


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

    【讨论】:

    • localName 在这里返回 127.0.0.1。原因似乎是我使用 Web 服务器作为码头的直通代理。
    【解决方案3】:

    您可以从 URL 解析域名

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

    【讨论】:

    • 好的,这就是我需要知道的。我可能需要更好地解释我的问题。如何获取 url 并解析它?
    【解决方案4】:

    您可以使用HttpServletRequest.getRequestUrl() 来:

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

    这将返回一个类似Get domain name in url with JSTL?的字符串

    然后,解析它以找到 the scheme(http、https 等)之后和 the requestURI 之前的字符串应该很简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 2010-10-08
      • 2013-04-08
      相关资源
      最近更新 更多