开始接触 Java Web 方面的技术,此篇文章是以介绍 Web server 相关技术的演变为主来做为了解 Java servlet 的技术背景,目的是更好的理解 java web 体系。javascript
万维网 WWW (World Wide Web)并不是某种特殊的计算机网络,他是一个大规模的、联机式的信息储藏所。英文简称为 Web。万维网是一个分布式的 超媒体(超文本系统的扩充),经过做用于其上的 HTTP 应用层协议,一台计算机能够轻松的从另外一台地理位置不一样的计算机获取 Web 资源。html
万维网以 客户——服务器 方式工做。浏览器就是一个常见的在用户主机上的万维网客户程序。而万维网所驻留的主机则运行服务器程序,所以这台主机也成为 万维网服务器 (Web Server)。前端
接下来就是咱们文章的主角——Web Server ,和它的的发展历史。java
最先的 Web 服务器简单的响应浏览器发送过来的 HTTP 请求,并将储存在服务器上的 HTML 文件返回给浏览器。这样的服务器能够称为静态服务器。它是最初的建站方式。浏览者所看到的每一个页面都是建站者上传到服务器的 HTML 文件,这种网站每次增长、删除、修改一个页面,都必须对服务器文件进行一次下载和上传。使用静态服务器的网站的缺点是缺少交互性、迭代周期长、不易维护。web
而与之对应的,也是后来发展出的技术,是动态 Web 服务器技术。
编程
动态 Web 服务器弥补了静态 Web 服务器功能上的不足,它具备良好的交互性,HTML 文件会自动更新内容而无需手动更新,下降了生产维护成本,和迭代周期。使用静态 Web 服务器的网站页面通常会被称为 网页(Web page),而使用动态 Web 服务器的网站更倾向于被称为 Web 应用(Web application)。浏览器
接下来将主要介绍动态 Web 服务器的技术发展历程。
服务器
在介绍动态 Web 服务器以前,首先咱们来看一下,静态 Web 服务器是如何工做的,它的工做过程能够参考下图:网络
当 HTTP 请求到达服务器后,静态 Web 服务器直接给予响应并返回 HTML 文件。多线程
而后咱们再来看一下动态 Web 服务器的实现技术。
因为不少的服务器都是使用 C/C++、Java 等编译型的语言编写,因此实现动态 Web 服务器技术最直观的作法也是最容易考虑到的是,将对 HTML 更新的功能做为扩展 API 集成到服务器程序中,直接由服务器来完成这个任务。这样作的优势是,因为使用 C/C++、Java 编写而成,因此程序的执行效率是很可观的。可是缺点却也很严重,功能模块依赖平台、具体的服务器,若是 API 中的某一模块出错将致使整个服务器崩溃,维护成本高等。
SSI (Server Side Include) 和 CGI(Common GateWay Interface)是很类似的两种技术,他们并不是使用某种特定语言实现的具体程序,而是一种编码标准,是Web 服务器运行时外部程序的规范,按CGI 编写的程序能够扩展服务器功能。当咱们须要实现动态 HTML 文档功能时,能够将预先编译好的 CGI/SGI 程序保存到服务器端,当服务器响应客户端请求时能够被调用以处理 HTML 文档。过程能够参考下图:
随着 CGI 技术的兴起和普及,聊天室、文献检索、电子商务、信息查询等各式各样的 Web 应用蓬勃兴起。CGI 技术也有他的缺点,由于每当客户端程序有一个请求时,Web 服务器都须要建立一个新的 CGI 进程,并经过环境变量和标准输入来将生成响应报文所必须的信息传递 CGI 程序。这样的操做是很耗费时间的,一样也很耗费资源。 同时由于 CGI 进程和 Web 服务器是不一样的进程,因此两者就很难进行交互。另外 SSI 和 CGI 也很容易受平台的影响。
C/C++ 的强大是毋庸置疑的,因此对于服务器咱们采用 C/C++ 实现,这能稳健的确保执行效率。Web 服务器的动态 HTML 文档处理一开始还是使用 C/C++ 来实现,可是众所皆知,C/C++ 较高的运行速度的代价是开发难度大,维护成本高。因而,人们天然想到了开发迭代速度较快,更易于维护的脚本语言来实现,好比 PHP、Python等。这里不得不提的是专用于 Web 服务器端编程的 PHP (PHP:Hypertext Preprocessor)语言。
起初这门语言只是做为一个由 C 写成的 CGI 二进制库集合出现,用于追踪做者在线简历的访问,他也所以给它命名 “Personal Home Page Tools”。而且 PHP 的一大有点是能够将 PHP 程序嵌入到 HTML 文档中去执行,执行效率比彻底生成 HTML 标记的 CGI 程序要高不少。随着愈来愈多的功能的加入和做者的屡次重写,最终使他演变成了一门编程语言。(语言只是工具)
Microsoft已开发出一种用于生成称为 Active Server Pages 的动态Web内容的技术,简称 ASP。使用ASP,Web 服务器上的HTML页面能够包含嵌入代码的片断(一般是VBScript或JScript-尽管几乎可使用任何语言)。在将页面发送到客户端以前,Web服务器将读取并执行此代码。
Netscape 也有一种服务器端脚本技术,它被称为服务器端 JavaScript,或简称为 SSJS。与 ASP 同样,SSJS 一样容许将代码片断嵌入到 HTML 页面中以生成动态 Web 内容。区别在于 SSJS 使用 JavaScript 做为脚本语言。使用 SSJS,能够预编译网页以提升性能。
想了解 jsp(Java Server Pages) 那么就不得不说一下和他直接相关的,Java Servlet。
Java Serlvet(Java Server Side applet) 是在服务器端的 Java 程序,他扩展了服务器的功能,经过运行 由 Serlvet 引擎管理的 JVM 来运行 Java 程序而提供动态更新 HTML 的功能 (使用不一样的技术来实现相似 CGI 程序的功能,但不彻底同于 CGI,Servlet 有本身的约定)。Java Serlvet 的优势很吸引人,具备 Java 语言的优势和平台无关性;由于 Serlvet 在 Web 服务器中运行,因此能够很容易的访问 Web 服务器的资源;支持在 JVM 中运行多线程,每一个请求将对应一个 Serlvet 线程,对比 CGI 建立进程的方式将节省很大的时间和空间资源。可是工程师们向来都是抵制麻烦寻找便利的人群,使用 Java Servlet 编写服务器端页面,不可避免的就是再次须要在 Java 代码中嵌入前端 HTML 代码,这给编码体验形成了很大影响,为了实现工程师友好(增长这门技术对工程师的吸引力),因而和 PHP 在 HTML 中嵌入代码类似,Java servlet 也实现这一特性,容许在 HTML 中嵌入 Java 代码。更进一步,将一些 Java 代码封装起来换一种更加易于理解和使用的语法,就产生了 JSP。JSP 真正运行时,是会被 Servlet 容器给编译成 Java Servlet 代码的,因此实际运行的仍是 Java 程序。JSP 只是一个工程师友好的中间层。
因为是几个月前写的,已经找不到当时的参考文章了,因此参考资料就不贴了。
做者:Skipper
出处:http://www.cnblogs.com/backwords/p/9376578.html
本博客中未标明转载的文章归做者 Skipper 和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。