1.4 动态网页技术
在1.2.4节中,我们已经介绍过,动态网页一般在服务器端运行,它通过各种动态脚本语言,将网站内容动态存储到数据库,用户访问网站是通过读取数据库来动态生成网页的。网站上主要是一些框架基础,网页的内容大都存储在数据库中。
早期的动态网页技术采用CGI实现,目前,最常用的动态网页技术有ASP、PHP和JSP,下面我们将分别介绍这些动态网页技术。
1.4.1 CGI技术
CGI即Common Gateway Interface(公共网关接口)。在物理上来说,CGI是一段程序,它运行在服务器端,并提供客户端HTML页面的接口。CGI程序最初是在UNIX操作系统上的CERN或NCSA格式的服务器上运行,但在其他操作系统(如Windows NT及Windows 95)的服务器上也广泛地使用CGI程序。
我们必须首先对所使用的服务器进行必要的设置,CGI程序才能顺利运行。CGI程序的工作原理如下:
● CGI程序通过Internet把用户请求发送到服务器。
● 服务器接受用户请求并交给CGI程序处理。
● CGI程序把处理结果传送给服务器。
● 服务器把结果送回到用户。
CGI可以用任何一种语言编写,例如,Perl、Shell、C、C++及JavaScript语言,只要这种语言具有标准输入、输出和环境变量。但最终Perl语言(Practical Extraction and Report Language,文字分析报告语言)因其跨操作系统、易于修改、强大的字符串处理能力而成为了CGI的主流编写语言。
虽然CGI技术实现了网站的动态性,但是CGI也存在很多的不足之处:
● 每个请求都要启动一个操作CGI程序的系统进程。如果请求非常频繁,将会带来很大的开销。
● 需要为每个请求加载和运行一个CGI程序。如果有N个并发的对同一个CGI程序的请求,则该CGI程序的代码在内存中重复装载了N次,这将带了很大的开销。
● 需要重复编写处理网络协议的代码,这些工作是非常耗时的。
前面我们已经介绍过Java语言也可以用来编写CGI程序,但不幸的是,使用Java语言编写的CGI程序的执行效率更低。这是因为要执行一个Java语言编写的CGI程序,除了需要启动一个系统进程之外,还要在进程中启动一个JVM(Java Virtual Mavhine,Java虚拟机或Java运行机制)然后才能在JVM中运行Java CGI程序。
为了解决CGI遗留下来的问题,因此出现了Servlet。在1.4.4节中我们将详细介绍Servlet技术。
1.4.2 ASP技术
ASP即Active Server Page(活动服务页面)。ASP是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库或其他程序进行交互来产生动态的、互动的及高性能的Web应用程序。
ASP技术是指在HTML页面中嵌入特殊的脚本语言命令(一般情况是VB Script),然后由服务器提供的引擎来解释和执行这些脚本。ASP的工作原理如下:
● 浏览器向服务器发出请求。
● 服务器引擎开始运行ASP程序。
● ASP文件按照从上到下的顺序开始处理,执行脚本命令,执行HTML页面内容。
● 服务器将页面信息发送到浏览器。
ASP语言具有简单易学、无须编译、浏览器无关性等优点。但是其也有自身一些不能克服的缺点:
● ASP是微软公司开发的动态网页技术,也继承了微软产品的一贯传统——只能运行于微软的服务器产品IIS上。
● ASP的强大主要在于后台的COM组件,但是由于Windows NT系统最初的设计问题,这种技术引发了大量的安全问题。
● 不能移植到其他的操作系统和非Microsoft的Web服务器上。
程序1-19给出了一个简单的ASP程序的例子。
【程序1-19】asp应用.asp
01 <%@LANGUAGE="VBScRIPT"%>
02 <html><head><meta http-equiv="Content-Type" content="text/html;
03 charset=gb2312" />
04 <title>ASP应用</title>
05 </head>
06 <body>
07 今天是:
08 <%
09 data = Date()
10 Response.Write data \注:VB Script脚本,运行结果:今天是:XXX-XX-XX
11 %>
12 </body>
13 </html>
1.4.3 PHP技术
PHP是Hypertext Preprocessor的缩写,是一种跨平台的服务器端的嵌入式脚本。它融合了C、Java及Perl语言的语法,并具有PHP自己的特性,可以使得Web开发人员快速地编写出动态页面。
PHP的成功在很大程度上归功于它的开源性,我们可以从PHP官方网站http://www.php.net/自由下载,而且还可以不受限制地获得源码。此外,PHP能够支持大多数的数据库,如Microsoft SQL Server、MySQL、Sybase、Oracle等;它提供面向对象的编程,可以在几乎所有的平台上运行。
但是PHP本身存在的一些缺点,使得它不适合应用于大型电子商务站点。首先,PHP缺乏多层结构支持,对于大规模站点,经常采用分布式计算来缓解服务器的压力:数据层、应用逻辑层和表示逻辑层彼此分开,而PHP则缺乏这种支持。其次,PHP缺少正规的商业支持,这也是开源软件一向的缺点。此外,PHP提供的数据库接口支持不统一。虽然PHP支持很多数据库,但是针对每种数据库的开发语言却完全不同,这使得代码的维护和更新变得很复杂。
程序1-20给出了一个简单的PHP程序的例子。
【程序1-20】php应用.php
01 <html> 02 <head> 03 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 04 <title>PHP应用</title> 05 </head> 06 <body> 07 今天是: 08 <? 09 $now = time();//当前系统时间 10 $w = date('w',$now);//当前星期几 \注:PHP脚本。运行结果:今天是:星期X 11 echo $w; 12 ?> 13 </body> 14 </html>
1.4.4 Servlet技术
Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的Web页面。它担当Web浏览器或其他HTTP客户程序,与HTTP服务器上的数据库或应用程序之间的中间层。
与传统的CGI相比,在Servlet中每个请求由一个轻量级的Java线程处理(而不是重量级的操作系统进程),如果多个请求需要做同样处理的时候,这时只需加载一个类,大大降低了系统的开销。
Sun公司在20世纪90年代末发布了基于Servlet的Web服务器,并且提供了统一的编程接口Servlet API。现在几乎所有的服务器都遵循这个编码标准,所以Servlet具有很好的移植性。
现在看看一个比较典型的Servlet源代码,如程序1-21所示。
【程序1-21】Servlet应用.java
01 import java.io.*;import javax.servlet.*;
02 import javax.servlet.http.*;
03 public class HelloWorld extends HttpServlet {
04 //实现doGet方法
05 public void doGet(HttpServletRequest req, HttpServletResponse res)
06 throws ServletException,IOExceptionres.setContentType("text/html");
07
08 //用Writer方法返回响应数据
09 PrintWriter out = res.getWriter();
10
11 out.println("<HTML>");
12 out.println("<HEAD><TITLE>Servlet应用</TITLE></HEAD>");
13 out.println("<BODY>"); \注:输出HTML标记
14 out.println("<BIG> Servlet应用!</BIG>");
15 out.println("</BODY></HTML>");
16 }
从这个例子中可以看出,Servlet实际上采用了Java输出流的打印方法来输出HTML的内容,以达到动态生成 HTML 页面的效果。也就是说,Servlet 生成动态网页的方法就是在 Java 类中嵌入 HTML标记和表达式。如果对 HTML 页面做了任何修改,都需要重新编译 Servlet 源文件,然后重新部署到Servelt容器中。这样使得代码的修改和维护变得非常麻烦。
JSP的引入就是为了解决以上Servlet存在的问题。下一节我们将重点介绍JSP。
1.4.5 JSP技术
JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术是在传统的HTML文件中插入Java程序段和JSP标记,从而形成JSP文件。
Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。JSP具有如下的特点。
1)将内容的生成和显示进行分离
使用JSP技术,Web页面开发人员可以使用HTML或者XML标记来设计和格式化最终页面。使用Java脚本生成页面上的动态内容。
2)强调可重用的组件
绝大多数JSP页面依赖可重用的、跨平台的组件来执行应用程序所要求的复杂的处理。
3)一次编写,各处运行
这是Java语言的特点。
4)移植性强
基本上可以在所有的平台上运行。相比之下,ASP和PHP的局限性显而易见。
5)多样化和功能强大的开发工具支持
目前,Java已经有很多非常优秀的开发工具,有很多工具可以免费获得。
正是由于JSP高效、跨平台、易于复用等特点,JSP已经成为Web开发者的首选。