Software 版 (精华区)

发信人: checcy (老巴夺), 信区: Software
标  题: 用Delphi 3创建Internet/Intranet Web服务器应用 
发信站: 哈工大紫丁香 (Fri Apr 10 00:50:20 1998), 转信

用Delphi 3创建Internet/Intranet Web服务器应用 

林大滨 
  Borland的Delphi 3 C/S (包括C++ Builder 3) 版
为我们提供的重要技术之一就是:创建Web服务器应用能
力,能够非常简单地生成专业性的 ISAPI/NSAI、Win-CGI
、CGI 程序。Delphi 3的Internet组件使得我们能比较容
易地创建与URI相关联的事件处理程序,并且当处理结束
时,能通过编程建立HTML文挡并把它们传送给客户。

  通常,内容是从数据库中提取的。Delphi的Internet
组件能够用于自动管理数据库连接,允许DLL来处理大量
并发的、安全线程的数据库连接。下面我们将介绍及讨论
组件的应用。

  一、 Web服务器应用的结构

  基于Web浏览器的Client/Server的本质就是:

  ·客户是怎样编发请求;

  ·当Web服务器接收到请求后做什么;

  ·页面创建程序是怎样从Web服务器接收信息;

  ·结果是怎样传给服务器的。

  首先我们看看客户是怎样编发请求的,当选中了 HTM
L超文本链接(URL),浏览器在收集有关信息后,发出请求


  例如,客户构建的一个URL:

   它指定了www.jiuzhou.com域中的一个HTTP服务
器。与www.jiuzhou.com联系的客户连接到HTTP服务器上,
并传给服务器一个请求。

  当每个程序完成客户请求时,就建立一个HTML代码页
或其他MIME内容页,并传递给客户(通过服务器)来显示


  Delphi 3提供了称为Web调度器(Web Modules或TWeb
Dispather)来创建Web服务器应用。Web Modules作为非
可视组件容器,它可包含如TPageProducer、Tsession、TT
able、Tquery、TDataSetTableProducer等非可视组件。

  当Web应用接收到HTTP请求消息时,它创建TWebReque
st对象来代表HTTP请求消息,并生成TWebResponse对象来
代表应做出的响应。应用在把这些对象传给Web调度器。W
eb调度器控制Delphi Web服务器应用流程。Web调度器有
一动作项的集合,动作项知道怎样处理一定类型的HTTP请
求消息,并触发动作项的事件处理程序以便它能执行任何
请求动作和生成响应消息。当所有动作项已通过填写TWebR
esponse对象完成创建响应时,调度器把结果传回给Web应
用。应用通过Web服务器把响应传给客户。

  二、 创建Web服务器应用的步骤

  (1) 所有新的Delphi Web Server应用都是这样来
创建的:在Delphi主窗口菜单中选中File|New,然后在New
Items对话框中选中Web Server Application。接着出现
一对话框,让你选择Web服务器应用的类型:

  ·ISAPI和NSAPI 选中这类应用时,将在项目文件的
uses列表和exports子句中添加项目文件的库头和所须项


  ·独立的CGI 选中这类应用时,将在项目文件的use
s字句中添加所需项目,并在原码中添加合适的 $APPTYP
E指令。

  ·独立的Win-CGI 选中这类应用时,将在项目文件
的uses字句中添加所需项目,并在原码中添加合适的 $A
PPTYPE指令。

  选择同应用中相应类型Web服务器进行通讯的Web服务
器应用类型。这时为使用Internet组件和包含空的WebMod
ules创建一个新项目。WebModule是TDataModule的一个后
代,以相同的方式使用:为Web应用的业务规则的不可示
组件提供集中控制。

  (2)设置WebModules:被用于应用中使用不可示组
件及业务规则的资料库。以及在应用中添加任何被用来生
成响应消息的内容生成器:

  ·HTMLPageProducer:生成各种HTML文本;

  ·HTMLQueryTableProducer:根据BDE设置生成查询
或表格;

  ·HTMLDatasetProducer:根据多层环境中的设置生
成RPC结果。

  如果应用生成响应消息中包括从数据库中提取资料,
则应添加数据库访问组件如Tsession、Tdatabase、TTabl
e、Tquery、TStoredProc和TBatchMove。

  (3)设置调度器

  除了保存不可视组件业务规则外,WebModules还担任
调度器(Dispatcher),把进来的HTTP请求消息与生成这
些请求响应的动作相匹配。调度器是TCustomWebDispathe
r的后代,Delphi提供了TWebModule和TWebDispather组件
,你也可以创建自己的TCustomWebDispather的后代。

  单击调度器Action属性上的省略号来打开Object Ins
pector的action编辑器。单击action编辑器中的Add按钮
既可向调度器添加动作。在调度器中添加动作来响应不同
的请求方式和目标URL。

  当调度器接收客户请求时,就会生成一个BeforeDisp
ath事件,这就为应用提供一个机会:在应用被任何动作
项发现之前预先处理请求消息。

  当调度器找到合适的动作项后,就触发动作项的OnAc
tion事件处理程序。OnAction事件处理程序能完全处理请
求,或部分处理请求再让其它动作项来处理。OnAction事
件处理程序通过设置Handled参数为False来发出调度器应
继续把请求传送给其它动作项的信号。

  如果调度器检查了所有动作项,并且请求消息仍旧没
有全部处理,就调用缺省动作项。缺省动作项不需匹配目
标URL和请求方法。

  (4)动作项属性设置

  每个动作项执行一个指定的任务来响应给定类型的请
求。动作项能完全响应一个请求或着执行部分响应并允许
其它动作项完成工作。动作项能够发送请求的HTTP响应消
息,或着简单配置部分响应让其它动作项完成工作。

  动作项的属性决定了调度器是否选择它来处理HTTP请
求消息。为了设置动作项属性,你必须首先打开Action编
辑器:在Object Inspector中选中调度器的Action属性并
单击省略号。当在Action编辑器中选定一个动作时,就能
在Obhect Inspector中修改其属性。由于调度器比较动作
项的PathInfo属性和请求的URL的路径信息部分,所以属
性值应该是动作项准备处理的所有请求URL的路径信息部分


  (5)创建HTTP响应消息

  当Web服务器应用为进入的HTTP请求消息创建TWebReq
uest对象时,它同时还创建一个用来代表被送回的响应消
息的TwebResponse对象。在ISAPI和NSAPI应用中,响应消
息被TISAPIResponse对象封装。控制台CGI应用使用TCGIR
esponse对象,而Windows CGI应用使用TWinCGIResponse
对象,生成Web客户请求响应的OnAction事件处理程序填写
响应对象属性。

   (6)生成响应消息内容

  Delphi提供了大量对象在生成HTTP响应消息内容时来
帮助你的OnAction 事件处理程序。你可以用这些对象来
生成HTML命令字符串,这些命令存放在文件中或直接传回
给客户。

  三、TpageProducer、TQueryTableProducer、TDataS
etTableProducer的使用

  (1)使用TpageProducer

  TpageProducer组件采用一个HTML模板,并用定制的H
TML代码替换特定的HTML透明标志,这样就完成了模板的
转换。你可以存储一套标准响应模板,在你需要生成HTTP
请求消息时,可用页面生成器来填写这些模板。也可以把
页面生成器连在一起,并通过HTML透明标志的连续改进来
迭代建立HTML文档。HTML模板是一组HTML命令和HTML透明
标志。标识名可以是任何有效的Object Pascal标识符,并
且指出了标识所代表的类型转换。Delphi提供了一些预定
义的与Ttag数据句类型有联系的标识名:

  标识名 Ttag值 标识应转换什么

  Link tglink 超文本连接。 ... > 的HTML序列。

  Image tgImage 图形图象。 ... G> 的HTML序列。

  Table tgTable HTML表。... LE> 的HTML序列。

  ImageMap tgImageMap 具有相关热区的图形图象。
... 。

  Object tgObject 嵌入的ActiveX对象。 ECT>...。

  Embed tgEmbed 遵循Netscape的add-in DLL

-- 
Chengyan Che - Software Freelancer, Harbin, P.R.China
-----------------------------------------------------------
Do you need a software developer for your project or just
for your killer money-making idea? Drop me a line and let
me know how I can help you out! 
mailto:checcy@public.hr.hl.cn
ICQ:5116726

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: checcy@public.hr.hl.]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.793毫秒