?前言
誕生于1985年的Java語言,早已年過三旬本砰,甚至已經(jīng)越過“35歲魔咒”碴裙,比很多同學的年齡大得多。正所謂三十年河東点额,三十年河西舔株,有人說Java已廉頗老矣,基本結構過于老套不靈活还棱,但顯示情況是它“老而不死”依舊常年霸榜载慈,是棵常青樹。
深愛Java的同學知道珍手,Java并不老(Python年紀更大)办铡、開發(fā)效率并不低(馬拉松型選手看中長遠效率)、語法并不是啰嗦(這是嚴謹?shù)谋憩F(xiàn)琳要,同時也擁抱了Stream流式寡具、Function函數(shù)式編程來簡化開發(fā))。Java鼓勵用嚴謹?shù)姆椒ㄖ刹埂⒄_的方式來設置內(nèi)容童叠,這讓Java程序員們對待代碼更有全局性,更適合構建規(guī)模性的企業(yè)級項目孔厉。
另外拯钻,Java做到了哪怕最新版JDK能(幾乎)100%兼容首個版本帖努,這無不依靠于優(yōu)秀的設計和規(guī)范的制定撰豺。2000年左右隨著Java的高速發(fā)展粪般,被大量用于企業(yè)應用的開發(fā),所以迫切需要規(guī)范的解決方案污桦。
正所謂一流企業(yè)定標準亩歹、二流企業(yè)做品牌、三流企業(yè)做產(chǎn)品褐着,這個活Sun公司自然不會放過饺蚊,它就是企業(yè)版Java砾淌,也叫Java EE(后改名為Jakarta EE)。Java EE是一系列技術標準的集合(只定標準顾稀,不提供實現(xiàn)),其中很多技術經(jīng)歷這么多年的發(fā)展已經(jīng)很成熟坝撑、應用得很廣泛了静秆。但深入了解后會發(fā)現(xiàn),Java EE很多技術都是起個大早巡李,趕個晚集抚笔,否則也不會有Spring現(xiàn)在的絕對霸主地位。
點撥-Java EE
本文提綱
版本約定
Java EE:6侨拦、7殊橙、8
Jakarta EE:8、9狱从、9.1
?正文
上面說到膨蛮,Java能夠歷久彌新得益于它是非常嚴謹?shù)摹⒆⒅鼐幋a規(guī)范季研、注重設計規(guī)范的編程語言鸽疾。按照規(guī)范實施做到有據(jù)可循,實施過程又可反饋給規(guī)范训貌,形成正反饋的周而復始制肮,越來越完善。
本專欄將介紹Java EE/Jakarta EE相關的幾十種技術递沪,作為Java企業(yè)級開發(fā)的標準技術豺鼻,很多技術應用非常廣泛。本文作為第一篇款慨,將從發(fā)展歷程出發(fā)儒飒,先一起全方位地了解到它。
JDK發(fā)展簡史
在講述Java EE的發(fā)展歷程之前檩奠,先簡要回顧(普及)一下JDK的發(fā)展史桩了,方便在時間上對應參照附帽,畢竟開發(fā)者一般對JDK的版本會更熟、更敏感些井誉。
誕生:1995年5月蕉扮,Oak語言改名為Java,標志著Java的誕生颗圣,并且提出了著名的?Write Once,Run Anywhere?口號喳钟。下面用表格形式記錄其發(fā)版時間軸
版本發(fā)布日期焦點說明
JDK 1.01996.01Java虛擬機、基礎類庫
JDK 1.11997.02規(guī)定了Jar文件格式在岂,JDBC奔则、JavaBeans、RMI等蔽午。開始支持內(nèi)部類和反射
JDK 1.21998.12引入集合框架Collections易茬、Map等。從此版本開始及老,分為3個版本:J2SE/J2EE/J2ME(注:1999.04著名的HotSpot虛擬機誕生抽莱,順勢推出了Java EE首個版本)
JDK 1.32000.05千禧年的第一個版本,對類庫進行了優(yōu)化
JDK 1.42002.02支持正則Pattern写半、NIO岸蜗、JDBC 3.0、assert斷言
JDK 52004.09JDK命名方式變化叠蝇、自動拆裝箱璃岳、泛型、枚舉悔捶、可變參數(shù)铃慷、增強for循環(huán)、JUC并發(fā)包 等等非常多新特性
JDK 62006.12編譯器注解處理器(lombok的原理)蜕该、J2xx改為Java XX
JDK 72009.02try-with-resources犁柜、NIO2(也叫AIO)、泛型推斷
JDK 82014.03憋了5年的大招堂淡,果然經(jīng)典馋缅。 Lambda表達式、函數(shù)式編程绢淀、Stream流式編程萤悴、方法引用、接口默認方法皆的、徹底移除HotSpot的永久代
.........
JDK 112018.09Jigsaw模塊化覆履、增強類型推斷、革命性的垃圾收集器ZGC
.........
JDK 172021.09...敬請期待
期間,關于Java/Sun公司有些大事記硝全,記錄一下
日期事件
1995.05Java語言誕生
1996.01JDK 1.0版本發(fā)布
1998.12JAVA2企業(yè)平臺J2EE發(fā)布(和JDK 1.2一起)
2005.06JavaOne大會召開(Java誕生10周年)栖雾,J2EE更名為Java EE, J2SE更名為Java SE,J2ME更名為Java ME
2009.04甲骨文Oracle以現(xiàn)金收購Sun微系統(tǒng)公司伟众,交易價格74億美元 (Sun公司市值頂峰時超2000億美金析藕。眼看他起高樓,眼看他宴賓客赂鲤,眼看他樓塌了)噪径。Sun公司最大的資產(chǎn)柱恤,便是Java数初。從此Java商標被Oracle收入囊中,才有了后來的Oracle PK Google大戰(zhàn)
2017.08Oracle將Java EE(Java SE還自己保留)交給開源組織梗顺,Eclipse基金會接手泡孩。但Oracle不允許開源組織使用Java名號,所以Jakarta EE名稱于2018.02.26應運而生
什么是Java EE寺谤?
作為一個(資深)的Java開發(fā)者仑鸥,這似乎是一個很簡單的問題。
Java是一種可以撰寫跨平臺應用軟件的面向?qū)ο蟮某绦蛟O計語言变屁。它分為三個版本:
Java SE(J2SE):標準版眼俊。基礎中的基礎粟关,后面2個版本都依賴于它疮胖。當前最新版本是Java 17(LTS版本,將于2021年9月發(fā)布)
Java EE(J2EE):企業(yè)版闷板。用于企業(yè)級大型應用開發(fā)澎灸,包含了Web、Security遮晚、Management等幾十種標準技術
Java ME(J2ME):移動版性昭。隨著Android/iOS的流行,它已幾乎銷聲匿跡
由于Java EE能夠直接應用于企業(yè)級應用開發(fā)县遣,解決實際問題糜颠,直接產(chǎn)生價值,因此也常說它價值更高萧求。所以用谷歌百度一下“Java培訓”關鍵字其兴,基本都是培訓Java EE的。
作為common sense饭聚,特別是Java程序員除了需對JDK的歷史有所了解外忌警,Java EE的發(fā)展歷程也是有必要知道的,畢竟這是基礎知識點,是聊天的談資法绵,是你的內(nèi)功箕速。
Java EE發(fā)展史
J2EE(JavaEE)自1999年首次發(fā)布以來,已成為實現(xiàn)和部署可移植朋譬、多層企業(yè)應用程序的集成標準(它是標準盐茎,它是規(guī)范),現(xiàn)在了解下它的發(fā)展史徙赢,記錄到如下表格(總成體系的Java EE 1.4版本開始)字柠。
說明:該表格是YourBatman翻閱多處資料搜集整合,全網(wǎng)最全的一份狡赐,請收藏使用窑业。轉(zhuǎn)載請注明出處
版本發(fā)布日期焦點說明
J2EE 1.42003.12對Web服務更好支持。啟用javax命名空間枕屉。Servlet 2.4常柄、JSP 2.0、EJB 2.1等
Java EE 52006.05以Web為著力點繼續(xù)優(yōu)化搀擂。Servlet 2.5西潘、JSP 2.1、EJB 3.0哨颂、注解支持等
Java EE 62009.12添加了大量新技術來簡化開發(fā)喷市,如:Servlet 3.0(異步處理)、Bean Validation威恼、EJB 3.1品姓、JSF 2.0、JPA 2.0沃测、上下文和依賴注入(CDI)
Java EE 72013.06提高生產(chǎn)力滿足企業(yè)需求和HTML5缭黔。Servlet 3.1、WebSocket 1.0蒂破、JSON 1.0馏谨、JMX 2.0、Batch 1.0
Java EE 82017.08增加了JSON綁定和安全相關附迷。Servlet 4.0惧互、Bean Validation 2.0、CDI 2.0喇伯、JPA 2.2
Jakarta EE入局2017.08Oracle將Java EE交給開源組織喊儡,Eclipse基金會接手(Apache基金會爆冷出局還是不想要?)稻据。但Oracle不允許開源組織使用Java名號艾猜,所以Jakarta EE名稱于2018.02.26應運而生
Jakarta EE 82019.09規(guī)范與Java EE 8完全相同。Maven的GAV變了:
javax.servlet:javax.servlet-api:4.0.1 ->jakarta.servlet:jakarta.servlet-api:4.0.2?,但命名空間沒變依舊還是javax.*匆赃,算是個小過度吧
Jakarta EE 92020.11沒有加入新功能淤毛,Eclipse基金會的首個正式版本。命名空間從javax.*?遷移到?jakarta.*?算柳,前者從此成為歷史低淡。所有模塊大版本號+1,如?Servlet 4.0.2 -> Servlet 5?以表示其斷層式升級
Jakarta EE 9.12021.06相較于9沒有加入新API瞬项。主要提供對Java SE 11的運行支持
2017年隨著Oracle把Java EE交給開源基金會蔗蹋,Java EE從此成為歷史,接下來將由社區(qū)驅(qū)動的Jakarta EE取而代之囱淋。
雖然Java EE已成過去式猪杭,但它似乎代表著我們的程序青春,依然是溝通的主力绎橘。因此胁孙,在很長很長很長一段時間內(nèi)唠倦,Java EE知名度依舊蓋過Jakarta EE称鳞,溝通交流中使用它居多。
Tips:Java EE版本號和Java SE沒有絕對聯(lián)系稠鼻。如即使到最新的Jakarta EE 9冈止、9.1版本對JDK的最低要求是8,而非9
咱們程序員可能會吐槽Oracle為毛不讓使用Java EE商標候齿,這么搞太費勁了熙暴。但在Oracle眼中,可能慌盯,一切都是利益(Oracle號稱是一個律師比工程師數(shù)量還多的高科技企業(yè))
補充:什么是Eclipse基金會
2004年2月該非盈利組織的正式成立周霉,由包括開發(fā)者、消費者和插件提供商在內(nèi)的各獨立團體組成的董事會亚皂,為Eclipse的長期發(fā)展負責俱箱,它就是Eclipse基金會。
該基金會最初只有19個開源項目灭必,現(xiàn)在有300+個之多狞谱,我們比較熟悉的就有:
Java開發(fā)工具:功能強大的Java開發(fā)IDE Eclipse
眾多Jakarta項目:Jakarta Annotations、Jakarta Bean Validation禁漓、Jakarta JSON Processing等等
Vert.X:一個面向現(xiàn)代web和企業(yè)的異步應用框架跟衅,一個可能會撼動Spring地位的全家桶框架
另外,可把Eclipse基金會和Apache基金會對照著看播歼,程序員對后者理應更熟悉些伶跷。
什么是Jakarta EE
該名稱的由來和兩個大事記有關:
為了讓Java EE更開放,Oracle決定為它尋找一個新東家(呵呵,我笑而不語)叭莫。2017年8月磷支,Oracle將Java EE交給開源組織,Eclipse基金會接手(Apache爆冷出局還是不想要食寡?)
Oracle拒絕讓基金會繼續(xù)使用Java名字雾狈,因此Eclipse做了一項名義調(diào)查,從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你可認為它(的內(nèi)容)就是Java EE绞愚,只是名字換了叙甸,老東家換了。之前由JCP來推動它的發(fā)展位衩,以后將有開源社區(qū)推動裆蒸。至于前景如何,咱們拭目以待糖驴。
Jakarta EE發(fā)展史
Jakarta EE還很年輕僚祷,2017年8月從Oracle手中接棒過來算起,也不過4歲贮缕,談不上什么發(fā)展史辙谜,是好是壞周期太短也不能早下定論。截止到目前感昼,共發(fā)布了三個版本装哆,內(nèi)容幾乎沒有變化,只在命名空間抑诸、版本號方面稍有改變烂琴,記錄如下:
版本發(fā)布日期焦點說明
Jakarta EE 82019.09規(guī)范與Java EE 8完全相同。Maven的GAV變了:
javax.servlet:javax.servlet-api:4.0.1 ->jakarta.servlet:jakarta.servlet-api:4.0.2?蜕乡,但命名空間沒變依舊還是javax.*奸绷,算是個小過度吧
Jakarta EE 92020.11沒有加入新功能,Eclipse基金會的首個正式版本层玲。命名空間從javax.*?遷移到?jakarta.*?号醉,前者從此成為歷史反症。所有模塊大版本號+1,如?Servlet 4.0.2 -> Servlet 5?以表示其斷層式升級
Jakarta EE 9.12021.06相較于9沒有加入新API畔派。主要提供對Java SE 11的運行支持
一站式聚合API
如你所知铅碍,Java EE/Jakarta EE是幾十種技術(規(guī)范)的幾何,幾乎每種技術都有其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一片“干凈”配紫,并且也能做到心中有數(shù)径密,方可運籌帷幄。
有Java EE SDK嗎躺孝?
既然Java SE有JDK享扔,那么Java EE是否也有SDK呢?答案:有的植袍。Oracle官網(wǎng)/Jakarta EE官網(wǎng)均提供了SDK供以下載:
https://www.oracle.com/java/technologies/javaee-8-sdk-downloads.html
只不過此SDK可能讓你失望了惧眠,它不是傳統(tǒng)的軟件開發(fā)工具包,而更像是一個技術合集奋单,并且和自家的Glassfish強綁定锉试,包含有以下內(nèi)容:
doc官方文檔
幾十種技術的使用samples(基于Maven管理、構建)
glassfish容器览濒,強耦合
總的來講,如若是抱著學一學的目的那么可以down下來玩玩拖云,畢竟里面的samples示例贷笛、文檔比較全。如若你是抱著使用的目的宙项,那就不建議了乏苦,畢竟glassfish我們(國內(nèi))很少使用。
?總結
30年彈指一揮間尤筐,Java EE在逐漸淡出Java開發(fā)者的視野汇荐,但中短期來看它依舊是我們繞不過的內(nèi)容,經(jīng)常能聽到盆繁、看到掀淘、聊到。當在研究Spring等開源框架的時候油昂,也經(jīng)常會看到Java EE的影子革娄。
本文介紹了Java EE的發(fā)展史倾贰,目的是對它有個籠統(tǒng)的認識。從Java EE到Jakarta EE拦惋,它能否重新煥發(fā)生命力我不知道匆浙,但留下來的不少東西依舊是目前的主流(如Servlet規(guī)范、JPA等等)厕妖,具有非常高的學習價值首尼,切莫輕視