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 的最 ...
随机推荐
- ES6的新特性(4)——字符串的扩展
字符串的扩展 ES6 加强了对 Unicode 的支持,并且扩展了字符串对象. 字符的 Unicode 表示法 JavaScript 允许采用\uxxxx形式表示一个字在\u0000~\uFFFF之间 ...
- TP框架代码学习 学习记录 3.2.3
文件:think.class.php PHP提供register_shutdown_function()这个函数,能够在脚本终止前回调注册的函数,也就是当 PHP 程序执行完成后执行的函数.regis ...
- Week4_Linux书本一二两章
第一章的学习内容就是对Linux内核有一个基本的了解,同时知道一些关于Linux的知识. 学习Linux,可以自己有一台装有Linux操作系统的机器,源代码的作用无可替代: Linux发展历程简介:L ...
- firefox插件Firebug的使用教程
什么是Firebug 从事了数年的Web开发工作,越来越觉得现在对WEB开发有了更高的要求.要写出漂亮的HTML代码:要编写精致的CSS样式表展示每个页面模块:要调试 javascript给页面增加一 ...
- IT小小鸟的读后感
在我经历了半个学期的大学生活后,我依然不清楚我现在所学的专业有什么用或者说该怎么学.直到我阅读了<我是一只IT小小鸟>这篇文章之后.我才对我所将来或许要从事的IT事业有了些许的了解. 在观 ...
- lintcode-383-装最多水的容器
383-装最多水的容器 给定 n 个非负整数 a1, a2, ..., an, 每个数代表了坐标中的一个点 (i, ai).画 n 条垂直线,使得 i 垂直线的两个端点分别为(i, ai)和(i, 0 ...
- Java包名命名规则(转载)
转载自:http://lilinhai548.blog.163.com/blog/static/5847332920155132151359/ 鸣谢原作者 学习Java的童鞋们都知道,Java的包. ...
- Qt容器类汇总说明
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt容器类汇总说明 本文地址:http://techieliang.com/2017/ ...
- (五)Jmeter中的属性和变量
一.Jmeter中的属性: 1.JMeter属性统一定义在jmeter.properties文件中,我们可以在该文件中添加自定义的属性 2.JMeter属性在测试脚本的任何地方都是可见的(全局),通常 ...
- IDEA中Git的更新/提交/还原方法
记录一下在IDEA上怎样将写的代码提交到GitHub远程库: 下面这个图是基本的提交代码的顺序: 1. 将代码Add到stage暂存区本地修改了代码后,需先将代码add到暂存区,最后才能真正提价到gi ...