如何获取servlet所在的主机名(带端口)

时间:2010-04-07 09:07:06

标签: java servlets hostname

我认为ServletContext可能提供一种方法。 ServletContext的getAttribute()方法是否提供任何帮助,即是否有帮助的属性名称(可能是“host”,“port”)。

原因是我希望我的应用程序在部署的任何地方运行,并且我必须允许用户单击指向文件服务器上某个位置的链接。因此我需要通过主机和端口引用,不能使用内部引用。

5 个答案:

答案 0 :(得分:55)

ServletRequest.getServerName(...)
ServletRequest.getServerPort(...)

答案 1 :(得分:14)

已传递给您的doGet或doPost方法的ServletRequest对象具有提供此信息的getServerNamegetServerPort方法。

例如

public void doGet(ServletRequest request, ServletResponse response) {
    System.out.println("Host = " + request.getServerName());
    System.out.println("Port = " + request.getServerPort());
}

答案 2 :(得分:5)

@Everyone有一个很好的答案。但是采取方案,服务器名称和端口然后开始使用它们。有一种更简单的方法:

您可以使用HttpServletRequest.getRequestURLHttpServletRequest.getRequestURI

StringBuffer url = request.getRequestURL();
String uri = request.getRequestURI();
String host = url.substring(0, url.indexOf(uri)); //result

答案 3 :(得分:3)

我在旧项目中找到了字符串:

request.getHeader("host").contains("xxx")

也许是解决方案?

答案 4 :(得分:3)

如上所述,可以通过请求检索主机和端口。另一方面,ServletContext不可能提供信息,因为Java应用程序不知道您的主机环境。即,具有上下文路径“foo”的应用程序(可以通过ServletContext#getContextPath()检索)可以从http端口8080和https端口8043接收请求。参考:https://web.archive.org/web/20120401225136/http://www.java.net:80/node/701934