45

我认为 ServletContext 可能会提供一种方法。ServletContext 的getAttribute() 方法是否提供任何帮助,即是否有一个可以提供帮助的属性名称(可能是“主机”、“端口”)。

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

4

5 回答 5

61
ServletRequest.getServerName(...)
ServletRequest.getServerPort(...)
于 2010-04-07T09:12:49.737 回答
16

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

例如

public void doGet(ServletRequest request, ServletResponse response) {
    System.out.println("Host = " + request.getServerName());
    System.out.println("Port = " + request.getServerPort());
}
于 2010-04-07T09:16:48.943 回答
8

@每个人都有一个很好的答案。但是采用方案、服务器名称和端口然后将它们合并。有一个更简单的方法:

您可以使用HttpServletRequest.getRequestURLHttpServletRequest.getRequestURI

StringBuffer url = request.getRequestURL();
String uri = request.getRequestURI();
String host = url.substring(0, url.indexOf(uri)); //result
于 2016-02-23T08:21:29.987 回答
4

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

于 2014-06-27T11:31:35.927 回答
3

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

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

也许这是解决方案?

于 2010-04-07T09:17:11.603 回答