1.3 动态网页技术CGI/ASP/PHP/JSP
1.3.1 CGI
CGI(Common Gateway Interface,通用网关接口),是能在Web服务器上运行的一个程序,并由来自于浏览者的输入触发。在Web服务器上,CGI-BIN目录是存放CGI脚本的地方。这些脚本使WWW服务器和浏览器能运行外部程序。CGI能够让浏览者与服务器进行交互,比如我们曾经遇到过在网络上填表或者进行搜索,很可能用的是CGI。
CGI应用程序可以由大多数的编程语言编写,如Perl(Practical Extraction and Report Language)、C\C++、Java和Visual Basic等。
CGI应用程序可以动态产生网页,其工作过程如下:
(1)浏览器通过HTML表单或超链接请求指上一个CGI应用程序的URL。
(2)服务器收发到请求,执行指定的CGI应用程序。
(3)CGI应用程序执行所需要的操作,通常是基于浏览器输入的内容。
(4)CGI应用程序把结果格式化为Web服务器和浏览器能够理解的文档(通常是HTML网页)。
(5)Web服务器把结果返回到浏览器中。
CGI应用程序的优点是可以独立运行,易于使用,但是当大量用户同时访问同一网页时会同时使用一个CGI应用程序,响应会变慢,Web服务器速度也会受到很大影响。更严重的是,CGI应用程序运行在浏览器可以请求的服务器系统上,执行时需要占用服务器CPU时间和内存。如果有成千上万的这种程序同时运行,则会对服务器系统提出极高的要求,考虑到每个对使用CGI的动态网页的访问都会在服务器上产生一个进程,需要对访问的数量慎重考虑,以防止服务器的系统发生崩溃。
1.3.2 ASP
ASP(Active Server Pages),活动服务器页面,是一种由Microsoft公司开发的可以动态产生网页内容的技术。ASP向用户提供动态网页的功能和CGI应用程序非常相似。它可以在HTML程序代码中内嵌一些脚本语言(Scripting Language),如JavaScript和VBScript。只要服务器端安装了适当的编译程序引擎,服务器便可以调用此编译程序来执行脚本语言,然后将结果传送到客户端的浏览器上。
ASP虽然功能非常优越,因为脚本是在服务器端运行的,所以Web服务器完成所有处理后,将标准的HTML页面送往浏览器。这意味着,ASP只能在可以支持的服务器上运行,但目前只能在微软公司的Windows NT平台的IIS服务器上执行,限制了ASP的应用。
提示:现在也有第三方插件使ASP可以在Linux上运行,但效果并不是很好。
1.3.3 PHP
PHP是一种HTML内嵌式的语言,PHP与微软的ASP颇有几分相似,都是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有点类似于C语言,现在被很多的网站编程人员广泛运用。PHP独特的语法混合了C、Java、Perl及PHP自创新的语法。它可以比CGI或者Perl更快速执行动态网页。PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多,与同样是嵌入HTML文档的脚本语言JavaScript相比,PHP在服务器端执行,充分利用了服务器的性能。PHP执行引擎还会将用户经常访问的PHP程序驻留在内存中,其他用户再一次访问这个程序时就不需要重新编译程序了,只要直接执行内存中的代码就可以了,这也是PHP高效率的体现之一。PHP具有非常强大的功能,所有的CGI或者JavaScript的功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统。
PHP原先是Hypertext Preprocessor(超级文本预处理语言)的缩写,在1995年以Personal Home Page Tools(PHP Tools)开始对外发表第一个版本,到现在已经发展到5.0版本,是广泛应用于Linux的服务端脚本语言。PHP通常在以MySQL数据库为后台数据库的小型动态网站的开发上得到了较广泛的应用。
1.3.4 JSP
JSP(Java Server Page)是Sun公司推出的新一代动态网站开发技术,使用JSP标识或者小脚本来生成页面上的动态内容,完全解决了目ASP和PHP的脚本级执行的缺点。JSP可以在Servlet和JavaBean的支持下,完成功能强大的动态网站程序的开发。JSP的主要技术特点包括以下内容。
1.将内容的生成和显示进行分离
使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。生成内容的逻辑被封装在标识和JavaBean组件中,并且捆绑在小脚本中,所有的脚本在服务器端运行。如果核心逻辑被封装在标识和JavaBean中,那么其他人,如Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响页面内容的生成。
在服务器端,JSP引擎解释JSP标识和小脚本,生成所请求的内容(例如,通过访问JavaBean组件,使用JDBC技术访问数据库,或者包含文件),并且将结果以HTML(或者XML)页面的形式发送回浏览器。这有助于作者保护自己的代码,同时保证任何基于HTML的Web浏览器的完全可用性。
2.强调可重用的组件
绝大多数JSP页面依赖于可重用的、跨平台的组件(JavaBean或者Enterprise JavaBean组件)来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件能为更多的使用者或者客户团体所使用。基于组件的方法加速了总体开发过程,优化了程序的结构。
3.采用标识简化页面开发
JSP技术封装了许多功能,这些功能是在易用的,与JSP相关的XML标识中进行动态内容生成所需要的。标准的JSP标识能够访问和实例化JavaBean组件、设置或者检索组件属性、实现页面之间的跳转,以及执行用其他方法更难于编码和耗时的功能。
通过开发定制标识库,JSP技术是可以扩展的。第三方开发人员和其他人员为常用功能创建自己的标识库,这使得Web页面开发人员能够使用如普通的页面标识一样的组件来工作,执行特定功能,简化开发过程。
JSP技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且扩展到能够支持企业级的分布式应用。作为采用Java技术家族的一部分,以及Java 2(企业版体系结构)的一个组成部分,JSP技术能够支持高度复杂的基于Web的应用。
由于JSP页面的内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译成为Java Servlet,所以JSP页面就具有Java技术的所有优点,包括健壮的存储管理和安全性。作为Java平台的一部分,JSP拥有Java编程语言“一次编写,各处运行”的特点。随着越来越多的供应商将JSP支持添加到自己的产品中,用户可以使用自己所选择的服务器和工具,更改工具或服务器并不影响当前的应用。
JSP同PHP类似,几乎可以运行于所有平台,如Windows NT、Linux、UNIX。Windows NT下的IIS通过一个插件,如JRUN或者ServletExec就能支持JSP。著名的Web服务器Apache已经能够支持JSP。由于Apache广泛应用在Windows NT、UNIX和Linux上,因而JSP有更广泛的运行平台。虽然现在Windows NT操作系统占了很大的市场份额,但是在服务器方面UNIX的优势仍然很大,而新崛起的Linux更是来势不小。从一个平台移植到另外一个平台,JSP和JavaBean甚至不用重新编译,因为Java字节码都是标准的、与平台无关。
从性能、开发效率、支持平台等各角度综合考虑,我们可以认为JSP是未来Web程序开发的主要技术。