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 的最 ...
随机推荐
- 20181120-4 Beta阶段第2周/共2周 Scrum立会报告+燃尽图 01
此作业要求参见https://edu.cnblogs.com/campus/nenu/2018fall/homework/2409 版本控制地址 https://git.coding.net/lg ...
- OC创建对象并访问成员变量
1.创建一个对象 Car *car =[Car new] 只要用new操作符定义的实体,就会在堆内存中开辟一个新空间 [Car new]在内存中 干了三件事 1)在堆中开辟一段存储空间 2)初始化成员 ...
- linux自启动、定时启动脚本
linux开机自启动 想让一个程序.脚本开机自启动,可以在/etc/rc.d目录下面找到rc.local文件,编辑该文件,在尾部加上需要运行的命令即可. 如: #cd /etc/rc.d #sudo ...
- Spring Autowired原理
今天来整理一下Spring的自动装配 autowire一节,在这里我们要解决以下问题: 什么是自动装配? 自动装配的意义? 自动装配有几种类型? 如何启用自动装配? 自动装配将引发的问题? 一.什么是 ...
- EF中Json序列化对象时检测到循环引用的解决办法
MVC4 EF中将数据表外键引用的是自身,转换成Json时,总是提示错误:“序列化类型为....的对象时检测到循环引用.”: 解决办法: 把要序列化的对象转为匿名对象去掉导航属性,如下 :本来是var ...
- BZOJ 1264 基因匹配(DP+线段树)
很有意思的一道题啊. 求两个序列的最大公共子序列.保证每个序列中含有1-n各5个. 如果直接LCS显然是TLE的.该题与普通的LCS不同的是每个序列中含有1-n各5个. 考虑LCS的经典DP方程.dp ...
- wp开发(一)--应用发布篇
本文非常简单,适合刚刚刚刚入门的菜鸟,且针对的是wp8版本.wp8应用的发布总体来说没什么难度,只是有几个值得注意的地方,希望本文可以减少菜鸟们不必要的担心. 首先假设项目已经完成,且要发布到应用商城 ...
- 使用Appium上传/下载文件(push文件、pull文件)
package com.lx.class1; import java.io.File; import java.io.IOException; import java.net.URL; import ...
- General Sultan UVA - 11604(建图暴力)
给出n个字符串,询问是否存在一个字符串(可以是给出的几个中的 也可以是组合成的),使得用字符串(随便你用多少个)来拼凑这个串,能够至少有两种拼法 解析: 把每一个字符串的每一个位置的字符看作结点,进行 ...
- [BZOJ3507]通配符匹配
3507: [Cqoi2014]通配符匹配 Time Limit: 10 Sec Memory Limit: 128 MB Description 几乎所有操作系统的命令行界面(CLI)中都支持文件 ...