java - HTTPServletRequest getServerPort 返回 -1

标签 java servlets

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

相关文章:

java - 为什么 IdentityMapper 在 org.apache.hadoop.mapreduce 库中消失了?

java - 如何在 Selenium 2 中选择/获取下拉选项

java - 输入不匹配异常

java - 单击提交按钮时在 hello world java servlet 中返回空白页

java - 如何解码 Stack Exchange API 响应

java - 用于单元测试的模拟 Spring Controller

java - 在 JSP 表单中传递 javascript 变量

java - Tomcat-Servlet 不打印所有内容

java - 引用从不同目录中的 jsp 打包的 servlet

tomcat - 在 JAX-RS 资源中获取 ServletContext