Java Web开发入行真功夫
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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开发者的首选。