为什么我不能只将库导入 Java SE 而不是支付 Java EE?

Why can't I just import libraries into Java SE instead of paying for Java EE?

我正在尝试了解 Java SE 和 EE 之间的区别。那里有很多信息,但从我目前有限的理解来看,Java EE 似乎只是 Java SE 在其之上添加了一些东西。为什么我不能只使用 Java SE 并在需要时导入 API 或包?例如,如果我需要能够连接到数据库,我可以导入 JDBC API,这样做与在 Java EE 中使用 JDBC 有什么不同吗?

您所说的 Java EE 库仅定义接口。你不需要为他们付钱。但是您需要此接口的 实现 。例如,您可以导入 Java EE 库,您将得到 java.servlet.Servlet。但是不会有这个 class.

的实现

要运行 Java EE 应用程序,您需要一个平台,简单地说,它可以实现所有这些接口。这样的平台被称为 Java EE 运行 倍或 WildFly or WebSphere.

等应用服务器

... it seems like JAVA EE is just JAVA SE with some stuff added on top of it.

这是不正确的。

实际上,Java EE 是一种规范,是一组提供 API 编程接口的库。 Java EE 本身 没有提供这些接口的实现。

Java EE 实现包含在 Java EE 供应商编写的代码中。该实施可能是也可能不是您必须付费的产品。

另一件事是 Java SE 不是 Java EE 的一部分。没有任何意义。 Java EE APIs(和实现)依赖于一个 JVM 和一个 Java SE class 库,但它们是独立的东西,它们通常是分开分发的。


Why can't I just use JAVA SE and import API or packages when I need them?

假设您已经下载了 Java EE API JAR 文件(或者您的构建工具已经为您完成),您可以针对 Java EE APIs.

但是你不能在普通的 Java SE 平台上 >>运行<< 你的代码,因为 Java SE 或 Java EE API JAR 包含实现 Java EE API 的 classes;即 servlet 框架等。

如果您在没有供应商提供的代码的情况下尝试 Java EE 应用程序,它将无法运行。 (如果你不相信我/我们,你自己试试吧。)


For example if I need to be able to connect to a database I can import the JDBC api, is doing that any different that using JDBC in JAVA EE?

JDBC以前是JavaEEAPI,现在是JavaSEAPI。 (查看 Java SE API 文档!)

但事情是这样的。如果您想使用 JDBC 连接到数据库,您的应用程序需要使用特定于数据库的 JDBC 驱动程序……您可以从数据库供应商处获得这些驱动程序。 (就像您从 Java EE 供应商那里获得 Java EE 实现一样!)


Why can't I just import libraries into Java SE instead of paying for Java EE?

上面已经解决了大部分问题。但是你也提到了“付费”。

您需要付费的原因是 Java EE 实施通常是专有产品。一家公司投入了大量资金来开发他们的代码库,他们希望在这笔投资上赚取 return。

事实上,从 Java 9 开始,Oracle Java SE 也不是免费的......对于大多数用例。

无论哪种情况,如果您真的不想支付,有三种选择:

  • 查找免费(例如开源)实现。它们存在于 Java SE 和 Java EE。
  • 开发您自己的相关规范的实现。 (就时间而言,这将比向供应商付款更昂贵。)
  • 在未支付所需许可费的情况下使用该产品,希望您不会因侵犯版权而被起诉,等等。

Isn't Java platform independent?

Java 编程语言与平台无关。

Java SE API 与平台无关(或多或少)。

A Java SE 实现与平台无关。如果您为 Windows 下载 Java SE 并尝试在 Linux 上 运行 它,它将无法工作。 (从来没有,永远不会)。

“一次编写,运行 无处不在”的口头禅假设您已经在平台上安装了适当版本的 Java SE 实现。这并不意味着存在这样的实现,或者它将免费提供,或者它将随处安装。

“一次编写,运行 处处”的口头禅实际上是说您不必 修改 您的 Java 应用程序在另一个 Java 平台上制作它 运行。 (请注意,关于 WORE 应用程序的性质有许多注意事项。例如,它不得依赖于可能存在或可能不存在的本机库或外部应用程序。)


Can't I import the Java EE library, get java.servlet.Servlet, program with it, the host my application server on any computer that has a connection to the internet and a static Ip address?

两个字:你做不到。

不管你问多少次,问多少种不同的方式。