使用JSTL在url中获取域名?

UpH*_*lix 7 java url jsp jstl el

我想用JSTL从url获取域名.我知道的两种方法返回错误的信息.我需要URL中的确切内容.

当我做:

${pageContext.request.remoteHost}
Run Code Online (Sandbox Code Playgroud)

我得到了服务器的IP.

当我做:

${pageContext.request.serverName}
Run Code Online (Sandbox Code Playgroud)

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

有谁知道如何在URL中获取当前域名?

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

Bal*_*usC 12

你应该使用ServletRequest#getLocalName()而不是.它返回服务器的真实主机名.的ServletRequest#getServerName()的确返回在设定值Host标头.

${pageContext.request.localName}
Run Code Online (Sandbox Code Playgroud)

就这样.在其他答案中提出的解决方案显然是笨拙和笨拙的.


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


mat*_*t b 1

您可以用来HttpServletRequest.getRequestUrl()

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

这将返回一个字符串,例如使用 JSTL 在 url 中获取域名?

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