我怎样才能得到一个servlet所在的主机名(带端口)

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

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

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

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

例如

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

我在我的旧项目中发现string:

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

也许这是解决scheme?

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

@每个人都有一个很好的答案。 但是采取计划,服务器名称和端口然后mergin他们。 有一个更简单的方法:

您可以使用HttpServletRequest.getRequestURL和HttpServletRequest.getRequestURI 。

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