繼上一篇文章http://www.cnblogs.com/EasonJim/p/6181981.html中說的區別,其實分析的不夠徹底,因此再次在這里做詳細的分析。
零、Java與Sun、Oracle發展歷史:
1、說明:最開始Java是Sun公司的,然后是Oracle(甲骨文)收購了Sun(太陽微系統/Sun Microsystems),最后就是Java變成Oracle了,收購時間為:2009-04-20;所以下文中提到的Sun和Oracle都是具有歷史上的關系。
2、參考:
http://tech.163.com/special/00093BH6/oraclesun.html
一、從JDK 1.0到J2SE 1.2,最原始的版本發展歷史
1、JDK 1.0版本於1996年1月23日發布,叫做為Oak。而真正第一個穩定的版本JDK 1.0.2,被稱作Java 1。
2、到J2SE 1.2版本,代號為Playground。 這個在1998年12月8日的發布的版本和其到J2SE 5.0的后續版本被重改名為Java 2,而版本名稱“J2SE”(Java 2平台,標准版)取代JDK以區別出來自J2EE(Java 2平台,企業版) 和J2ME(Java 2 Platform,Micro Edition)的基礎平台。
3、也就是說,更改為Java 2之后再細分了三個版本出來,以區分Java 2平台級別。
4、參考:
https://zh.wikipedia.org/wiki/Java%E7%89%88%E6%9C%AC%E6%AD%B7%E5%8F%B2(Java版本歷史)
二、從J2SE到Java SE說起,也就是發展歷史
不管是J2SE還是J2EE,關注的點是J2,也就是Java 2。
1、Java 2介紹:
Java 2平台包括:標准版(J2SE)、企業版(J2EE)和微縮版(J2ME)三個版本。J2SE、J2ME和J2EE,這也就是SunONE(Open NetEnvironment)體系。J2SE就是Java2的標准版,主要用於桌面應用軟件的編程;J2ME主要應用於嵌入式系統開發,如手機和PDA的編程;J2EE是Java2的企業版,主要用於分布式的網絡程序的開發,如電子商務網站和ERP系統。
2、J2SE改為Java SE:
Java SE 6,代號為Mustang。版本發布於2006年12月11日,Sun把原本的名稱“J2SE”改為“Java SE”,然后再從版本號中去掉“.0”,而開發者內部編號仍然是1.6.0。這個版本是根據JSR 270開發的。
3、參考:
http://baike.baidu.com/item/J2SE(J2SE介紹)
https://zh.wikipedia.org/wiki/Java%E7%89%88%E6%9C%AC%E6%AD%B7%E5%8F%B2(Java版本歷史)
三、J2SE 1.4到J2SE 5.0再到Java SE 6的版本編號發展歷史
以上三個是比較具有代表性的版本編號;
1、標紅的數字叫做版本編號。
2、而從J2SE 5.0開始,改編了這個原始版本編號,采用數字輩進行代替,但內部還是使用版本編號,所以還可以對這些數字這么說:內部版本編號。
3、官方變更說明:J2SE 5.0版本,代號為Tiger。這個在2004年9月30日發布的版本原本以1.5編號,也就是仍然使用內部版本編號。這個數字輩改變是為了“更好地反映成熟度、穩定性、可擴充性和J2SE的安全水准”。這個版本是在JSR 176底下被開發。
4、而5.0到6版本編號的變更,經歷了兩大改變,1為版本編號,2為J2SE改為Java SE;
5、以上變更的官方說明:Java SE 6版本,代號為Mustang。版本發布於2006年12月11日,Sun把原本的名稱“J2SE”改為“Java SE”,然后再從版本號中去掉“.0”,而開發者內部編號仍然是1.6.0。這個版本是根據JSR 270開發的。
6、這個內部版本編號使用非常廣泛,比如我們安裝的JDK上,全部使用內部版本編號,需要注意的是,在安裝包的文件夾版本編號是以三位進行命名的,比如:1.6.0_x,1.6.0大體不改變,除非新大版本發布,而后面的x是bug修復的補丁級別的。在比如Windows下的JDK安裝目錄:C:\Program Files\Java\jdk1.8.0_131
7、通過以上的解釋,也就可以推斷出這些內部版本編號對應數字輩,比如即將發布的Java SE 9,如果官方沒明確規定,那么就是1.9.0。
8、參考:
https://zh.wikipedia.org/wiki/Java%E7%89%88%E6%9C%AC%E6%AD%B7%E5%8F%B2(Java版本歷史)
四、Java 8與Java SE 8有什么區別
1、其實沒有什么區別,Java 8就是Java SE 8。
2、如果更深入的解釋,Java 8代表技術的更新點,在JSR的便准下通過的新技術點,而這些更新的技術放在了Java SE 8的安裝包JDK 8下。
3、比如:從J2SE 5.0開始就叫做Java 5,到Java SE 6叫做Java 6;這些特點足以說明,這兩個就是同一個東西。
8、參考:
https://zh.wikipedia.org/wiki/Java%E7%89%88%E6%9C%AC%E6%AD%B7%E5%8F%B2(Java版本歷史)
五、JDK 8與Java SE 8、Java EE 8有什么區別
1、從上面的發展歷史來說明,JDK就是Java SE,這兩者就是同一個東西。
2、更有力的證據,在JDK下載頁面,如下所示:
3、還可以這么說,JDK就是Java平台,同樣也是Java SE。如果要使用Java語言進行開發,包括開發Web,那么一定要裝JDK。
六、開發Java EE的Web,需要安裝Java SE還是Java EE,或者說是JDK
1、先解釋Java EE,Java EE平台構建於Java SE平台之上,Java EE平台提供一組API和運行環境來開發和運行大規模的,多層的,可擴展的,可靠的和安全的網絡應用程序。
2、也就是說Java EE是一個標准而已,而這些標准的實現是Web容器提供的,比如Servlet-API,在Tomcat這個Web容器下的lib文件夾就集成了servlet-api.jar的包。
3、在官方上的下載頁面上,有提供開發Java EE的SDK下載,我需要下載嗎?
下載下來的是glassfish的Web容器,里面是按照Java EE的標准API開發的,能運行Java EE的Web程序,同時這個容器還提供了對EJB的支持。
4、不管開發Java EE還是Java SE,只要開發與Java語言有關的程序,都必須安裝JDK。比如在開發Web程序,就是與Java EE有關的,那就必須引入Web容器提供的API。比如servlet-api.jar就是Tomcat提供的,在不用POM管理的情況下,就必須導入這個JAR包。而Java SE一般代表了Application類型,比如開發桌面應用,一般是包含在了Java SE中,也就是JDK中,只需要這個JDK里買的包即可,與Java EE無關。
5、再者,如果要開發Web應用,而且要使用EJB,那么必須引入glassfish的Web容器提供的EJB的API的JAR包。
6、參考:
http://www.cnblogs.com/pugang/p/4619912.html
https://zh.wikipedia.org/wiki/Java_EE
http://baike.baidu.com/item/Java%20EE
七、Java EE有獨立的版本發展歷史
1、首先可以肯定的是,Java EE有自己獨立的版本發展歷史,這一點與Java SE是區分開的。不要這樣錯誤的認為Java SE 8就代表了Java EE 8,這兩個是不同的東西。
2、從上面的觀點中可以解釋的一點是,Java EE提供了一組標准的API,而Web容器是實現這組API,然后提供JAR包給開發人員。那么在Web容器去實現這組API時,比如實現Java EE 7的API時,可能會使用Java 8的新語言特性去實現;那么此時,開發人員在引入這個JAR包時,就必須安裝支持Java 8的安裝包,也就是Java SE 8,JDK 8。那么這種聯系關系可以說明是有聯系,但功能卻是區分的。
3、參考:
http://docs.oracle.com/javaee(Java EE API文檔)
https://zh.wikipedia.org/wiki/Java_EE(Java EE發展歷史)
八、Java EE下的Servlet和JSP發展歷史
1、在Java EE的發展歷史下,具有代表性的是Servlet和JSP這兩個,這兩個也是有發展歷史的,不過這些發展歷史都同一歸到了Java EE下,當一個提案被JCP通過時,那么新的版本就會收入到Java EE的新版本中。各大Web容器廠商就會按照標准API進行開發。
2、參考:
https://zh.wikipedia.org/wiki/Java_Servlet(Servlet發展歷史)
https://zh.wikipedia.org/wiki/JSP(JSP發展歷史)
九、對於實現Java EE標准API的Web容器有哪些?
1、在Web容器方面,主要圍繞兩大方面的技術支持:Servlet和EJB。有些容器是不支持EJB的,所以在使用上需要注意。
2、下面是Web容器的相關介紹:
Tomcat
Apache鼎力支持的Java Web應用服務器(Servlet容器),穩定性比較強和文檔資源比較全面,在開源領域受到眾多追捧。
JBoss
當之無愧的Java EE容器,同時支持Servlet和EJB,企業級開發人員廣泛使用,因為畢竟彌補了Tomcat只支持Servlet的遺憾。
Resin
Resin也僅僅是一個Servlet容器,運行速度非常優秀,使得它在輕量級Java Web領域比較受歡迎,特別是互聯網Web領域,而且他們有提供商業版本支持,一些知名商業公司使用他們的服務比較多,例如163、ku6等。Resin4支持不同的Web App分配不同的端口。
WebLogic和WebSphere
來自BEA公司的WebLogic和IBM的WebSphere,跟Resin比較類似,同樣是只支持Servlet容器的商業級應用。WebLogic 支持企業級的、多層次的和完全分布式的Web應用,並且服務器的配置簡單、界面友好。IBM的WebSphere可以細分為WebSphere Performance Pack、Cache Manager 和WebSphere Application Server等系列,其中WebSphere Application Server是基於Java的應用環境,可以運行於Sun Solaris、Windows NT等多種操作系統平台,用於建立、部署和管理Internet和Intranet Web應用程序。
Glassfish
Sun公司自己發行的Java EE服務器,開源社區比較活躍,經過v1\v2到目前的v3,它已經逐步走向成熟。作為一款免費、開放源碼的應用服務,她實現了Java EE 5. Java EE 5平台涵蓋了EJB 3.0、JSF 1.2、Servlet 2.5、JSP 2.1、JAX-WS 2.0、JAXB 2.0、 Java Persistence 1.0、Common Annonations 1.0、StAX 1.0等。
Glassfish支持通過內存會話狀態復制,擁有良好的部署體系結構的可用性和可擴展性。對於集群的支持也很強大,簡單添加機器,即可輕松實現網站的負載能力。
對於HTML生成解析能力吞吐量與Apache不相上下。我們通常用Tomcat會作為后端去處理JSP內容,就是因為它對於HTML解析吞吐量比較吃緊。
Glassfish還支持目錄部署,熱部署,這些都是Tomcat的缺陷。版本也比較人性化,有開發環境的簡化版,部署Web項目的版本。
3、參考:
https://putty.biz/321(Web常用容器)
十、JCP和JSR是什么
1、JCP(Java Community Process)(Java社區進度)成立於1998年,是使有興趣的各方參與定義Java的特征和未來版本的正式過程。
2、JCP使用JSR(Java規范請求,Java Specification Requests)作為正式規范文檔,描述被提議加入到Java體系中的的規范和技術。
3、JSR變為final狀態前需要正式的公開審查,並由JCP Executive Committee投票決定。最終的JSR會提供一個參考實現,它是免費而且公開源代碼的;還有一個驗證是否符合API規范的Technology Compatibility Kit。
4、可以這么理解,每一個Java的規范都是通過JCP進行投票通過的,而這些標准的編號有JSR進行管理的。
5、參考:
https://zh.wikipedia.org/wiki/JCP(JCP解釋)
https://www.jcp.org(JCP社區,可以自由注冊,並且可以提交自己的意見,如果通過了,將收錄進去)
https://www.jcp.org/en/jsr/detail?id=379(這個是Java 9的提案)
https://www.jcp.org/en/jsr/results?id=5962(這個是Java 9的投票結果)
十一、JDK與OpenJDK區別
1、JDK: Java Development Kit(JDK)是太陽微系統針對Java開發人員發布的免費軟件開發工具包(SDK,Software development kit)。自從Java推出以來,JDK已經成為使用最廣泛的Java SDK。由於JDK的一部分特性采用商業許可證,而非開源。因此,2006年太陽微系統宣布將發布基於GPL的開源JDK,使JDK成為自由軟件。在去掉了少量閉源特性之后,太陽微系統最終促成了GPL的OpenJDK的發布。
2、OpenJDK:OpenJDK原是Sun Microsystems公司為Java平台構建的Java開發環境(JDK)的開源版本,完全自由,開放源碼。Sun Microsystems公司在2006年的JavaOne大會上稱將對Java開放源代碼,於2009年4月15日正式發布OpenJDK。甲骨文在2010年收購Sun Microsystem之后接管了這個項目。
3、由於發展歷史關系,OpenJDK的發展大於JDK,所以之后JDK的開發會遵循OpenJDK的步伐。為什么這么說,之前OpenJDK是JDK的一個分支,現在OpenJDK成為了主干。
4、同樣的,OpenJDK也是遵循JCP的JSR標准。或者這種方式不應該這么說,不管OpenJDK還是JDK,都叫做Java,那么只要是Java就是受JCP的JSR標准約束。
5、參考:
https://zh.wikipedia.org/wiki/JDK(JDK說明)
https://zh.wikipedia.org/wiki/OpenJDK(OpenJDK說明)
http://www.cnblogs.com/EasonJim/p/7031961.html(OpenJDK與JDK區別分析)
http://openjdk.java.net/(OpenJDK官網)
http://jdk.java.net/(JDK下載)
十二、EJB是什么?
1、參考:http://www.cnblogs.com/EasonJim/p/7103546.html
十三、JDK與JRE區別,安裝哪個
1、JRE(Java Runtime EnvironmentJDK):JRE顧名思義是Java運行時環境,包含了Java虛擬機,Java基礎類庫。是使用Java語言編寫的程序運行所需要的軟件環境,是提供給想運行Java程序的用戶使用的。JRE根據不同操作系統(如:Windows,Linux等)和不同JRE提供商(IBM,ORACLE等)有很多版本,最常用的是Oracle公司收購Sun公司的JRE版本。
2、JDK(Java Development Kit):JDK顧名思義是java開發工具包,是程序員使用Java語言編寫Java程序所需的開發工具包,是提供給程序員使用的。JDK包含了JRE,同時還包含了編譯Java源碼的編譯器javac,還包含了很多Java程序調試和分析的工具:jconsole,jvisualvm等工具軟件,還包含了Java程序編寫所需的文檔和demo例子程序。如果你需要運行Java程序,只需安裝JRE就可以了。如果你需要編寫Java程序,需要安裝JDK。
3、參考:
https://www.zhihu.com/question/20317448/answer/14737358
十四、其它
http://docs.oracle.com/javase(Java SE API文檔)
https://zh.wikipedia.org/wiki/Java_SE,通過下方的入口進行查詢