Java HTTPServletRequest getServerPort返回-1

Java HTTPServletRequest getServerPort返回-1,java,servlets,Java,Servlets,今天,我发现getServerPort()可以返回-1,这有点令人惊讶。我使用端口构建主机名,如下所示: String hostName = request.getServerName().toString(); Integer urlPort = request.getServerPort(); if((urlPort != null) && (urlPort.intValue() != 80) && (urlPort.intValue() != 443) &

今天,我发现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;
}
  • 为什么返回a-1?我希望它总是80/443
  • 有没有更漂亮的方法来构建主机名
见:

如果URL中未指定端口,则返回-1。 通常在浏览器中,通常不使用端口访问http,浏览器默认端口为80。 同样,https默认为443

您不能依赖或期望在所有情况下都指定端口,应该编写代码来检查它。您正在检查端口==-1,检查null是不必要的,因为该方法返回原语int,并且永远不会为null

如果要检测http或https,请使用
getScheme()方法否请求:

当getServerPort()返回一个
-1
时,这意味着服务器端口未定义。您根本不需要构建主机名,只需要一个相对URL。然后对请求使用
getScheme()
方法,而不是“否”。