我认为 ServletContext 可能会提供一种方法。ServletContext 的getAttribute() 方法是否提供任何帮助,即是否有一个可以提供帮助的属性名称(可能是“主机”、“端口”)。
这样做的原因是我希望我的应用程序可以在任何部署的地方运行,并且有一次我必须允许用户单击指向文件服务器上某个位置的链接。因此我需要通过主机和端口来引用,并且不能使用内部引用。
ServletRequest.getServerName(...)
ServletRequest.getServerPort(...)
已传递给 doGet 或 doPost 方法的 ServletRequest 对象具有提供此信息的方法getServerName
。getServerPort
例如
public void doGet(ServletRequest request, ServletResponse response) {
System.out.println("Host = " + request.getServerName());
System.out.println("Port = " + request.getServerPort());
}
@每个人都有一个很好的答案。但是采用方案、服务器名称和端口然后将它们合并。有一个更简单的方法:
您可以使用HttpServletRequest.getRequestURL和HttpServletRequest.getRequestURI。
StringBuffer url = request.getRequestURL();
String uri = request.getRequestURI();
String host = url.substring(0, url.indexOf(uri)); //result
如上所述,可以通过请求检索主机和端口。另一方面,ServletContext 不可能提供信息,因为 Java 应用程序不知道您的主机环境。即,具有上下文路径“foo”(可以通过 ServletContext#getContextPath() 检索)的应用程序可以接收来自 http 端口 8080 和 https 端口 8043 的请求。参考:https ://web.archive.org/web /20120401225136/http://www.java.net:80/node/701934
我在我的旧项目中找到了字符串:
request.getHeader("host").contains("xxx")
也许这是解决方案?