Java EE究竟是什么?

190

我已经从事Java SE技术几年了,现在转向Java EE。然而,我对Java EE的某些方面有些困惑。

  1. Java EE只是一个规范吗?我的意思是:EJB是Java EE吗?

  2. EJB/Spring是Java EE的不同实现吗?

非常抱歉问这个问题,但我确实很难理解Java EE是什么。

能否有人解释一下Java EE和EJB是什么?


2
请查看https://dev59.com/MEjSa4cB1Zd3GeqPJev_。 - Kheldar
2
你应该将这个问题分成两个问题,一个是重复的,另一个我认为链接中没有回答。 - Kheldar
2
你有没有看过 [java-ee] 的 标签维基 - Paŭlo Ebermann
另请阅读:https://dev59.com/63VD5IYBdhLWcg3wDHDm - claws
1
Java EE就像Ruby on Rails EE或JavaScript EE一样,今天选择任何语言,只需称之为EE,听起来更好听...没有其他语言需要像企业版这样的营销词汇,只是为了表明它可以做Web和DB。 "我知道Java" "等等,你知道Java还是Java EE" ..WTF就像在吹嘘我可以在JavaScript中进行HTTP请求或在Rails中访问数据库..哇,太神奇了。但商业人士喜欢企业版这个词!放弃EE Java! - H.R.
显示剩余4条评论
6个回答

230

(更新于2023年5月)

首先,“Java EE”自2019年9月起已更名为“Jakarta EE”,从版本8开始。历史上,还有一个术语“J2EE”,涵盖了1.2到1.4版本。术语“Java EE”涵盖了5到8版本。另请参见维基百科上的Jakarta EE历史


雅加达EE只是一个规范吗?我的意思是:EJB是雅加达EE吗?

Jakarta EE 确实是一个抽象的规范。任何人都可以开发并提供该规范的工作实现。这些具体的实现被称为应用服务器,例如 WildFlyTomEEGlassFishLibertyWebLogic 等。还有一些只实现了 Jakarta EE API 之中 JSP/Servlet 部分的 Servlet 容器,例如 TomcatJetty 等。

我们作为 Jakarta EE 开发者,应该编写利用规范的代码(即在我们的代码中仅导入 jakarta.* 类,而不是实现特定的类,如 org.jboss.wildfly.*com.sun.glassfish.*org.apache.tomcat.* 等),然后我们就能在任何实现上运行我们的代码(因此,在任何应用服务器上)。如果您熟悉 JDBC,则基本上与 JDBC 驱动程序工作的方式相同。另请参见 最简单的术语,什么是工厂?

EJB 是 Jakarta EE 规范的一部分。看,它在 Jakarta EE API 中。完整的 Jakarta EE 应用服务器支持它,但简单的 JSP/Servlet 容器不支持。

另请参见:


EJB/Spring是Jakarta EE的不同实现吗?
不是,正如所说,EJB是Jakarta EE的组成部分。Spring是一个独立的框架,它可以替代并改进Jakarta EE的许多部分。Spring不一定需要Jakarta EE来运行。像Tomcat这样的最简Servlet容器已经足够了。简而言之,Spring是Jakarta EE的竞争对手。例如,"Spring"(独立)与EJB/JTA竞争,Spring MVC与Faces/REST/MVC竞争,Spring DI/IoC/AOP与CDI竞争,Spring Security与JASPIC/Security竞争,Spring Boot与MicroProfile竞争等。
在旧的J2EE/EJB2时代,EJB2 API不好实现和维护。当时,Spring是EJB2的更好选择。但是自从EJB3(Java EE 5)以来,EJB API基于从Spring中学到的教训得到了很大的改进。自从CDI(Java EE 6)以来,没有必要再看另外一个像Spring这样的框架,以使开发人员更容易开发服务层。

只有在使用诸如Tomcat这样的基本Servlet容器,并且无法转向Jakarta EE服务器时,Spring才更具吸引力,因为在Tomcat上安装Spring更容易。 不可能在Tomcat上安装例如EJB容器,而不修改服务器本身,你基本上将重新发明TomEE。

另请参阅:


2
那么,可以说Java EE定义了典型JEE应用程序运行所需的支持吗? - James P.
4
@James:是的。Java EE API 中几乎所有东西都是抽象的。Java SE API 也有一些抽象部分,例如 JDBC、JAXP、JAXB 等。 - BalusC
3
"没有必要再去看另一个框架,例如Spring,来让开发人员更轻松。" -> 真正有价值的信息。 - jacktrades
@BalusC:你好,官方的Sun Java EE...链接已经失效了,如果你能提供一个类似的链接,那对某些人来说会很有帮助。 - Abdul Rahman
我也认为专有术语在这个上下文中不恰当。它通常是指闭源实现(有时也没有公共API)。据我所知,Spring是开源的,并且有自己的“本地”API。 - Johan Boulé
显示剩余6条评论

13

Java企业版(Java EE)是一个总称规范,引用了许多其他更详细的规范,其中Enterprise JavaBeans(EJB)是其中较为重要的规范之一。

阅读这篇文章 - 它解释了Java EE和Spring之间的区别。

谢谢...


Java SE也是一个规范吗?我觉得“版本”这个词会让人更加困惑。为什么不把它称为Java语言的一个版本,因为名称本身已经暗示了这一点呢? - Mehdi Charife

4
  • -- Java 2 Platform, Enterprise Edition (J2EE) 定义了开发基于组件的多层企业应用程序的标准。J2EE 简化了构建可移植、可扩展且易于与遗留应用程序和数据集成的企业应用程序。

  • -- Enterprise JavaBeans (EJB) 技术是 Java Platform, Enterprise Edition (Java EE) 的服务器端组件架构。EJB 技术基于 Java 技术,可以快速简化地开发分布式、事务性、安全和可移植的应用程序。

  • Java EE 只是一个规范吗?我的意思是:EJB 是 Java EE 吗?

    • Java EE 是一个规范。

    • EJB 是 Java EE 的服务器端组件架构。

  • EJB/Spring 是 Java EE 的不同实现吗?

    • 两者都是遵循 Java EE 的不同框架。

6
引用古老的规范版本(J2EE)中的古老文本(2005年)可能并不是非常有用。OP明确要求Java EE,这是J2EE的现代化版本。 - Arjan Tijms

-1

关于Java EE的所有信息都可以在Oracle官方网站上找到,其中还有其他内容。您可能还会发现阅读发布8版的规范API很有趣。花时间浏览Java EE 8教程是值得的。实际上,您可能想从这里开始,因为它提供了整个平台的非常好的概述。


-3

J2EE/JEE/Jakarta EE

  • Java Enterprise Edition (JEE) 用于开发分布式应用程序和 Web 服务。
  • 它是一种基于组件的方法来开发 Web 应用程序。
  • JEE Web 应用程序被认为是三层应用程序,因为它分为三个不同的机器/层
    • 客户端(表示层)
    • J2EE 服务器(应用程序/业务层)
    • 数据库(数据访问层)

-6
简单来说 - JavaEE 是一个平台。
它由许多规范组成,这些规范只是API。这些API的具体实现被称为“参考实现”。
  • EJB只是JavaEE平台中的一个规范
  • 不,Spring是一个应用程序框架,可以允许您/支持您开发JavaEE应用程序
EJB是企业Java Bean。

4
这个回答没有给之前的回答增加任何内容。此外,它也不准确:只有一个具体的实现是 Reference,其他的并不是。其中一个细微的错误是:Spring可以与JavaEE集成,但即使没有JavaEE也能正常工作。 - Tair
@tair 是的,只有一个具体实现被视为“参考”,例如JPA有众多实现,但只有EclipseLink是RI。当我提到RI时,我是指跨不同的API。我认为你误解了我上面的回答。另外,是的,Spring集成了JavaEE,这就是我上面提到的。 - SoftwareDeveloper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接