一、万维网发展简史
1)1991年,WorldWideWeb 浏览器发布
最早的网页只能在操作系统的终端里浏览,也就是说只能使用命令行操作,网页都是在字符窗口中显示,这当然非常不方便。
1989年, 伯纳斯-李写了一份关于建立一个通过网络传输超文本系统的报告。
1990年,伯纳斯-李开发了世界上第一个网页浏览器(WorldWideWeb,为了避免同 WWW 混淆,这个浏览器后来改名为 Nexus)和第一个网页服务器(httpd)。为了做出来,他同时建立了最基本的网络标准,包括URL,HTML和HTTP。
1991年8月6日,世界上第一条网页(http: //info. cern. ch/)上线。
当时,它仅限于CERN的用户。这幅网页的内容很简单,它解释了万维网是什么,如何使用网页浏览器和如何建立一个网页服务器等等。
1991年8月23日,CERN以外的用户被邀请访问这些网页,意味着万维网正式诞生。
>>>>>> 万维网的组成
1、超文本标记语言(HTML):一个用来表示超文本文档的文本格式
2、超文本传输协议(HTTP):一个用来交换超文本文档的简单协议
3、WorldWideWeb:一个显示(以及编辑)超文本文档的客户端,即网络浏览器。第一个网络浏览器.
4、httpd:一个服务器用于提供可访问的文档。
>>>>>> 第一个网页体验版
体验版: https://worldwideweb.cern.ch/browser/
2)1992年,NCSA发布Mosaic浏览器(第一个可以显示图片的浏览器)
1992年底,美国国家超级电脑应用中心(NCSA)开始开发一个独立的浏览器,叫做 Mosaic。
这是人类历史上第一个浏览器,从此网页可以在图形界面的窗口浏览。
3)1994年10月,W3C组织成成立
1994年10月,由Tim牵头的万维网联盟(World Wide Web Consortium)成立,这标志着万维网的正式诞生。
>>>>>> W3C组织成立的目的
W3C 在 1994 年被创建的目的是,为了完成麻省理工学院(MIT)与欧洲粒子物理研究所(CERN)之间的协同工作,并得到了美国国防部高级研究计划局(DARPA)和欧洲委员会(European Commission)的支持。
>>>>>> W3C组织工作
W3C 最重要的工作是发展 Web 规范(称为推荐,Recommendations),这些规范描述了 Web 的通信协议(比如 HTML 和 XHTML)和其他的构建模块。
4) 1994年11月,网景公司成立
1994年11月,Mosaic浏览器的开发人员创建了网景公司(Netscape Communications Corp.)
5) 1994年12月,网景公司的第一个浏览器发布–Navigator(导航者)
1994年12月,网景公司发布了Navigator1.0版,市场份额一举超过90%。
>>>>>> 缺点
这个版本的浏览器只能用来浏览,没有交互。客户填完所有的东西点击提交发送都需要等待后端去验证,用户体验在现在看来真的很差。网景公司急需一种网页脚本语言,使得浏览器可以与网页互动。
>>>>>> 解决
管理层对这种浏览器脚本语言的设想是:功能不需要太强,语法较为简单,容易学习和部署。那一年,正逢Sun公司的Java语言问世,市场推广活动非常成功。Netscape公司决定与Sun公司合作,浏览器支持嵌入Java小程序(后来称为Java applet)。但是,浏览器脚本语言是否就选用Java,则存在争论。后来,还是决定不使用Java,因为网页小程序不需要Java这么“重”的语法。
但是,同时也决定脚本语言的语法要接近Java,并且可以支持Java程序。这些设想直接排除了使用现存语言,比如Perl、Python和TCL。
6) 1995年网景公司发明了JavaScript
1995年,Netscape公司雇佣了程序员Brendan Eich开发这种网页脚本语言。
1995年5月,网景工程师Brendan Eich花了10天时间设计了JavaScript语言。起初这种脚本语言叫做Mocha,后改名LiveScript。
1995年12月24日,网景公司与sun公司联合发布了JavaScript语言。
1996年3月,Navigator2.0正式内置了这种JS脚本语言。
7 ) 1995年8月16日,微软发布Internet Explorer 1.0浏览器
1995年8月16日,微软发布了Internet Explorer 1.0,首次发布时它还是一款收费的软件包,售价49美元。
8) 1996年8月,微软发布JScript
1996年8月,微软模仿JavaScript开发了一种相近的语言,取名为JSCript。首先内置于IE3.0。
此时,网景公司面临丧失浏览器脚本语言的主导权的场面。
9) 1996年11月,ECMAScript规范化
1996年11月,为了确保JavaScript的市场领导地位,网景将JavaScript提交到欧洲计算机制造商协会(ECMA)以便将其进行国际标准化。
二、浏览器发展简史
1991年,WorldWideWeb 浏览器发布
这款由 Web 之父 Tim Berners-Lee 亲手设计的图形化浏览器还包含一个所见即所得 HTML 编辑器,为了避免同 WWW 混淆,这个浏览器后来改名为 Nexus
1993年,Mosaic 发布
Internet 的流行应该归功于 Mosaic,这款浏览器将 Web 带向了大众。诸如 IE, Firefox 一类的当代浏览器仍然在延用 Mosaic 的图形化操作界面思想。
1994年,Netscape 成立,并发布Netscape Navigator
Marc Andreessen 带领 Mosaic 的程序员成立了 Netscape 公司,并发布了第一款商业浏览器 Netscape Navigator。
1995年,IE 发布,浏览器之战即将爆发
微软针对 Netscape 发布了他们自己的浏览器,IE,第一场浏览器之战爆发。
1996年,Opera 发布
Telenor 是挪威最大的通讯公司,他们推出了 Opera,并在两年后进军移动市场,推出 Opera 的移动版。
1998年,Mozilla 项目成立
Netscape 成立 Mozilla 开源项目,开发下一代浏览器,后来证明,使用原有代码开发新东西是一种负担,接着他们着手从新开发。
2002年,IE 开始主导浏览器市场
市场份额达到95%,借助同操作系统的捆绑优势,IE 赢得第一场浏览器之战
2003年,苹果 Safari 浏览器登场
苹果进入了浏览器市场,推出自己的 Webkit 引擎,该引擎非常优秀,后来被包括 Google, Nokia 之类的厂商用于手机浏览器。
2004年,Firefox 引发第二场浏览器之战
Firefox 1.0 推出。早在 Beta 测试期间就积累了大量人气的 Firefox 引发了第二场浏览器之战,当年年底,Firefox 已经赢得 7.4% 的市场份额。
2006年,IE7 发布
IE6 发布后的第六年,迫于 Firefox 的压力,微软匆匆推出 IE7 应战,吸取了 Firefox 的一些设计思想,如标签式浏览,反钓鱼等。但这款浏览器现在看来并不成功。
2008年,Google 携 Chrome 参战
Google 发布了他们自己的浏览器,加入这场战争。轻量,快,异常的稳固让这款浏览器成为不可轻视的一个对手。
三、HTTP协议发展简史
HTTP(HyperText Transfer Protocol)是万维网(World Wide Web)的基础协议。自 Tim Berners-Lee 博士和他的团队在1989-1991年间创造出它以来,HTTP已经发生了太多的变化,在保持协议简单性的同时,不断扩展其灵活性。如今,HTTP已经从一个只在实验室之间交换文件的早期协议进化到了可以传输图片,高分辨率视频和3D效果的现代复杂互联网协议。
1)万维网发明
1989年, 当时在 CERN 工作的 Tim Berners-Lee 博士写了一份关于建立一个通过网络传输超文本系统的报告。这个系统起初被命名为 Mesh,在随后的1990年项目实施期间被更名为万维网(World Wide Web)。它在现有的TCP和IP协议基础之上建立,由四个部分组成:
一个用来表示超文本文档的文本格式,超文本标记语言(HTML)。
一个用来交换超文本文档的简单协议,超文本传输协议(HTTP)。
一个显示(以及编辑)超文本文档的客户端,即网络浏览器。第一个网络浏览器被称为 WorldWideWeb。
一个服务器用于提供可访问的文档,即 httpd 的前身。
这四个部分完成于1990年底,且第一批服务器已经在1991年初在CERN以外的地方运行了。 1991年8月16日,Tim Berners-Lee 在公开的超文本新闻组上发表的文章被视为是万维网公共项目的开始。
HTTP在应用的早期阶段非常简单,后来被称为HTTP/0.9,有时也叫做单行(one-line)协议。
2) HTTP/0.9 – 单行协议
只是一个草案,纯文本格式。蒂姆.伯纳斯-李最初设想的系统里的文档都是只读的,所以只允许用"GET" 动作从服务器上获取HTML文档,并且在响应请求之后立即关闭连接,功能非常有限。
3)HTTP 1.0
1996年正式发布。
在1.0中服务器发送完一个http响应后,会断开连接。1.0中确立了大部分现在使用的技术,但是它还不是一个正式的标准。
1. 增加了HEAD、POST等方法
2. 增加了响应状态码,标记可能的错误原因
3. 引入了协议版本号概念,
4. 引入了HTTP header头概念
5. 传输的数据不仅限于文本
4)HTTP1.1
1999年,HTTP1.1发布了RFC文档。http1.1是目前互联网上使用最广泛的协议,功能也十分完善。
HTTP1.1中把connection 头写进标准,默认开启久连接,connection:keep-alive。什么时候关闭?timeout=20;设置超时时间;max = xxx;长连接最多接收xxx次请求就断开。
1.增加了PUT、 DELETE等新的方法;
2.增加了缓存管理和控制;
3.明确了连接管理,允许持久连接;
4.允许响应数据分块(chunked),利于传输大文件;
5.强制要求Host头,让互联网主机托管成为可能。
5)HTTP 2.0
相对于HTTP 1.1来说
1. 提升访问速度
2. 允许多路复用
3. 二进制分帧
HTTP 1.x的解析是基于文本,基于文本协议的格式解析存在天然缺陷。
4. 首部压缩
HTTP 1.x中header有大量信息,且每次都重复发送,HTTP 2.0用encoder减少传输header大小,通讯双方各cashe一份header fileds表。
5. 服务器推送(server push)
http2.0 基于Google的SPDY协议,注重性能改善,但还没有普及。
http3.0基于Google的QUIC协议,是将来的发展方向。
四、ES发展简史(JavaSctipt)
ECMA以JavaScript语言为基础制定了ECMAScript标准规范ECMA-262。JavaScript是ECMAScript规范最著名的实现之一,除此之外,ActionScript和JScript也都是ECMAScript规范的实现语言。自此,浏览器厂商都开始逐步实现ECMAScript规范。
1)1997年7月, ECMAScript1.0版发布。
2)1998年6月, ECMAScript2.0版发布。
3)1999年12月,ECMAScript3.0版发布。在此后的十年间,ECMAScript规范基本没有发生变动。ECMAScript3成为当今主流浏览器最广泛使用和实现的语言规范基础。
4)2007年10月,ECMAScript4.0草案发布,对3.0做了大幅改动。由于4.0版本过于激进,各方对于这个版本是否正式发布持有不同的意见。
5)2008年7月,ECMA 开会决定,中止 ECMAScript 4.0 的开发(即废除了这个版本)。
将其中涉及现有功能改善的一小部分,发布为 ECMAScript 3.1。
而将其他激进的设想扩大范围,放入以后的版本,由于会议的气氛,该版本的项目代号起名为 Harmony(和谐)。会后不久,ECMAScript 3.1 就改名为 ECMAScript 5。
6)2009年12月,ECMAScript 5.0版 正式发布。
Harmony 项目则一分为二,一些较为可行的设想定名为 JavaScript.next 继续开发,后来演变成 ECMAScript 6;
一些不是很成熟的设想,则被视为 JavaScript.next.next,在更远的将来再考虑推出。
7)2011年6月,ECMAScript 5.1版发布,并且成为 ISO 国际标准(ISO/IEC 16262:2011)。到了2012年底,所有主要浏览器都支持 ECMAScript 5.1版的全部功能。
8)2013年3月,ECMAScript 6 草案冻结,不再添加新功能。新的功能设想将被放到 ECMAScript 7。
9)2013年12月,ECMAScript 6 草案发布。然后是12个月的讨论期,听取各方反馈。
10)2015年6月,ECMAScript 6 正式发布,并且更名为“ECMAScript 2015”。这是因为 TC39 委员会计划,以后每年发布一个 ECMAScript 的版本,下一个版本在2016年发布,称为“ECMAScript 2016”,2017年发布“ECMAScript 2017”,以此类推。
五、Web开发技术的发展简史
从Web开发技术的发展过程看,Web从最初其设计者所构思的主要支持静态文档的阶段,逐渐变得越来越动态化。Web应用的交互模式,变得越来越复杂:从静态文档发展到以内容为主的门户网站、电子商务网站、搜索引擎、社交网站,再到以娱乐为主的大型多人在线游戏、手机游戏。
1)静态内容阶段
在这个最初的阶段,由文本编辑器直接编辑并生成静态的HTML页面,如果要修改Web页面的内容,就需要再次编辑HTML源文件,早期的互联网Web页面就是静态的;
2)CGI程序阶段
由于静态Web页面无法与用户交互,比如用户填写了一个注册表单,静态Web页面就无法处理。要处理用户发送的动态数据,出现了Common Gateway Interface,简称CGI,用C/C++编写。
3)脚本语言阶段
由于Web应用特点是修改频繁,用C/C++这样的低级语言非常不适合Web开发,而脚本语言由于开发效率高,与HTML结合紧密,因此,迅速取代了CGI模式。ASP是微软推出的用VBScript脚本编程的Web开发技术,而JSP用Java来编写脚本,PHP本身则是开源的脚本语言。
4)瘦客户端应用阶段(MVC模式)
在这个阶段,在服务器端出现了独立于Web服务器的应用服务器。同时出现了Web MVC开发模式,各种Web MVC开发框架逐渐流行,并且占据了统治地位。基于这些框架开发的Web应用,通常都是瘦客户端应用,因为它们是在服务器端生成全部的动态内容。
5)RIA应用阶段
在这个阶段,出现了多种RIA(Rich Internet Application)技术,大幅改善了Web应用的用户体验。应用最为广泛的RIA技术是DHTML+Ajax。Ajax技术支持在不刷新页面的情况下动态更新页面中的局部内容。同时诞生了大量的Web前端DHTML开发库,例如Prototype、Dojo、ExtJS、jQuery/jQuery UI等等,很多开发库都支持单页面应用(Single Page Application)的开发。其他的RIA技术还有Adobe公司的Flex、微软公司的Silverlight、Sun公司的JavaFX(现在为Oracle公司所有)等等。
6)移动Web应用阶段
在这个阶段,出现了大量面向移动设备的Web应用开发技术。除了Android、iOS、Windows Phone等操作系统平台原生的开发技术之外,基于HTML5的开发技术也变得非常流行。
六、JavaWeb发展简史
Java Web开发技术的发展经历了如几个阶段:
1、servlet技术
2、JSP技术
3、模型1:JSP+JavaBean
4、模型2:JSP+JavaBean+Servlet
5、框架
6、可视化开发
6.1 Servlet出现之前
servlet大多数人还是了解的,也还在使用,这里就从servlet说起吧。传说在上世纪90年代,因为nternet和浏览器的飞速发展,使得基于浏览器的B/S模式随之火爆发展起来。最初,用户使用浏览器向WEB服务器发送的请求都是请求静态的资源,比如html、css等。 但是可以想象:根据用户请求的不同动态的处理并返回资源是理所当然必须的要求,例如用户提交一些东西,服务器就能按提交的内容反馈用户不同的效果。所以人们应该非常迫切想要推出一项技术来实现动态的处理, java 为了应对上述需求,促进了servlet技术诞生。
6.2 Servlet出现(纯Servlet开发)
SUN公司刚刚推出JavaEE(Java企业版)时,推出了Servlet这个东西,命名就是Service+Applet,即服务小程序。Servlet可以说是Java技术中最早的Web解决方案,Servlet与普通Java类的编写非常类似。
在Servlet中可以通过挨着行输出Html等语句来实现页面的样式和输出,数据的动态功能当然也就实现了。表现、逻辑、控制、业务全部混在Servlet类中。下面给出一个简单例子来直观感受一下。
public void doGet(HttpServletRequest request,HttpServletResponse)
throws IOException,ServletException
{
response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>Hello World!</title></head>");
out.println("<body>");
out.println("<p>Hello World!</p>");
out.println("</body></html>");
}
这样就动态的生成了一个内容为Hello World!的HTML页面在浏览器上显示。
一项技术的出现必然解决了一些现存的问题,但是我们知道servlet之后还有好些技术来替代在servlet中生成HTML页面的方式,那就说明servlet还存在痛点。从上面代码中我们可以看到servlet编程其实很繁琐:
1.servlet代码有大量冗余代码,out输出就得写上百遍;
2.开发servlet必须精通网页前端和美工,你得非常不直观的在Servlet中写前端代码,这使得实现各种页面效果和风格非常困难。
3.对于后端来说,所有的业务逻辑、页面跳转、央视表现全部混杂在同一个类中,并且一项业务一般只有一个Servlet类与其对应,实在是….太麻烦了。
所以为了解决这些问题(真庆幸晚生了好多年),sun公司借鉴 微软的asp,正式推出了JSP(servlet1.1)
6.3 JSP(纯JSP开发)
经过纯Servlet开发的噩梦之后,Sun公司又推出(或者说是倡导)了JSP技术,全称是Java Server Page。
JSP技术的目标是快速开发网站,在网页中嵌入Java代码完成网站。例如下面的代码就是1个简单的JSP例子:
<html>
<head><title>测试</title></head>
<body>
显示的内容是:<% String aa= “hello” ; out.println(aa); %>
</body>
</html>
如果希望进行一些处理,直接在界面中使用<% %>脚本标识嵌入Java代码。
如果要开发具有大量网页内容的网站效率比较高,可以先使用网页编辑工具编写网页,然后在网页中嵌入处理代码即可。但是缺点是:网站的输入输出、处理、控制全部夹杂在一起,维护不方便。当网站中需要进行大量的处理代码的时候,JSP文件将很难维护,并且代码也不容易共享。
因为JSP在编写网页方面具有优势,而编写处理代码存在很多问题,所以产生了模型1,把JSP中的处理代码使用JavaBean来实现。
6.4 JSP+JavaBean(Model1)
JavaBean是使用Java语言编写的组件,简单的理解,可以认为JavaBean是比较特殊的Java类。JavaBean会把网站中处理过程进行封装,这样的结果就是在JSP文件中仅仅是输入输出功能和控制功能,处理过程放在JavaBean中,然后在JSP中调用JavaBean的功能,JSP提供了若干标签支持调用。下面的例子展示了这种模型。
JavaBean文件:
package test;
public class PrintMessage
{
public String print()
{
return “使用JavaBean返回信息”;
}
}
页面文件:
<%@ page import=”test.*” %>
<jsp:useBean id=”printMessage” class=”test.PrintMessage” scope=”request”/>
<html>
<head><title>测试</title></head>
<body>
第一阶段<% out.print(printMessage.print()); %>
</body>
</html>
这种模型的优点是:业务处理由JavaBean完成,减少了页面中的代码。缺点是:页面中仍然有用于控制的代码。
6.5 Servlet+JSP+JavaBean(Model2)
Model1虽然在一定程度上解耦了,但JSP依旧即要负责页面控制,又要负责逻辑处理,职责不单一!此时Model2应运而生,使得各个部分各司其职,Model2是基于MVC模式的。Model2的开发模式是:Jsp+Servlet+JavaBean的模式,它和Model1不同的是,增加了Servlet。
在这种开发模式下,JSP页面中就可以不用任何的<%%>语句了,包括<%=%>全部用EL表达式来代替,列表的遍历和条件判断等(Java中的for循环和if语句)也可以通过JSTL来代替。 这样的话视图层相比较之前的开发模式来说要薄得多的多,JSP中不涉及任何的业务逻辑,前端人员修改样式也十分方便。这里可以理解为JSP为MVC设计模式中的V,即视图。
控制层通过Servlet来实现,获取前台传的参数、控制页面跳转,封装对象、向前台传输对象或者参数。并且可以由自己设计,设法用一个Servlet类实现该模块的所有功能的页面跳转。这里可以理解为Servlet为MVC设计模式中的C,即控制器。
但这里要说明的是Model2并不是一个完全标准的MVC设计模式,因为JavaBean还过于臃肿,并不能完全作为M层存在,所以将JavaBean再一次进行分割:业务逻辑、数据持久化。
6.6 三层架构与MVC设计模式
三层架构是指软件系统的整体设计分层:业务逻辑层、数据持久化层和表现层。
MVC设计模式只体现在表现层中,即将表现层又分为模型、视图和控制器。所以在上面Model2模式下对JavaBean分割后形成了三层架构与MVC的全新的JavaWeb开发模式。
这里在分别介绍一下三层架构以及MVC设计模式:
三层架构:
表现层(Web层):通俗说就是用户所能看到的直观的界面。其作用就是接收用户提交的请求数据,以及将程序对用户请求所产生的响应数据反馈给用户。目的就是为用户提供可交互的操作界面。所以,表现层就像已经搭好的积木。
业务逻辑层:简单讲就是“具体问题,具体分析”。它根据用户的不同请求而做出不同响应的处理。可以说是对数据层的一种整合方式。所以,就如同每个人会根据自己的喜好搭建不同的积木一样,业务逻辑层代表的就是搭积木的方式。
数据访问层(持久化):它只是提供对数据库操作的多种途径。不同的数据就好比形状各异的积木,而数据访问层就好比取出或放回这些积木的动作。
MVC设计模式:
模型(Model):封装的是数据源和所有基于对这些数据的操作。在一个组件中,Model往往表示组件的状态和操作状态的方法。
视图(View):封装的是对数据源Model的一种显示。一个模型可以由多个视图,而一个视图理论上也可以与不同的模型关联起来。
控制器(Control):封装的是外界作用于模型的操作。通常,这些操作会转发到模型上,并调用模型中相应的一个或者多个方法。一般Controller在Model和View之间起到了沟通的作用,处理用户在View上的输入,并转发给Model。这样Model和View两者之间可以做到松散耦合,甚至可以彼此不知道对方,而由Controller连接起这两个部分。
至此,页面的表现由jsp实现,转发控制由servlet实现,业务逻辑写在业务逻辑层,操作数据库部分写在持久化层,分工明确,各司其职。Model1、Model2、三层是在解耦的基础上一步步进化而来,通过解耦我们可以进行进一步的抽象,以应对现实需求的变动。这里要说的就是,从servlet一直到三层架构的转变,其实都是为了实现高内聚,低耦合。一步一步将各个功能分配到不同的地方实现。