Delphi下基于InternetExpress的多层应用开发

品雪 作于1999.10.31.

pinxue@hotmail.com http://pinxue.yeah.net

多层应用已经不是什么很新鲜的玩艺了,但对于B/S的分布式系统的RAD一直没有什么很好的工具,Delphi5提供了Internet Express控件组,很好的解决了这个问题。

先看原理:多层指数据库服务器<==>应用服务器<==>Web服务器<==>浏览器

也就是说应用服务器程序负责与数据库通信存取所需数据,并将相关数据以XML方式编码传递给Web应用,Web应用负责解析浏览器的请求并做出必要的响应,Web应用+浏览器相当于三层结构中的客户端。

这个过程中Delphi4中已经支持的有

  1. BDE+SQL Link支持下的数据库透明访问
  2. 应用服务器与客户端的Data Provide--Client Dataset联接支持
  3. WebDispatch-PageProducer支持下的Web应用快速开发

Delphi5新引入的特性有:

  1. 客户端与服务器间以XML通信,较OleVariant更快更有效率。
  2. XML解析器 与 XMLBroker
  3. MidasPageProducer与客户端的数据库操纵JavaScript

好了,下边就来实做一番,预计第一次做需要半小时至1小时,第二次做则约15分钟可以搞定,再做一遍可能就只要5分钟了。Delphi5的发布会上,Borland的工程师就这么表演了一把,把俺看得目瞪口呆。

假定你的Delphi、BDE都已经装配好,按如下步骤操作:

一、做服务器

  1. File | New Application
  2. 在Form1上放一个Lable,Lable1.Caption设为'Server Running......'。
  3. File | New,在New Item对话框中选中Multitier页双击Remote DataModule以加入远程数据模块,该模块将为前来访问的客户提供数据。
  4. 在Wizard里将CoClass Name填为MyMidasDataModule,单击OK。
  5. 在生成的名为MyMidasDataModule里放一个Database,一个Table,一个DataSetProvider(在Midas页)
  6. Database1.Alias选为DBDemo,DatabaseName设为MyDB,HandleShare设为true,Connection设为true。
  7. Table1.Database设为MyDB,TableName选biolife,Active设为true。
  8. DataSetProvider1.DataSet选为Table1,Export设为true(这与D4中用鼠标右键菜单export不同)。
  9. SaveAll,其中工程存为MidasServer.dpr。
  10. 按F9运行一次,建立exe同时让server自动注册。

二、做Web应用

  1. File | New,在New Item里选Web Server Application,选择CGI Stand alone型。
  2. 将控件面板切换到Midas页,在WebModule1里放上一个DCOMConnect,ComputerName设为服务器程序所在的机器,俺这里是yangwu;ServerName选MidasServer.MyMidasDataModule(工程名.对象名);Connection设为true。
  3. 换到InternetExpress页,放入一个XMLBroker,一个MidasPageProducer。
  4. XMLBroker1.RemoteServer选DCOMConnection1,Provider选DataSetProvider1,Connection设为true。
  5. 将MidasPageProducer1改名为Page,必要时修改HTMLDoc或HTMLFile,本程序暂时不用。
  6. Page.IncludePath设为webmidas,这个参数是一个路径,Page生成的html页中可能会用到一组预定义的Javascript,这组JavaScrtip是用来协助用户通过HTML界面操纵数据库用的,它们原本放在"D:\Program Files\Borland\Delphi5\Source\Webmidas"下,需要复制到WebServer的某个public目录里以便访问,注意的是这个路径名是相对于cgi程序的,其根目录就是web site的根,当前目录.则是cgi程序所在的目录(通常是/cgi-bin)。我将它放在cgi-bin/webmidas里,所以这里填webmidas。
  7. 在WebModule1里击右键,选Action Editor
  8. 在Action Editor里击右键,选New生成一个Action,名为WebActionItem1
  9. WebActionItem1.Producer设为Page,此时PathInfo会自动设为/Page(也就Producer的名字,可以试着改一下Page的名字看看)。
  10. WebActionItem1.Default设为true,如果不设的话访问本CGI程序要用~/cgi-bin/mywebapp.exe/Page的形式,将本Action设为Default之后不加最后的/Page也可以正常使用了。
  11. 将WebActionItem1.Enabled设为true,响应它的OnAction事件,程序代码写:
    Response.Content:=Page.Content;
    Handled:=true;
  12. File | Save All,注意将Project存为mywebapp.dpr,这样编译出来的exe是mywebapp.exe

三、测试

将mywebapp.exe复制到web server的cgi-bin或scripts目录里,并在其下建一个webmidas目录,将D:\Program Files\Borland\Delphi5\Source\Webmidas目录下的所有文件拷贝进去。

在浏览器中访问该cgi程序。如果在IE5和Netscape里访问生成的代码是不同,在IE5或其它支持XML的浏览器里会生成XML代码块。如果你不想让PageProducer生成XML代码块,那么将Page.EnableXMLIslands改为false。

样本工程