我认为ServletContext可能提供一种方法。 ServletContext的getAttribute()方法是否提供任何帮助,即是否有帮助的属性名称(可能是“host”,“port”)。
原因是我希望我的应用程序在部署的任何地方运行,并且我必须允许用户单击指向文件服务器上某个位置的链接。因此我需要通过主机和端口引用,不能使用内部引用。
答案 0 :(得分:55)
ServletRequest.getServerName(...)
ServletRequest.getServerPort(...)
答案 1 :(得分:14)
已传递给您的doGet或doPost方法的ServletRequest对象具有提供此信息的getServerName
和getServerPort
方法。
例如
public void doGet(ServletRequest request, ServletResponse response) {
System.out.println("Host = " + request.getServerName());
System.out.println("Port = " + request.getServerPort());
}
答案 2 :(得分:5)
@Everyone有一个很好的答案。但是采取方案,服务器名称和端口然后开始使用它们。有一种更简单的方法:
您可以使用HttpServletRequest.getRequestURL和HttpServletRequest.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