我正在尝试使用JSTL从网址获取域名。我知道的两种方法返回错误的信息。我需要URL中的确切内容。
当我这样做时:
${pageContext.request.remoteHost}
我得到了服务器的IP。
当我这样做时:
${pageContext.request.serverName}
我通常会获得正确的域名,但在服务器上我们在亚马逊上返回“server1”而不是正确的域名,可能是因为它处理多个域名的方式。
任何人都知道如何在网址中获取当前域名?
我可能需要获取URL然后解析它。我该怎么做?
答案 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}