眼看他起高楼,眼看他宴宾客,眼看他楼塌了
本文已被https://yourbatman.cn收录;程序员专用网盘https://wangpan.yourbatman.cn;公号后台回复“专栏列表”获取全部小而美的原创技术专栏

✍前言

你好,我是方同学(YourBatman)

A哥 -> 方同学。是的,中文昵称改了。自知道行不深无以用“哥”字称呼,虽已毕业多年,同学二字寄寓心态一直积极、热情、年轻

诞生于1995年的Java语言,年近三旬,甚至比很多同学的年龄还大得多。正所谓三十年河东,三十年河西,有人说Java已廉颇老矣,基本结构过于老套不灵活,但显示情况是它“老而不死”依旧常年霸榜,是棵常青树。

深爱Java的同学知道,Java并不老(Python年纪更大)、开发效率并不低(马拉松型选手看中长远效率)、语法并不是啰嗦(这是严谨的表现,同时也拥抱了Stream流式、Function函数式编程来简化开发)。Java鼓励用严谨的方法、正确的方式来设置内容,这让Java程序员们对待代码更有全局性,更适合构建规模性的企业级项目。

另外,Java做到了哪怕最新版JDK能(几乎)100%兼容首个版本,这无不依靠于优秀的设计和规范的制定。2000年左右随着Java的高速发展,被大量用于企业应用的开发,所以迫切需要规范的解决方案。

正所谓一流企业定标准、二流企业做品牌、三流企业做产品 ,这个活Sun公司自然不会放过,它就是企业版Java,也叫Java EE(后改名为Jakarta EE)。Java EE是一些列技术标准的集合(只定标准,不提供实现),其中很多技术经历这么多年的发展已经很成熟、应用得很广泛了。但深入了解后会发现,Java EE很多技术都是起个大早,赶个晚集,否则也不会有Spring现在的绝对霸主地位。

所属专栏

  • BATutopia-Java EE

相关下载

  • Java EE工程源代码:https://github.com/yourbatman/BATutopia-java-ee
  • JSR-JCP工程源代码:https://github.com/yourbatman/JSR-JCP

本文提纲

版本约定

  • Java EE:6、7、8
  • Jakarta EE:8、9、9.1

✍正文

上面说到,Java能够历久弥新得益于它是非常严谨的、注重编码规范、注重设计规范的编程语言。按照规范实施做到有据可循,实施过程又可反馈给规范,形成正反馈的周而复始,越来越完善。

本专栏将介绍Java EE/Jakarta EE相关的几十种技术,作为Java企业级开发的标准技术,很多技术应用非常广泛。本文作为第一篇,将从发展历程出发,先一起全方位的了解到它。

JDK发展简史

在讲述Java EE的发展历程之前,先简要回顾(普及)一下JDK的发展史,方便在时间上对应参照,毕竟开发者一般对JDK的版本会更熟、更敏感些。

诞生:1995年5月,Oak语言改名为Java,标志着Java的诞生,并且提出了著名的Write Once,Run Anywhere口号。下面用表格形式记录其发版时间轴

版本 发布日期 焦点说明
JDK 1.0 1996.01 Java虚拟机、基础类库
JDK 1.1 1997.02 规定了Jar文件格式,JDBC、JavaBeans、RMI等。开始支持内部类和反射
JDK 1.2 1998.12 引入集合框架Collections、Map等。从此版本开始,分为3个版本:J2SE/J2EE/J2ME(注:1999.04著名的HotSpot虚拟机诞生,顺势推出了Java EE首个版本)
JDK 1.3 2000.05 千禧年的第一个版本,对类库进行了优化
JDK 1.4 2002.02 支持正则Pattern、NIO、JDBC 3.0、assert断言
JDK 5 2004.09 JDK命名方式变化、自动拆装箱、泛型、枚举、可变参数、增强for循环、JUC并发包等等非常多新特性
JDK 6 2006.12 编译器注解处理器(lombok的原理)、J2xx改为Java XX
JDK 7 2009.02 try-with-resources、NIO2(也叫AIO)、泛型推断
JDK 8 2014.03 憋了5年的大招,果然经典。Lambda表达式、函数式编程、Stream流式编程、方法引用、接口默认方法、彻底移除HotSpot的永久代
JDK 11 2018.09 Jigsaw模块化、增强类型推断、革命性的垃圾收集器ZGC
JDK 17 2021.09 …敬请期待

期间,关于Java/Sun公司有些大事记,记录一下

日期 事件
1995.05 Java语言诞生
1996.01 JDK 1.0版本发布
1998.12 JAVA2企业平台J2EE发布(和JDK 1.2一起)
2005.06 JavaOne大会召开(Java诞生10周年),J2EE更名为Java EE, J2SE更名为Java SE,J2ME更名为Java ME
2009.04 甲骨文Oracle以现金收购Sun微系统公司,交易价格74亿美元(Sun公司市值顶峰时超2000亿美金。眼看他起高楼,眼看他宴宾客,眼看他楼塌了)。Sun公司最大的资产,便是Java。从此Java商标被Oracle收入囊中,才有了后来的Oracle PK Google大战
2017.08 Oracle将Java EE(Java SE还自己保留)交给开源组织,Eclipse基金会接手。但Oracle不允许开源组织使用Java名号,所以Jakarta EE名称于2018.02.26应运而生

什么是Java EE?

作为一个(资深)的Java开发者,这似乎是一个很简单的问题。

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。它分为三个版本:

  • Java SE(J2SE):标准版。基础中的基础,后面2个版本都依赖于它。当前最新版本是Java 17(LTS版本,将于2021年9月发布)
  • Java EE(J2EE):企业版。用于企业级大型应用开发,包含了Web、Security、Management等几十种标准技术
  • Java ME(J2ME):移动版。随着Android/iOS的流行,它已几乎销声匿迹

由于Java EE能够直接应用于企业级应用开发,解决实际问题,直接产生价值,因此也常说它价值更高。所以用谷歌百度一下“Java培训”关键字,基本都是培训Java EE的。

作为common sense,特别是Java程序员除了需对JDK的历史有所了解外,Java EE的发展历程也是有必要知道的,毕竟这是基础知识点,是聊天的谈资,是你的内功

Java EE发展史

J2EE(JavaEE)自1999年首次发布以来,已成为实现和部署可移植、多层企业应用程序的集成标准(它是标准,它是规范),现在了解下它的发展史,记录到如下表格(从成体系的Java EE 1.4版本开始)。

说明:该表格是YourBatman翻阅多处资料搜集整合,全网最全的一份,请收藏使用。转载请注明出处

版本 发布日期 焦点说明
J2EE 1.4 2003.12 对Web服务更好支持。启用javax命名空间。Servlet 2.4、JSP 2.0、EJB 2.1等
Java EE 5 2006.05 以Web为着力点继续优化。Servlet 2.5、JSP 2.1、EJB 3.0、注解支持等
Java EE 6 2009.12 添加了大量新技术来简化开发,如:Servlet 3.0(异步处理)、Bean Validation、EJB 3.1、JSF 2.0、JPA 2.0、上下文和依赖注入(CDI)
Java EE 7 2013.06 提高生产力满足企业需求和HTML5。Servlet 3.1、WebSocket 1.0、JSON 1.0、JMX 2.0、Batch 1.0
Java EE 8 2017.08 增加了JSON绑定和安全相关。Servlet 4.0、Bean Validation 2.0、CDI 2.0、JPA 2.2
Jakarta EE入局 2017.08 Oracle将Java EE交给开源组织,Eclipse基金会接手(Apache基金会爆冷出局还是不想要?)。但Oracle不允许开源组织使用Java名号,所以Jakarta EE名称于2018.02.26应运而生
Jakarta EE 8 2019.09 规范与Java EE 8完全相同。Maven的GAV变了:javax.servlet:javax.servlet-api:4.0.1 -> jakarta.servlet:jakarta.servlet-api:4.0.2,但命名空间没变依旧还是javax.*,算是个小过度吧
Jakarta EE 9 2020.11 没有加入新功能,Eclipse基金会的首个正式版本。命名空间从javax.*迁移到jakarta.*,前者从此成为历史。所有模块大版本号+1,如Servlet 4.0.2 -> Servlet 5以表示其断层式升级
Jakarta EE 9.1 2021.06 相较于9 没有 加入新API。主要提供对Java SE 11的运行支持

2017年随着Oracle把Java EE交给开源基金会,Java EE从此成为历史,接下来将由社区驱动的Jakarta EE取而代之。

虽然Java EE已成过去式,但它似乎代表着我们的程序青春,依然是沟通的主力。因此,在很长很长很长一段时间内,Java EE知名度依旧盖过Jakarta EE,沟通交流中使用它居多。

Tips:Java EE版本号和Java SE没有绝对联系。如即使到最新的Jakarta EE 9、9.1版本对JDK的最低要求是8,而非9

咱们程序员可能会吐槽Oracle为毛不让使用Java EE商标,这么搞太费劲了。但在Oracle眼中,可能,一切都是利益(Oracle号称是一个律师比工程师数量还多的高科技企业)

补充:什么是Eclipse基金会

2004年2月该非盈利组织的正式成立,由包括开发者、消费者和插件提供商在内的各独立团体组成的董事会,为Eclipse的长期发展负责,它就是Eclipse基金会。

该基金会最初只有19个开源项目,现在有300+个之多,我们比较熟悉的就有:

  • Java开发工具:功能强大的Java开发IDE Eclipse
  • 众多Jakarta项目:Jakarta Annotations、Jakarta Bean Validation、Jakarta JSON Processing等等
  • Vert.X:一个面向现代web和企业的异步应用框架,一个可能会撼动Spring地位的全家桶框架

另外,可把Eclipse基金会和Apache基金会对照着看,程序员对后者理应更熟悉些。

什么是Jakarta EE


该名称的由来和两个大事记有关:

  1. 为了让Java EE更开放,Oracle决定为它寻找一个新东家(呵呵,我笑而不语)。2017年8月,Oracle将Java EE交给开源组织,Eclipse基金会接手(Apache爆冷出局还是不想要?)
  2. Oracle拒绝让基金会继续使用Java名字,因此Eclipse做了一项名义调查,从Jakarta EE和Enterprise Profile两个名称中二选一,前者大比例胜出。所以在2018年3月份,Eclipse宣布正式将Java EE更名为Jakarta EE,并且确定了logo(如上图)。另外,跟着更名的还有一些和Java EE紧密相关的名词,如Glassfish -> Eclipse Glassfish;JCP -> EE.next;ODM(Oracle Development Management) -> PMC

总而言之:Jakarta EE你可认为它(的内容)就是Java EE,只是名字换了,老东家换了。之前由JCP来推动它的发展,以后将有开源社区推动。至于前景如何,咱们拭目以待

Jakarta EE发展史

Jakarta EE还很年轻,2017年8月从Oracle手中接棒过来算起,也不过4岁,谈不上什么发展史,是好是坏周期太短也不能早下定论。截止到目前,共发布了三个版本,内容几乎没有变化,只在命名空间、版本号方面稍有改变,记录如下:

版本 发布日期 焦点说明
Jakarta EE 8 2019.09 规范与Java EE 8完全相同。Maven的GAV变了:javax.servlet:javax.servlet-api:4.0.1 -> jakarta.servlet:jakarta.servlet-api:4.0.2,但命名空间没变依旧还是javax.*,算是个小过度吧
Jakarta EE 9 2020.11 没有加入新功能,Eclipse基金会的首个正式版本。命名空间从javax.*迁移到jakarta.*,前者从此成为历史。所有模块大版本号+1,如Servlet 4.0.2 -> Servlet 5以表示其断层式升级
Jakarta EE 9.1 2021.06 相较于9 没有 加入新API。主要提供对Java SE 11的运行支持

一站式聚合API

如你所知,Java EE/Jakarta EE是几十种技术(规范)的几何,几乎每种技术都有其API(对应一个Jar),为了方便总揽全局,Java EE自6版起提供了一站式聚合API,导入一个就够了:

<dependency><groupId>javax</groupId><artifactId>javaee-api</artifactId><version>6.0.0</version><scope>provided</scope>
</dependency><!-- Jakarta命名空间版本 -->
<dependency><groupId>jakarta.platform</groupId><artifactId>jakarta.jakartaee-api</artifactId><version>9.1.0</version><scope>provided</scope>
</dependency>

效果如下:

特别注意:实际工作中不建议使用这种粗暴的、大而全的导入方案,而是应该按需导入精确把握,还classpath一片“干净”,并且也能做到心中有数,方可运筹帷幄。

有Java EE SDK吗?

既然Java SE有JDK,那么Java EE是否也有SDK呢?答案:有的。Oracle官网/Jakarta EE官网均提供了SDK供以下载:https://www.oracle.com/java/technologies/javaee-8-sdk-downloads.html

只不过此SDK可能让你失望了,它不是传统的软件开发工具包,而更像是一个技术合集,并且和自家的Glassfish强绑定,包含有以下内容:

  • doc官方文档
  • 几十种技术的使用samples(基于Maven管理、构建)
  • glassfish容器,强耦合

总的来讲,如若是抱着学一学的目的那么可以down下来玩玩,毕竟里面的samples示例、文档比较全。如若你是抱着使用的目的,那就不建议了,毕竟glassfish我们(国内)很少使用。

✍总结

30年弹指一挥间,Java EE在逐渐淡出Java开发者的视野,但中短期来看它依旧是我们绕不过的内容,经常能听到、看到、聊到。当在研究Spring等开源框架的时候,也经常会看到Java EE的影子。

本文介绍了Java EE的发展史,目的是对它有个笼统的认识。从Java EE到Jakarta EE,它能否重新焕发生命力我不知道,但留下来的不少东西依旧是目前的主流(如Servlet规范、JPA等等),具有非常高的学习价值,切莫轻视。

下篇文章将介绍Java EE/Jakarta EE的30余种技术(可能你只听过Java EE的13种核心技术),敬请关注本专栏。

相关下载

  • JSR-JCP下载:https://github.com/yourbatman/JSR-JCP
  • 源代码下载:https://github.com/yourbatman/tech-column-learning
  • 从网盘直接下载:https://wangpan.yourbatman.cn/s/nRtq 提取码:jsrjcp

本网盘现已开放注册,注册地址:https://wangpan.yourbatman.cn/signup

推荐阅读

  • /和/*的区别记不住?我的答案保你终身难忘
  • 蚂蚁金服上市了,我不想努力了
  • 程序人生 | 春风得意马蹄疾,一日看尽长安花
  • 2个周末,历时100+小时,YourBatman新版Blog正式上线
  • YourBatman 2020年感悟关键词:科比、裁员、管理层、活着
System.out.println("写得可还行?收藏再看吧,点个赞吧,分享下吧");
echo("关注【BAT的乌托邦】 https://yourbatman.cn");
console.log("私聊YourBatman:fsx1056342982");

我是YourBatman:一个早在2013年就已毕业的大龄程序员。网瘾失足、清考、延期毕业、房产中介、送外卖、销售…是我不可抹灭的标签。现在是一个纯粹技术工。

  • 2013.08-2014.07宁夏银川中介公司卖二手房1年,毕业后第1份工作
  • 2014.07-2015.05荆州/武汉/北京,从事炸鸡排、卖保险、直销、送外卖工作,这是第2,3,4,5份工作
  • 2015.08开始从事Java开发,做过兼职,闯过外包,呆过大厂!现为我司基础架构团队负责人
  • Java架构师、Spring开源贡献者,CSDN 2019博客之星Top 10,博客专家,领域建模专家。热衷写代码,有代码洁癖;重视基础和基建,相信效率为王
  • 现在写纯粹技术专栏(公号后台回复专栏列表获取全部),不哗众取宠。如果你也有共鸣,可加我好友(fsx1056342982)一起进步哈(备注:java)

从Java EE到Jakarta EE,企业版Java的发展历程相关推荐

  1. 从Java EE到Jakarta EE的发展历程

    目录 ✍前言 JDK发展简史 什么是Java EE? Java EE发展史 补充:什么是Eclipse基金会 有Java EE SDK吗? 什么是Jakarta EE Jakarta EE发展史 一站 ...

  2. J2EE,Java EE,Jakarta EE 命名之间的恩恩怨怨

    介绍 简单来说,上面所有的名字指的都是一个东西 Java Platform, Enterprise Edition 上面的几个名词都是下面的内容的简写: J2EE(Java 2 Platform, E ...

  3. java ee 怎么改名_Java EE 改名 Jakarta EE 后 又要换 Logo 了

    关于 Jakarta EE 的规范及版本化的问题,官方还整理一篇"关于 Jakarta EE 你必须知道的 5 件事",主要内容如下: 1.规范 Jakarta EE 规范将由 J ...

  4. Java EE与Jakarta EE区别

    https://www.oracle.com/cn/java/technologies/java-ee-glance.html 官网介绍如下 Java Platform, Enterprise Edi ...

  5. 我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:JVM的发展历程

    温馨提示:本篇文章能面世真的是太不容易了,我真的是写了好久好久,从2022年9月7日(首次发布)一直写到了今天,即2022年9月21日,每天写一点,再写一点,直至今天才终于写完,我可以保证这里面的每一 ...

  6. Jakarta EE:云原生Java的新平台

    \ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ 在今年的JAX大会上,Eclipse基金会的执行董事Mike Milinkovich专门介绍 ...

  7. jakarta_适用于Java EE / Jakarta EE开发人员的Micronaut

    jakarta 城镇中有一个名为Micronaut的新微服务框架. 在这篇文章中,我将从Java EE / Jakarta EE的角度讨论如何冒险使用Micronaut框架. 我是Java EE开发人 ...

  8. jakarta ee_适用于Java EE / Jakarta EE开发人员的Micronaut

    jakarta ee 城镇中有一个名为Micronaut的新微服务框架. 在本文中,我将从Java EE / Jakarta EE的角度讨论如何冒险使用Micronaut框架. 我是Java EE开发 ...

  9. 适用于Java EE / Jakarta EE开发人员的Micronaut

    城镇中有一个名为Micronaut的新微服务框架. 在本文中,我将从Java EE / Jakarta EE的角度讨论如何冒险使用Micronaut框架. 我是Java EE开发人员,因此使用诸如Ec ...

最新文章

  1. Clojure程序设计
  2. Python入门100题 | 第052题
  3. struts2 spring hibernate 原理
  4. proxy connect abort处理方法_Java代理设计模式(Proxy)的几种具体实现
  5. 通宵爆肝:C语言下的平衡二叉树(Avl)原来如此简单!
  6. 【VMCloud云平台】SCAP(一)规划
  7. AHK 中的字符串拼接和遍历操作
  8. 萌新学python(输入与输出)
  9. Matplotlib 中文字体设置
  10. ARMLinux 下驱动开发第三节
  11. 模2除法(CRC校验码计算)
  12. 重庆python爬虫培训_PYTHON爬虫工程师
  13. 使用Grafana搭建监控系统
  14. 开发悬浮球SDK之自定义view 下篇 — 裁剪圆形(以及其他形状)背景图片并设置文字
  15. UVM-1.1学习(一)——uvm代码的分类
  16. 罗永浩:做直播带货很赚钱,一晚上利润轻松几百万 比卖锤子手机过瘾
  17. 华为freelace耳机修整详录
  18. 基于C++实现的选课系统
  19. 【MDCC 2016】产品与设计峰会现场实录(下)
  20. win10怎么快捷锁定计算机,win10锁屏快捷键如何设置_让你win10电脑一键秒锁屏的方法...

热门文章

  1. a标签隐藏真实地址_用好这些隐藏「小开关」,让 Chrome 浏览器更好用
  2. 前端自动化测试之多浏览器兼容测试平台F2etest全面踩坑记录
  3. 盘点80后、90后个性婚纱摄影拍摄场景
  4. linux下编译dbus源码,ubuntu安装dbus
  5. WebMagic基本使用
  6. 组合导航(GNSS+惯性导航)
  7. SQL-索引index
  8. JAVA CRC16校验
  9. zabbix分布式监控解决方案
  10. vmware workstation 设置efi启动方法