HTTPServletRequest getServerPort返回-1

时间:2016-02-18 01:26:03

标签: java servlets

今天我发现getServerPort()可以返回-1的小惊喜。我使用端口来构建这样的主机名:

   return grunt.task.run([
            'clean:server',
            'env:all',
            'injector:sass',
            'concurrent:test',
            'injector',
            'autoprefixer',
            'karma'
            ,'protractor'
        ]);
  • 为什么要返回-1?我预计它总是80/443
  • 有没有更漂亮的方法来构建主机名?

1 个答案:

答案 0 :(得分:3)

请参阅:http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getServerPort()

如果未在URL中指定端口,则返回-1。 通常在浏览器中,通常在没有端口的情况下访问http,浏览器默认为80。 同样,https默认为443;

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

如果要检测http或https,请使用 getScheme()方法没有请求:http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getScheme