我试图理解javase和ee之间的区别。有很多信息,但从我目前有限的理解来看,javaee似乎只是javase,上面添加了一些东西。为什么我不能在需要的时候使用javase并导入api或包呢?例如,如果我需要能够连接到一个可以导入jdbcapi的数据库,那么这样做与在javaee中使用jdbc有什么不同吗?
fquxozlt1#
您所说的javaee库只定义接口。你不需要付钱。但是你需要一个接口的实现。例如,您可以导入javaee库 java.servlet.Servlet . 但不会实现这个类。要运行javaee应用程序,您需要一个平台来实现所有这些接口。这些平台被称为javaee运行时或wildfly或websphere等应用服务器。
java.servlet.Servlet
kpbwa7wx2#
... 似乎javaee只是javase,上面添加了一些东西。这是不正确的。实际上,javaee是一个规范,是一组库,它们提供api接口来进行编程。javaee本身没有提供这些接口的实现。javaee实现体现在javaee供应商编写的代码中。这个实现可能是也可能不是一个你必须付费的产品。另一件事是javase不是javaee的一部分。没有任何意义。javaeeapi(和实现)依赖于jvm和javase类库,但它们是独立的,并且通常是分开分布的。为什么我不能在需要的时候使用javase并导入api或包呢?假设您已经下载了javaeeapijar文件(或者您的构建工具已经为您完成了),您就可以根据javaeeapi编译代码了。但是您不能在普通的JavaSE平台上运行您的代码,因为JavaSE或JavaEEAPI jar都不包含实现JavaEEAPI的类;i、 e.servlet框架等。如果您在没有供应商提供的代码的情况下尝试javaee应用程序,它将无法工作(如果你不相信我/我们,你自己试试。)例如,如果我需要能够连接到一个可以导入jdbcapi的数据库,那么这样做与在javaee中使用jdbc有什么不同吗?jdbc以前是JavaEEAPI,但现在是JavaSEAPI(查看JavaSEAPI文档!)但事情是这样的。如果您想使用jdbc连接到数据库,您的应用程序需要使用特定于数据库的jdbc驱动程序。。。从数据库供应商那里得到的(就像从javaee供应商那里得到javaee实现一样!)为什么我不能直接将库导入javase而不是付费购买javaee呢?上面已经讨论了其中的大部分。但你也提到了“付费”。您需要付费的原因是因为javaee实现通常是专有产品。一家公司在开发代码库方面投入了大量资金,他们希望从中获得回报。实际上,从Java9开始,oracle JavaSE也不是免费的。。。对于大多数用例。无论哪种情况,如果你真的不想付钱,有三种选择:找到一个免费的(例如开源)实现。它们是为javase和javaee而存在的。开发您自己的相关规范的实现(就时间而言,这将比支付给供应商更昂贵。)使用该产品而不支付所需的许可费,并希望你不会因为侵犯版权而被起诉,等等。java不是独立于平台的吗?java编程语言是独立于平台的。javaseapi与平台无关(或多或少)。javase实现不是独立于平台的。如果下载javase for windows并尝试在linux上运行,它将无法工作(从来没有,永远不会)。“只写一次,到处运行”的口号假设您已经在平台上安装了相应版本的javase实现。它并不意味着这样的实现存在,或者它将免费提供,或者它将被安装在任何地方。“只写一次,到处运行”的口号实际上是说,您不必为了使java应用程序在另一个java平台上运行而修改它(并注意到,有一些警告性质的申请。例如,它不能依赖本机库或可能存在或不存在的外部应用程序。)我不能导入javaee库,获取java.servlet.servlet,用它编写程序,在任何一台连接到internet和静态ip地址的计算机上托管我的应用服务器吗?两个字:你不能。不管你问了多少次,问了多少遍。
2条答案
按热度按时间fquxozlt1#
您所说的javaee库只定义接口。你不需要付钱。但是你需要一个接口的实现。例如,您可以导入javaee库
java.servlet.Servlet
. 但不会实现这个类。要运行javaee应用程序,您需要一个平台来实现所有这些接口。这些平台被称为javaee运行时或wildfly或websphere等应用服务器。
kpbwa7wx2#
... 似乎javaee只是javase,上面添加了一些东西。
这是不正确的。
实际上,javaee是一个规范,是一组库,它们提供api接口来进行编程。javaee本身没有提供这些接口的实现。
javaee实现体现在javaee供应商编写的代码中。这个实现可能是也可能不是一个你必须付费的产品。
另一件事是javase不是javaee的一部分。没有任何意义。javaeeapi(和实现)依赖于jvm和javase类库,但它们是独立的,并且通常是分开分布的。
为什么我不能在需要的时候使用javase并导入api或包呢?
假设您已经下载了javaeeapijar文件(或者您的构建工具已经为您完成了),您就可以根据javaeeapi编译代码了。
但是您不能在普通的JavaSE平台上运行您的代码,因为JavaSE或JavaEEAPI jar都不包含实现JavaEEAPI的类;i、 e.servlet框架等。
如果您在没有供应商提供的代码的情况下尝试javaee应用程序,它将无法工作(如果你不相信我/我们,你自己试试。)
例如,如果我需要能够连接到一个可以导入jdbcapi的数据库,那么这样做与在javaee中使用jdbc有什么不同吗?
jdbc以前是JavaEEAPI,但现在是JavaSEAPI(查看JavaSEAPI文档!)
但事情是这样的。如果您想使用jdbc连接到数据库,您的应用程序需要使用特定于数据库的jdbc驱动程序。。。从数据库供应商那里得到的(就像从javaee供应商那里得到javaee实现一样!)
为什么我不能直接将库导入javase而不是付费购买javaee呢?
上面已经讨论了其中的大部分。但你也提到了“付费”。
您需要付费的原因是因为javaee实现通常是专有产品。一家公司在开发代码库方面投入了大量资金,他们希望从中获得回报。
实际上,从Java9开始,oracle JavaSE也不是免费的。。。对于大多数用例。
无论哪种情况,如果你真的不想付钱,有三种选择:
找到一个免费的(例如开源)实现。它们是为javase和javaee而存在的。
开发您自己的相关规范的实现(就时间而言,这将比支付给供应商更昂贵。)
使用该产品而不支付所需的许可费,并希望你不会因为侵犯版权而被起诉,等等。
java不是独立于平台的吗?
java编程语言是独立于平台的。
javaseapi与平台无关(或多或少)。
javase实现不是独立于平台的。如果下载javase for windows并尝试在linux上运行,它将无法工作(从来没有,永远不会)。
“只写一次,到处运行”的口号假设您已经在平台上安装了相应版本的javase实现。它并不意味着这样的实现存在,或者它将免费提供,或者它将被安装在任何地方。
“只写一次,到处运行”的口号实际上是说,您不必为了使java应用程序在另一个java平台上运行而修改它(并注意到,有一些警告性质的申请。例如,它不能依赖本机库或可能存在或不存在的外部应用程序。)
我不能导入javaee库,获取java.servlet.servlet,用它编写程序,在任何一台连接到internet和静态ip地址的计算机上托管我的应用服务器吗?
两个字:你不能。
不管你问了多少次,问了多少遍。