Java做为一门编程语言,自诞生以来已经流行了20多年,在学习它以前,咱们有必要先了解一下它的历史,了解它是如何一步步发展到今天这个样子。html
上世纪90年代,硬件领域出现了单片式计算机系统,好比电视机机顶盒这些消费设备。这些设备的特色是处理能力和内存都有限。若是使用C++编写程序,则对于这类设备来讲过于庞大。前端
因此需求便来了,为了适应这类设备,须要一种小型的计算机语言,Java便应运而生了。java
1991年,Sun公司的James Gosling, Mike Sheridan和Patrick Naughton发起了一个名为“Green”的项目小组,主要用于电视机顶盒这类消费设备。数据库
因为设备的处理能力和内存有限,因此要求语言短小、代码紧凑。而对于电视机顶盒这类消费设备来讲,厂商会选择各类不一样的CPU,因此要求语言可移植、不与特定的平台捆绑在一块儿。编程
Green项目组以C++为基础,对C++进行了一些改造,并删除了一些不太实用、复杂繁琐的东西,开发出了名为“Oak”的语言,(Oka来自James Gosling办公室外的橡树)。小程序
1992年夏天,Green项目组已经可以演示Green操做系统、Oak的程序设计语言、类库和其硬件。设计模式
1992年9月,Green项目组发布了它的第一个名为“Start 7”的产品,该产品是一个我的数字助理设备,具备图形界面和很是智能的远程控制。浏览器
1992年11月,Green项目被剥离,成为Sun Microsystems的全资子公司Firstperson。服务器
可是当时的硬件生产厂商对其项目并不感兴趣,Firstperson花了一年多也没找到但愿购买其技术的买家。网络
1994年,First Person公司解散,被从新归入Sun公司。Oak语言没法进入市场,也被暂时搁置下来。
在上面的过程当中,Internet的万维网也在不断发展。对于客户机/服务器模型来讲,万维网须要作的是将超文本页面转换到屏幕的浏览器中。
1994年6月到7月,Sun公司的团队看到了互联网的发展,一些图形Web浏览器的出现让他们认为互联网能够演变成他们为有线电视所设想的相同的高度交互性媒体。通过三天的头脑风暴后,该团队将目标平台从新定位为万维网平台。
1994年中期,Oak语言的开发者意识到他们能够开发一个浏览器,WebRunner浏览器诞生。
1995年,互联网的发展带给了Oak语言一个机遇。当时的网络页面是单调、死板的静态页面,业界但愿页面可以“灵活”起来,而且但愿代码可以经过网络传播进行跨平台运行。Oak的语言短小、可移植的特色和这些需求不谋而合。
Sun公司首先推出了能够嵌入网页而且能够随同网页在网络上传输的Applet(Applet是一种将小程序嵌入到网页中进行执行的技术)。
设计者在设计WebRunner浏览器具备在网页中执行内嵌代码的能力,这种能力能让网页变得“灵活”。
同年,Sun公司将Oak改名为Java(由于Oak已经被使用了,Java一词来自咖啡),WebRunner浏览器也演变成了HotJava浏览器,HotJava浏览器彻底使用Java开发。
同年5月23日,Sun公司在Sun World会议上展现并正式发布了Java语言和HotJava浏览器,各大公司都纷纷中止了本身公司相关项目的开发,竞相购买Java的使用许可证,并为本身的产品开发了相应的Java平台。
1996年初,Sun公司发布了Java的第1个开发工具包(JDK1.0),这是Java发展的里程碑,标志着Java成为了一种独立的开发工具。
同年9月,约8.3万个网页应用了Java来制做。
同年10月,Sun公司发布了Java平台的第1个即时编译器。
可是人们很快意识到Java1.0并不能用来进行真正的应用开发。
1997年2月,JDK1.1面世,它弥补了JDK1.0的大多明显缺陷,改进了反射能力,可是仍有局限性。
1998年12月,Sun公司发布了第二代Java平台——JDK1.2。这次发布有几个不一样的版本,分别是标准版J2SE、用于手机等嵌入式设备的微型版J2ME、用于服务器端处理的企业版J2EE。
这次发布是Java发展过程当中最重要的里程碑,标志着Java的应用开始普及。
2000年5月,JDK1.三、JDK1.四、J2SE1.3相继发布。
2001年9月,J2EE1.3发布。
2002年2月,J2SE1.4发布。该版本提升了Java的计算能力,扩展了标准类库,提升了系统性能。
在此期间,Java Applet采用低调姿态,淡化了客户端的应用,成为服务器端应用的首选平台。
2004年9月,J2SE 1.5版本发布,该版本为重大更新,是自1.1版本以来第一个对Java语言作出重大改进的版本。JavaOne会议后,版本数字从1.5改成5.0。
2005年6月,Java SE 6发布。版本名称发生了改变,如J2SE改成Java SE、J2ME改成Java ME、J2EE改成Java EE。该版本没有对语言方面再进行改进,可是改进了其余性能,加强了类库。
2006年11月,Sun公司将Java技术做为免费软件对外发布。
2007年3月起,全世界全部开发人员都可对Java源代码进行修改。
随着数据中心愈来愈依赖于商业硬件而不是专用服务器,Sun公司在2009年被Oracle收购。
2011年,Oracle发布Java SE 7。
2014年,Java SE 8发布,近20年以来,该版本有了最大改变,Java 8提供了一种“函数式”编程方式,能够很容易地表述并发执行的计算。
2017年,Java SE 9发布。
Java 9以后,Oracle宣布每6月更新一次版本。
2020年3月,Java SE 14发布。
Java一路走来,为了适应时代发展,作出了许多改变。
在早期,Java是为了解决传统的单机程序设计问题,但因为种种缘由,Java后来转向Web。
Web为了提供交互性内容采起了客户端/服务器系统,可是交互性彻底由服务器提供。服务器产生静态页面,这些静态页面是事先写好的,将其提供给可以解释并显示的客户端浏览器。
可是咱们的需求是变幻无穷的,事先写好的静态页面确定不能知足咱们日益增加的需求。
CGI(Common Gateway Interfa,通用网关接口),它是一段程序,运行在服务器上,提供同客户端HTML页面的接口,通俗的讲CGI就像是一座桥,把网页和WEB服务器中的执行程序链接起来,它把HTML接收的指令传递给服务器,再把服务器执行的结果返还给HTML页。
CGI使网页变得不是静态的,而是交互式的。
可是CGI程序的响应时间依赖于发送的数据量的大小、服务器和网络的负载,一旦网站变得复杂起来,响应就会变得很是慢且难以维护。
Applet是一种将小程序嵌入到网页中进行执行的技术,含有Applet的网页的HTML文件代码中部带有<applet>
和</applet>
这样一对标记,当支持Java的网络浏览器遇到这对标记时,就将下载相应的小应用程序代码并在本地计算机上执行该Applet。
在当时,Java Applet 能够大大提升Web页面的交互能力和动态执行能力。
Java刚出现时,Applet是最受你们欢欣鼓舞的。可是因为当时的网络环境的问题,安装Java运行时环境(JRE)所须要的10MB带宽对当时的用户来讲太过于恐怖。而且微软的IE浏览器并并无包含JRE,因此Applet并无获得大规模应用。
Servlet(Server+Applet),即服务器端小程序。Servlet可以按照用户提交的内容处理并返回相应的资源。能够输出HTML页面,动态展现数据。Servlet实现正确的接口就可以处理Http请求。
可是出现了一个很大的问题:HTML代码须要在Servlet类中用Java代码一行一行输出,表现、逻辑、控制、业务等所有在Servlet类中,形成Servlet类代码混乱(HTML代码、Java代码都写在一块儿),重复性高、阅读性差、开发困难。
下面是使用Servlet在浏览器中输出有一个h1标题的Hello World!字符串的HTML页面。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); response.setContentType("text/html;charset=utf-8"); out.println("<html>"); out.println("<head>"); out.println("<title>$Title$</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hello World!</h1>"); out.println("</body>"); out.println("</html>"); }
可想而知,更复杂的页面得写多少代码!
为了解决上面的问题,Sun公司开发出了JSP。
JSP(JavaServer Page)是一种动态网页技术标准。JSP部署于网络服务器上,能够响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其余格式文档的Web网页,而后返回给请求者。JSP技术以Java语言做为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
能够将JSP页面当作是一个能内嵌Java代码的HTML页面。
静态部分(HTML页面)是模板,能够提早写好,动态部分(数据)能够由Java代码动态生成。这样一来就避免了在单纯使用Servlet时HTML代码和Java代码都出如今Servlet类中的混乱状况。
JSP在运行时被转换成Servlet,所以JSP本质是Servlet。
下面是使用JSP作和上面一样的事情:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> <h1>Hello World!</h1> </body> </html>
仍使用HTML模板,但不是用Java语句一行一行“堆”出来,这多方便!
使用了JSP后,虽然不用一行行地“堆”HTML页面了,可是代码混乱的问题仍没有解决。表现、逻辑、控制、业务等代码仍然写在一块了,只不过是从Servlet类中挪到JSP中了。
这样混乱的代码极不利于团队开发,若是项目很小,那还能理顺,但若是项目很是大的话,那就“剪不断,理还乱了”。
因此这时候,咱们急需将代码分门别类的码放整齐。
JavaBean 是用Java语言写成的可重用组件,JavaBean类要求:
上面已经说了,单纯使用JSP会有大量的HTML代码和Java代码耦合在一块儿,不利于开发、维护、分工协做。
咱们举一个登陆的例子:
登陆大体须要如下几步:
单纯使用JSP时,以上步骤所有在JSP登陆页面中完成,该页面既须要显示登陆表单、又须要获取、处理数据、还须要查询数据库。太乱了!!
有了JavaBean,咱们能够将JSP中大量重复的代码抽取成可重用的组件,封装成JavaBean,在必定程度上减轻了代码的耦合度,也在必定意义上实现了分层。
好比,用户自己就是一个对象,咱们能够将其抽取成JavaBean,数据的传递、查找均可使用JavaBean来完成。
上面介绍了Servlet、JSP、JSP+JavaBean,虽然在进步,可是都不尽如人意。那为何不让它们结合起来取长补短?
咱们之因此使用JavaBean,就是为了让Java代码和HTML代码分离开了,而Servlet也是一个Java类,为何不使用它呢?
JSP+JavaBean已经实现了部分分层,使用MVC(Model-View-Controller)模式能进一步分层。
Model(模型):MVC模式的中心组件,处理数据和逻辑。(好比JavaBean,但不止只有JavaBean)
View(视图):展现数据,渲染页面。(前端页面,好比HTML页面、JSP页面)
Controller(控制器):从View接收数据,向Model发送数据,即用于控制数据分发。(好比Servlet)
还用上面的登陆例子:
使用了MVC设计模式后,代码有了明显的分层,结构清晰,各司其职。
为了减轻工做量,各类框架逐渐出如今人们的视野中。
所谓框架,能够把它看作一个半成品的项目/软件,框架中有许多东西别人都已经帮咱们写好了,好比各类类、方法。
咱们要作的就是去了解、学习框架,在写好的框架的基础上、遵循框架的制定好的规则、按照本身的思路、结合框架的思想、去开发咱们本身的项目。
目前Java的Web开发中最出名的框架就是Spring家族了,好比SpringMVC、Spring、SpringBoot。
熟悉、利用这些框架可以帮助咱们快速、优雅地开发出符合需求的项目。
另,框架是别人写好的轮子,有了它,咱们可以跑得更快,可是别忘了怎么走。
说了这么多,至关于陪着Java从出生到如今走了一遍。咱们能够看出Java的发展也不是一路顺风的,我认为Java之因此如今还这么流行,缘由之一就是它可以一直保持更新,一直在根据时代的需求结合自身的特色不断地作出改变。正如那句话「穷则变,变则通,通则达」。一门语言能作到这样,身为人更应该要作到。
若有错误,还请指正。
\
参考资料:
- 百度百科
- 维基百科
- Java官方文档
- Java核心卷一(第10版)
- Java编程思想(第4版)
文章首发于公众号『行人观学』