JavaSE、JavaEE和Jakarta EE的历史、区别与联系

JavaSE、JavaEE和Jakarta EE是Java平台中的三个重要组成部分,它们各自承担着不同的角色,同时也有着密切的联系。在理解它们之间的历史、区别和联系之前,我们首先需要了解它们的基本概念。

JavaSE(Java Standard Edition)

JavaSE是Java平台的标准版,它提供了Java编程语言的基本框架和核心库,用于开发通用应用程序。JavaSE包括了Java语言的基本功能,如面向对象、异常处理、多线程、输入输出等。开发人员可以使用JavaSE来构建各种类型的应用,从简单的命令行工具到复杂的桌面应用程序都可以涵盖。

JavaEE(Java Enterprise Edition)

JavaEE是专门为企业级应用开发而设计的Java平台,它在JavaSE的基础上提供了一系列的API和服务,用于简化企业级应用的开发和部署。JavaEE包括了诸如Servlet、JSP、EJB、JPA等组件和规范,以及诸如JMS、JTA、JNDI等服务,这些都是用于构建分布式、可扩展、安全的企业级应用所必需的。JavaEE应用通常部署在JavaEE兼容的应用服务器上,如Apache Tomcat、WildFly等。

Jakarta EE(原名Java EE)

Jakarta EE(曾被称为Java EE)是JavaEE的下一代版本,它在Oracle将Java EE的开发和维护交给Eclipse Foundation后得以重生,并更名为Jakarta EE。Jakarta EE保留了JavaEE的核心特性和API,但在标准化和开发过程上有了更加开放和透明的方式。此外,Jakarta EE也在持续地发展和更新,以适应新的技术趋势和需求。

历史发展

  • JavaSE最初于1995年发布,它奠定了Java编程语言的基础。
  • JavaEE于1999年首次发布,旨在简化企业级应用的开发。
  • 随着技术的发展,JavaEE逐渐成为了企业级开发的标准。
  • 2017年,Oracle宣布将Java EE的开发和维护交给Eclipse Foundation,之后Java EE更名为Jakarta EE。
  • Jakarta EE持续发展,吸引了全球开发者社区的参与,以满足当今企业级应用的需求。
  • JavaEE8的时候对应的Servlet类名是:javax.servlet.Servlet。
  • JakartaEE9的时候对应用的Servlet类名是:jakarta.servlet.Servlet(包名都换了)。
  • 如果你之前的项目还在使用javax.servlet.Servlet,那么你的项目无法直接部署到Tomcat10+版本上。你只能部署到Tomcat9-版本上。在Tomcat9以及Tomcat9之前的版本中还是能够识别javax.servlet这个包。

区别与联系

  • JavaSE是Java平台的基础,提供了通用的编程环境和基本的API,而JavaEE(包括Jakarta EE)则在JavaSE的基础上提供了专门用于企业级应用开发的API和服务。
  • JavaEE(Jakarta EE)是JavaSE的扩展,它包含了JavaSE的所有功能,并额外提供了用于构建分布式系统和企业级应用的组件和服务。
  • JavaSE和JavaEE(Jakarta EE)之间的联系在于,JavaEE(Jakarta EE)是建立在JavaSE之上的,因此JavaEE(Jakarta EE)应用程序可以直接使用JavaSE提供的API和功能。
  • JavaSE和JavaEE(Jakarta EE)通常在不同的应用场景下使用,JavaSE适用于通用的应用开发,而JavaEE(Jakarta EE)则适用于复杂的企业级应用开发。

总的来说,JavaSE、JavaEE和Jakarta EE构成了Java平台的核心组成部分,它们各自承担着不同的角色,但又紧密相连,共同构建了Java生态系统的繁荣与发展。

FAQ 问题

1. 为什么javax.*包改成了jakarta.*?

Jakarta EE改变了javax.*包的命名是因为其历史渊源和发展需求。这个改变主要涉及到Java EE从Oracle转交给Eclipse Foundation后的重塑过程。

  1. 知识产权问题:在Java EE原来的开发模式下,Oracle拥有对javax.*包的知识产权。然而,为了将Java EE更好地纳入开放的、社区驱动的发展过程中,Oracle决定将Java EE的开发和维护交给Eclipse Foundation,这意味着需要解决javax.*包的知识产权问题。Eclipse Foundation和Oracle达成了协议,确保了javax.*包在Java EE的新版本中的使用和发展,但需要将其重新命名以避免知识产权的问题。

  2. 转变为Jakarta EE:为了反映Java EE在Eclipse Foundation下的新身份和新起点,Java EE被重命名为Jakarta EE。随之而来的,javax.*包也需要进行相应的更改以适应新的命名空间。

  3. 包名的变化javax.*包在Jakarta EE中被重命名为jakarta.*。这样做的目的是为了将其与Java EE时代的javax.*包区分开来,以及避免知识产权上的冲突。这种转变需要在代码、文档和工具中进行相应的更新,以确保Jakarta EE平台的连贯性和兼容性。

总的来说,javax.*包改为jakarta.*主要是为了解决知识产权问题,并反映Java EE在Eclipse Foundation下的新身份和发展方向。这个变化是Java EE(现在的Jakarta EE)在追求开放、社区驱动的发展过程中的一个重要举措。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/760403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux——进程信号(二)

目录 1、阻塞信号 1.1、信号其他相关常见概念 1.2、在内核中的表示 1.3、sigset_t 1.4、信号集操作函数 2、捕捉信号 2.1、内核如何捕捉信号 5.2、sigaction 1、阻塞信号 1.1、信号其他相关常见概念 实际执行信号的处理动作被称为信号递达(Delivery&#x…

sentinel黑白名单权限控制

黑白名单权限控制 规则配置 规则创建 创建一个 AuthorityRule 规则对象三个关键要素 setStrategy: 黑白名单类型setResource: 规则和资源的绑定关系setLimitApp: 限制的来源 调用 AuthorityRuleManager.loadRules()加载规则 监听器实例化和管理 AuthorityPropertyListener…

【Leetcode】top 100 链表

基础知识补充 单向链表结构:item存储数据 next指向下一结点地址 head保存首地址 class Node(object): # 创建结点def __init__(self, item): self.item item # item存放数据元素self.next None # next是下一个…

【教程】混淆代码保护与优化

在本文中,我们将介绍如何在iOS项目中利用混淆技术来保护源代码安全并实现优化。我们将分别针对Swift和OC项目,详细介绍如何使用脚本和工具进行代码混淆,并解决在混淆过程中可能遇到的问题。随着移动应用市场的不断扩大,iOS应用的安…

使用Pygame做一个乒乓球游戏

项目介绍 使用Pygame做一个乒乓球游戏。左侧为电脑,右侧为玩家。 视频地址-YT 视频搬运-B站 视频教程约90分钟。 代码地址 环境:需要pygame库,可用pip安装:pip install pygame 1. 基础版本 首先进行一些初始化,初始…

java NIO群聊系统

demo要求: 1)编写一个NIO群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞) 2)实现多人群聊 3)服务器端:可以监测用户上线,离线,并实现消息转发功…

python 爬虫 地理空间DEM 制作中国地形

一.配置Python 爬虫 环境 from selenium import webdriver import time # from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keys # from selenium.webdriver.comm…

Langchain-chatchat+ChatGlm3-6b部署

我的环境 升级了下配置,加载知识库成功 内存:16GB 32B 显卡:GTX1060-6G RTX4080 Laptop-12G 1. 基础环境准备 1.1. 安装anaconda,创建环境python版本3.11 conda create -n chatglm3 python3.11 conda activate chatglm3 1.…

如何在CentOS搭建docker compose ui可视化工具并无公网IP远程管理容器

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

蓝桥杯 2023 省A 更小的数

主要思路: 输入一个长度为n的字符串,用二维数组dp[i][j]来记录子串[i, j]是否需要反转一次才能满足条件。使用动态规划自底向上地填充dp数组。根据问题的要求,需要考虑字符串的子串中字符的大小关系来判断是否需要反转。最后统计满足条件的子…

静态扭矩,是用公称扭矩还是最小动态扭矩作为对比?——​suntorque智能扭矩系统​

在机械工程和动力学领域,扭矩是一个至关重要的概念。当我们讨论到扭矩时,常常会遇到静态扭矩和动态扭矩的说法。特别是在实际应用中,工程师们经常需要对比和选择使用哪种扭矩作为参考。那么,静态扭矩,是用公称扭矩还是…

【C/C++】详解 assert() 断言(什么是assert? assert有什么作用?)

目录 一、前言 二、什么是 assert ? 三、assert 的用法 四、assert 案例解析 五、assert 断言的使用原则 六、共勉 一、前言 在编写程序过程中,尤其是调试代码时,往往需要一个提醒代码漏洞/Bug的小助手,以便于程序员及时修改和完善代码…

109 项目整合 spring-quartz 启动自动执行定时任务

前言 项目中使用了 quartz 来支持定时任务的相关基础支撑, 但是 最近添加了一个 资源消耗比较高的定时任务, 发布到测试环境之后, 发现服务突然 起不起来了[资源比较有限] 然后 查看了一下日志, 这个定时任务怎么在执行?, 不是 配置的是 凌晨两点么, 然后 仔细一看 几乎配置…

python课后习题一

题目: 1. 2. 解题过程: 1. """计算年数和天数""" minute int(input("请输入分钟数:")) hours minute // 60 days hours // 24 years days // 365 last_days days % 365 print(f"{minut…

【IEDM2023】背势垒电荷运动诱导GaN HEMT随时间的非稳态击穿

分享一篇2023年IEDM上GaN HEMT(高电子迁移率晶体管)的研究论文,标题为“Charge Movement in Back Barrier Induced Time-Dependent On-State Breakdown of GaN HEMT”。论文讨论了在GaN HEMT中,由于背栅(Back Barrier&…

BigDecimal类的使用,用于精确计算任意精度的数字

BigDecimal类 BigDecimal 是 Java 中用于精确表示任意精度的十进制数的类。在很多情况下,使用基本数据类型(如 double 或 float)进行浮点数计算可能会导致精度丢失或舍入错误。BigDecimal 提供了一种更精确的解决方案,可以处理需要高精度计算的场景,比如财务应用或科学计算…

力扣---括号生成---回溯---dfs/二进制

暴力--二进制 采用与:力扣---子集---回溯(子集型回溯)---递归-CSDN博客 中二进制求解一样的思路,即遍历0~-1(从二进制去考虑),如果这个数的第 i 位为0,则括号的第 i 位为‘&#xff…

Excel第27享:基于if函数嵌套的多结果唯一性匹配

1、需求描述 如下图所示,现在有E列、F列、G列三列数据,在D列中填充“最终对应编号”,匹配原则是:E列、F列、G列三列数据中,哪个有数据就填充哪个数据,如果都没有,就显示空值即可。 2、解决思路…

redis 常见的异常

目录 一、缓存穿透 1、概念 解决方案 (1)布隆过滤器 (2)、缓存空对象 二、缓存雪崩 1、概念 解决方案 (1)redis高可用 (2)限流降级 (3)数据预热 一、缓存穿透 1、概念 缓…

【Greenhills】GHS-MULTI IDE-Ubuntu纯命令系统部署license文件

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 记录在Ubuntu纯命令系统中部署license文件的步骤。 2、 问题场景 客户服务器为Linux纯命令行的环境,客户也无其他服务器可以部署,需在纯命令行上尝试安装。 3、软硬件环境 1&#xff09…