今天,我发现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

10-07 20:12