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毫秒