获取应用程序服务器下的真实(虚拟)主机名

我有一个在Jetty下运行的应用程序,我希望应用程序返回自引用绝对URL(生成RSS源时,因此客户端必须能够在没有“当前URL”上下文的情况下工作)。

问题是我不知道应该在哪个主机名下部署应用程序,并且它很可能会部署在虚拟主机环境中,其中多个主机名映射到同一个IP地址。 我尝试过使用HttpServletRequest.getLocalName() ,但是返回已接收请求的IP地址的解析主机名[1](通常是本地主机文件中设置的内容),而不是URL中的主机名。 HTTP请求中指定的客户端。

基本上我想得到CGI下的环境变量SERVER_NAME但它看起来不像Java API提供的那样。 任何帮助将不胜感激。

[1]只有我很幸运 – 在某些设置上它只返回IP地址。

使用ServletRequest.getServerName()从“Host”标头中获取虚拟主机名。 这相当于CGI的SERVER_NAME变量。