【发布时间】:2013-07-17 06:47:31
【问题描述】:
通常,Java 附带大量可使用的合理常量。 IANA 分配的 HTTP 和 HTTPS 默认端口号(80 和 443)将是合理的常量。我检查了 java.net.URL、java.net.HttpURLConnection 和 javax.net.ssl.HttpsURLConnection 的 javadoc,但没有找到它们。这些常量是否在 JavaSE 中的某个地方?如果没有,它们是否在 Tomcat 上的 Web 应用程序可以访问的类中可用,例如org.apace.catalina 还是 coyote?只是因为我不喜欢我的代码中的幻数……
我必须在 URL 组合中这样做吗?
if(port != new URL("http://example.com/").getDefaultPort() &&
port != new URL("https://example.com/").getDefaultPort()){
stringBuilder.append(":");
stringBuilder.append(port);
}
【问题讨论】:
-
参见:stackoverflow.com/questions/13498275/… 我认为 java 中没有标准定义的端口号常量。
-
每次只插入端口号
-
另外,不要使用
StringBuilder来构建 URL,使用URI类。它可以为您完成编码工作。它有许多构造函数,包括一个带有主机/端口号的构造函数 -
对于 HTTP(S) 端口,我认为没有人对幻数有疑问。将它们声明为常量,我认为没有问题。如果不重建互联网,这些数字不会改变。
-
@fge:感谢
URI。还不是很好,但确实好多了:String url = new URI(port == 443 ? "https" : "http", null, host, (port == 80 || port == 443) ? -1 : port, (path != null && path.length() > 0) ? path : "/", null, null).toString();☺