今天我发现 getServerPort() 可以返回 -1 有点令人惊讶。我使用端口来构建这样的主机名:
String hostName = request.getServerName().toString();
Integer urlPort = request.getServerPort();
if((urlPort != null) && (urlPort.intValue() != 80) && (urlPort.intValue() != 443) && (urlPort.intValue() != -1)) {
hostName += ":" + urlPort;
}
- 为什么返回 -1?我预计它会一直是 80/443
- 有没有更漂亮的方式来构建主机名?
最佳答案
参见:http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getServerPort()
如果 URL 中未指定端口,它将返回 -1。 通常在浏览器中,不带端口访问http是很常见的,浏览器默认为80。 同样,https 默认为 443;
您不能依赖或期望在所有情况下都指定端口,并且应该编写代码来检查它。您正在检查端口 == -1,检查 null 是不必要的,因为该方法返回原始 int 并且永远不会为 null。
如果要检测 http 或 https,请使用 getScheme() 方法没有请求:http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getScheme
关于java - HTTPServletRequest getServerPort 返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35471097/