Java SE/EE/ME概念理解(Java版本发展历史)
继上一篇文章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、标红的数字叫做版本编号。
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,通过下方的入口进行查询

Java SE/EE/ME概念理解(Java版本发展历史)的更多相关文章
- JDK与Java SE/EE/ME的区别
1. Java SE(Java Platform,Standard Edition). Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用 ...
- Java SE EE ME用处
Java SE: 又称J2SE,开发部署桌面应用程序: Java EE:又称J2EE,开发网站 Java ME:是做手机APP开发 EE在SE基础上构建,提供web服务.组件模型.管理和通信API
- JAVA好书之《深入理解Java虚拟机》
最近打算做好现有工作的前提下,扎实一下自己专业的技术知识,并将相关的经典书也记录一下.今天看了一些JVM相关的知识,这里面的经典是<深入理解Java虚拟机>,适合有点基础又想深入理解其中原 ...
- 【Java面试宝典】深入理解JAVA虚拟机
一.运行时数据区域 线程隔离:线程隔离的意思,就是给不同的线程多分配的资源用,以做到不争用. 线程共享:线程共享就是资源只有一个没有办法分配更多,只能共享. Java虚拟机管理的内存包括几个运行时数据 ...
- Java SE series:2. enhance your java basis! [doc chm: jdk6api Chinese reference]
1. javaee(Web) and Android 2. how to use eclipse and break point debuging in eclipse, as to java web ...
- .net版本发展历史
最近装上了VS2013,发现好多新特性.新功能,公司办公还在使用VS2005.VS2008,不过用着也很顺手,在最新版Visual Studio中,微软加入了git源码管理工具,和之前的TFS大体上类 ...
- Java基础1:深入理解Java面向对象三大特性
更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...
- Java内存管理-你真的理解Java中的数据类型吗(十)
勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 作为Java程序员,Java 的数据类型这个是一定要知道的! 但是不管是那种数据类型最 ...
- java1234教程系列笔记 S1 Java SE chapter 02 lesson 03 java基本数据类型
第二章 第三节 数据类型 3.1 分类 基本数据类型.引用类型 3.2整型 byte 8 short 16 int 32 long 64 作业: A:1-10求和 B:float double 的最 ...
随机推荐
- nginx配置 send_timeout 引发的js、css解析失败问题
错误情况是web界面排版错误,js.css文件加载失败,通过调试器查看js和css文件路径都是对的,而且可访问. 业务使用的是 nginx+php+mysql+redis的架构 解决办法: 查了很多资 ...
- mysql 数据库名含“-”
跨数据库操作时,用反引号即可: insert into `tmi-ds`.knn_test(imagedata) select imagedata from tmidb.imagetable wher ...
- java沙盒入门(2)
Java在Internet上的应用已经日渐普遍,使用在网页上的Java程序称之为applet,利用Applet的嵌入能够使原本静态的HTML富有变化,并且能够做到"声"." ...
- 如何在一台 web 服务器上注册CA证书
试验环境介绍(CA的主机为192.168.23.10.httpd的主机为:192.168.23.11) 1:新建一台web服务器,主机名为www yum install -y httpd 2:生成 ...
- 《高性能JavaScript》学习笔记——日更中
------------------2016-7-20更------------------ 最近在看<高性能JavaScript>一书,里面当中,有讲很多提高js性能的书,正在看的过程中 ...
- GO语言教程(一)Linux( Centos)下Go的安装, 以及HelloWorld
写在前面: 目前,Go语言已经发布了1.5的版本,已经有不少Go语言相关的书籍和教程了,但是看了一些后,觉得还是应该自己写一套Go语言的教程.给广大学习Go语言的朋友多一种选择.因为,咱写的教程,向来 ...
- centOS 中安装 Redis
之前安装过了 jdk,mysql,tomcat,这次安装 Redis,最开始是将 redis 安装在 windows 下 run 的,这时安装在 Linux 里面试试. 1 . 首先得安装 c环境,用 ...
- [计算机网络] DNS劫持和DNS污染
DNS劫持,指用户访问一个被标记的地址时,DNS服务器故意将此地址指向一个错误的IP地址的行为.范例就是收到各种推送广告等网站. DNS污染,指的是用户访问一个地址,国内的服务器(非DNS)监控到用户 ...
- Java知识点整理(一)
ArrayList和LinkedList的区别 1.ArrayList和LinkedList可想从名字分析,它们一个是Array(动态数组)的数据结构,一个是Link(链表)的数据结构,此外,它们两个 ...
- 第186天:js深入理解构造函数和原型对象
1.在典型的oop的语言中,如java,都存在类的概念,类就是对象的模板,对象就是类的实例.但在js中不存在类的概念,js不是基于类,而是通过构造函数(constructor)和原型链(propoty ...