JavaRush /Java 博客 /Random-ZH /Java EE 简介
zor07
第 31 级
Санкт-Петербург

Java EE 简介

已在 Random-ZH 群组中发布
今天我们将讨论它是什么 - Java EE:它由什么组成,Java EE 应用程序的架构有哪些特点,并且我们将提供该平台的各种技术的描述。这个主题本身很广泛,但我们不会停留在基础知识上。最后,我们将对 Java EE 与 Spring 框架进行一个小小的比较,并回答这个问题:“学什么更好”(剧透:当然,你需要学习一切=))让 Java EE 简介 - 1我们从基础开始。

Java EE - 它是什么?

Java EE是一个构建在 Java SE 之上的平台,为开发和运行大规模、多层、可扩展、可靠且安全的网络应用程序提供 API 和运行时环境。此类应用程序称为企业应用程序,因为它们解决大型企业面临的问题。然而,不仅仅是大公司和政府机构可以从这些类型的应用程序和 Java EE 提供的优势中受益。Java EE 平台提供的解决方案对于个人开发人员和小型组织来说非常有用,有时甚至是必要的。

Java EE 开发

Java EE 是通过 1998 年成立的 Java Community Process (JCP) 开发的。它允许感兴趣的各方参与制定 Java 语言平台规范的未来版本。此过程的基础是 JSR(Java 规范请求),它是描述建议添加到 Java 平台的规范和技术的正式文档。此类请求是由社区成员——普通开发者和公司提出的。后者包括 Oracle、Red Hat、IBM、Apache 等。那些。这些人提出了他们希望包含在 Java 中的新功能和优点供考虑。然后他们进行投票,并在此基础上决定下一版本中包含哪些内容。Java EE 版本历史如下所示:
  • J2EE 1.2(1999 年 12 月)
  • J2EE 1.3(2001 年 9 月)
  • J2EE 1.4(2003 年 11 月)
  • Java EE 5(2006 年 5 月)
  • Java EE 6(2009 年 12 月)
  • Java EE 7(五月)
  • Java EE 8(2017 年 8 月)
  • 雅加达 EE 8(2019 年 9 月)
2017 年,该平台的发展出现了一个新的里程碑:Oracle 将 Java EE 的开发控制权移交给了 Eclipse 基金会。并于2018年4月,Java EE更名为Jakarta EE,与Java EE 8完全兼容。

Java EE 应用架构

简短的介绍。为了更容易理解,我们来谈谈 Java EE 应用程序的结构以及我们将进一步使用的一些术语。Java EE 应用程序的结构具有两个关键品质:
  • 一是多层次。Java EE应用程序是多层的,我们稍后会更详细地讨论这一点;
  • 其次,筑巢。有一个 Java EE 服务器(或应用程序服务器),其中包含组件容器。这些容器容纳(宾果!)组件。
为了解释Java EE应用程序的架构,我们首先来谈谈层。级别是多少?不同级别使用了哪些 Java EE 技术?接下来,我们将讨论应用服务器、组件容器以及组件本身是如何互连的。但请记住,所有这些都是从不同角度对同一件事的看法,顺序在这里并不那么重要。

应用级别

多层应用程序是根据功能原则划分为独立模块(级别、层)的应用程序。通常(包括在 Java EE 开发的背景下),企业应用程序分为三个级别:
  • 客户;
  • 平均水平;
  • 数据访问级别。
  1. 客户端层是一个从Java EE服务器(中间层)请求数据的应用程序。服务器依次处理客户端的请求并返回响应。客户端应用程序可以是浏览器、独立应用程序(移动或桌面)或其他没有图形界面的服务器应用程序。

  2. 中间层又分为Web层和业务逻辑层。

    1. Web 层由一些提供客户端和业务逻辑层之间交互的组件组成。

      以下 Java EE 技术用于 Web 级别:

      • JavaServer Faces 技术 (JSF);
      • Java 服务器页面 (JSP);
      • 表达语言(EL);
      • Servlet;
      • Java EE (CDI) 的上下文和依赖注入。

    2. 业务逻辑层由实现应用程序所有业务逻辑的组件组成。业务逻辑是提供满足某些特定业务领域(金融业、银行、电子商务)需求的功能的代码。这一层可以认为是整个系统的核心。

      该级别涉及的技术:

      • 企业 JavaBeans (EJB);
      • JAX-RS RESTful Web 服务;
      • Java持久化API实体;
      • Java 消息服务。

  3. 数据访问级别。该级别有时称为企业信息系统级别(EIS)。EIS由各种数据库服务器、ERP(Enterprise Resource Planning)企业资源规划系统和其他数据源组成。业务逻辑层访问该层以获取数据。

    在此级别,您可以找到以下技术:

    • Java 数据库连接 API (JDBC);
    • Java持久化API;
    • Java EE 连接器架构;
    • Java 事务 API (JTA)。

应用程序服务器、容器、组件

我们来看看维基百科上对Java EE的定义。Java EE 是一组 Java 语言的规范和相关文档,描述了用于中型和大型企业任务的服务器平台的体系结构。为了更好地理解“一组规范”在这种情况下的含义,我们用 Java 接口进行类比。Java 接口本身缺乏功能。它只是定义了一些合同,根据这些合同来实现一些功能。但其他类实现了该接口。此外,一个接口可以有多种实现,每种实现在某些细节上可能有所不同。规格完全一样。赤裸裸的Java EE只是一组规范。这些规范由各种 Java EE 服务器实现。Java EE 服务器是实现 Java EE 平台 API 并提供标准 Java EE 服务的服务器应用程序。Java EE 服务器有时称为应用程序服务器。服务器数据可以包含应用程序组件,每个组件都对应于多级层次结构中自己的级别。Java EE服务器以容器的形式为这些组件提供各种服务。容器是它们托管的组件与支持该组件的低级平台独立功能之间的接口。容器为其托管的组件提供特定的服务。例如,开发生命周期管理、依赖注入、并发等。容器隐藏了技术复杂性并提高了可移植性。Java EE 中有四种不同类型的容器:
  1. Applet 容器由大多数浏览器实现。开发小程序时,您可以专注于应用程序的视觉方面,而容器则提供安全的环境。

  2. 应用程序客户端容器 (ACC) 包含一组 Java 类、库以及在 Java SE 应用程序中实现注入、安全管理和命名服务等功能所需的其他文件。

  3. Web 容器提供用于管理和执行 Web 组件(servlet、EJB Lite 组件、JSP 页面、过滤器、侦听器、JSF 页面和 Web 服务)的核心服务。它负责实例化、初始化和调用servlet,并支持HTTP和HTTPS协议。该容器用于向客户端浏览器提供网页。

  4. EJB(企业Java Bean)容器负责管理和执行包含应用程序业务逻辑层的EJB 模型组件。它创建新的 EJB bean 实体,管理它们的生命周期,并提供事务、安全、并发、分发、命名或异步调用功能等服务。

此外,在 Java EE 中,Java EE 规范的实现必须支持 四种类型的组件:
  1. Applet 是在浏览器中运行的图形用户界面 (GUI) 应用程序。他们利用丰富的 Swing API 来生成强大的用户界面。

  2. 应用程序是在客户端运行的程序。通常它们是图形用户界面(GUI)并用于批处理。

  3. Web 应用程序(由 servlet 及其过滤器、Web 事件侦听器、JSP 和 JSF 页面组成)- 在 Web 容器中运行并响应来自 Web 客户端的 HTTP 请求。Servlet 还支持 SOAP 和 RESTful Web 服务端点。

  4. 企业应用程序(使用 Enterprise Java Bean、Java 消息服务、Java 事务 API、异步调用、时间服务构建)在 EJB 容器中运行。容器管理的 EJB 处理事务业务逻辑。它们可以在本地或通过 RMI(或用于 SOAP 和 RESTful Web 服务的 HTTP)远程访问。

下图展示了一个典型的 Java EE 应用架构: Java EE 简介 - 2

技术

所以,我们已经整理好了架构。整体结构应该清晰。在描述架构组件的过程中,我们接触到了一些Java EE技术,例如EJB、JSP等。让我们仔细看看它们。下表显示了主要在客户端级别使用的技术:
技术 目的
小服务程序 动态处理客户端请求并生成响应(通常是 HTML 页面)的 Java 类。
Java 服务器界面 (JSF) 用于构建具有用户界面的 Web 应用程序的框架。允许您在页面上包含用户界面组件(例如字段和按钮),转换和验证这些组件,并将这些数据存储在服务器端存储中。
Java Server Faces Facelets 技术 它是 JSF 应用程序的一个子类型,使用 XHTML 页面而不是 JSP 页面
Java 服务器页面 (JSP) 编译成 servlet 的文本文档。允许您将动态内容添加到静态页面(例如 HTML 页面)
Java 服务器页面标准标记库 (JSTL) 一个标签库,封装了 JSP 页面上下文中的核心功能。
表达语言 JSP 和 Facelets 页面中用于访问 Java EE 组件的一组标准标记。
Java EE 的上下文和依赖注入 (CDI) 表示 Java EE 容器提供的一组服务,用于管理组件的生命周期,以及以安全的方式将组件注入客户端对象。
Java Bean 组件 充当应用程序页面的临时数据存储的对象。
下表展示了业务逻辑层使用的技术:
技术 目的
Enterprise Java Beans(企业 bean)组件 EJB 是包含应用程序核心功能的托管 bean。
JAX-RS RESTful Web 服务 它是一个用于开发符合 REST 架构风格的 Web 服务的 API。
JAX-WS Web 服务端点 用于创建和使用 SOAP Web 服务的 API。
Java 持久性 API (JPA) 实体 用于访问数据存储中的数据并将该数据转换为 Java 编程语言对象(反之亦然)的 API。
Java EE 托管 bean 提供应用程序业务逻辑但不需要 EJB 的事务或安全功能的托管 Bean。
Java消息服务 Java 消息服务 (JMS) API 是一种消息传递标准,允许 Java EE 应用程序组件创建、发送、接收和读取消息。这确保了组件之间的分布式、可靠和异步通信。
下表展示了数据访问层使用的技术:
技术 目的
Java 数据库连接 API (JDBC) 用于从数据存储访问和检索数据的低级 API。JDBC 的典型用途是针对特定数据库编写 SQL 查询。
Java 持久性 API 用于访问数据存储中的数据并将该数据转换为 Java 编程语言对象(反之亦然)的 API。与 JDBC 相比,API 级别更高。向开发人员隐藏了 JDBC 的所有复杂性。
Java EE 连接器架构 用于连接其他公司资源的 API,例如:
  • ERP(Enterprise Resource Planning,企业资源规划系统),
  • CRM(英文:CustomerRelationship Management,客户关系管理系统)。
Java 事务 API (JTA) 用于定义和管理事务的 API,包括分布式事务和跨多个数据存储的事务。

Java EE 与 Spring

Spring 框架被认为是 Java EE 的竞争对手。如果你看看这两个平台的发展,就会出现一幅有趣的画面。Java EE 的第一个版本是在 IBM 的参与下创建的。事实证明它们很酷,但笨拙、沉重且使用起来不方便。由于需要维护大量配置文件以及其他使开发变得复杂的原因,开发人员陷入了困境。与此同时,Spring IoC诞生了。这是一个小而美丽且易于使用的图书馆。它还使用了一个配置文件,但与 Java EE 不同的是,它只有一个。Spring的简单性导致几乎每个人都开始在自己的项目中使用这个框架。然后 Spring 和 Java EE 开始了相同的目标,但起点不同。Spring 的开发商 Pivotal Software 开始发布一个又一个项目,以涵盖 Java 开发人员所有可能和不可能的需求。渐渐地,之前所谓的Spring首先成为其中一个项目,然后与Spring Core中的其他几个项目完全合并。所有这些都导致 Spring 与原来相比不可避免地变得复杂。随着时间的推移,跟踪整个 Spring 依赖关系变得非常困难,并且需要一个单独的库来加载和运行所有内容(现在心爱的 Spring Boot 在某个地方出现了问题)。 一直以来,JCP 都在致力于一件事——最大限度地简化 Java EE 中可能实现的一切。因此,在现代 EJB 中,要描述一个 Bean,只需在类上方指定一个注释就足够了,这使开发人员能够充分利用 Enterprise Java Beans 技术的功能。类似的简化也影响了 Java EE 中的每个规范。因此,Spring 和 Java EE 在功能方面大致相当。有些事情更好,有些事情更糟,但如果你放眼全球,并没有太大差异。工作的复杂性也是如此。Spring 和 Java EE 都是优秀的工具。也许是目前用 Java 构建企业网络应用程序的最佳选择。然而,Java EE 通常只能在企业应用服务器中工作(Tomcat 不是),Spring 堆栈上的应用程序可以在任何东西上运行(在同一个 Tomcat 上),甚至根本不需要服务器(因为它会运行)它本身独立)。这使得 Spring 成为开发小型前端 GUI 应用程序或微服务架构的理想工具。但消除对应用程序服务器的依赖对 Spring 应用程序的可扩展性产生了负面影响。Java EE 非常适合实现可扩展的整体集群应用程序。目前,劳动力市场对熟悉 Spring 框架的开发人员的需求量更大。历史上是这样的:在 Java EE 过于复杂的时候,Spring“赢得了客户群”。然而,对于学什么 Spring 还是学 Java EE 的问题,还没有明确的答案。可以为初学者提供以下建议。熟悉(至少表面上)这两个平台。使用 Java EE 和 Spring 编写一个小型家庭项目。然后深入研究工作中需要的框架。因此,在 Spring 和 Java EE 之间切换并不困难。

结果

当然,一个大型主题不可能在一篇文章中涵盖!在了解大量新术语之后,您可能希望将这些知识“应用”到现实生活中的示例中。因此,我们将继续研究 Java EE:您将在下一篇文章中找到有关设置本地 Java EE 开发环境的实践课程。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION