📄 实例——web服务器应用程序.txt
字号:
<HTML>
<HEAD><TITLE>信息查询</TITLE></HEAD>
<BODY>
<H3 ALIGN="CENTER">信息网站</H3>
<table border>
<TR BgColor="White">
<TH>汽车</TH><TH>房屋</TH><TH>人才</TH><TH>其它</TH>
<!-显示表格的标题--->
</TR>
<tr>
<!-------每一个<tr>和</tr>对定义表格的一行内容-------->
<!-------每一个<td>和</td>对定义表格的一个单元格的内容-------->
<td><a HREF="PGrid_src.dll/runquery?QIC">二手汽车</a></td>
<!-- PGrid_src.dll为脚本文件名,runquery 为入口路径,QIC 为查询参数--->
<td><a HREF="PGrid_src.dll/FWQuery?fwz">房屋租赁</td>
<td><a HREF="PGrid_src.dll/RCQuery?Rcz">人才招聘</a></td>
<td><a HREF="PGrid_src.dll/OtherQuery?SHC">商场超市</a></td>
</tr>
<tr>
<td><a HREF="PGrid_src.dll/runquery?Qjx">汽车驾校</a></td>
<td><a HREF="PGrid_src.dll/FWQuery?XZL">写字楼租赁</td>
<td><a HREF="PGrid_src.dll/RCQuery?Qiz">求 职</a></td>
<td><a HREF="PGrid_src.dll/OtherQuery?DIQ">电器专卖店</a></td>
</tr>
<tr>
<td><a HREF="PGrid_src.dll/runquery?Qmr">汽车美容</a></td>
<td><a HREF="PGrid_src.dll/FWQuery?Lop">楼盘信息</td>
<td><a HREF="PGrid_src.dll/RCQuery?JLZ">人才交流中心</a></td>
<td><a HREF="PGrid_src.dll/OtherQuery?SHJ">手机专卖店</a></td>
</tr>
<tr>
<td><a HREF="PGrid_src.dll/runquery?Qwx">汽车维修</a></td>
<td>..</td>
<td>..</td>
<td><a HREF="PGrid_src.dll/OtherQuery?JIC">建材装饰</a></td>
</tr>
<tr>
<td><a HREF="PGrid_src.dll/runquery?Jyz">汽车加油站</a></td>
<td>..</td>
<td>..</td>
<td><a HREF="PGrid_src.dll/OtherQuery?ZHX">装修公司</a></td>
</tr>
<tr>
<td><a HREF="PGrid_src.dll/runquery?Qzl">汽车租赁</a></td>
<td>..</td>
<td>..</td>
<td><a HREF="PGrid_src.dll/OtherQuery?QIJ">清洁公司</a></td>
</tr>
<tr>
<td><a HREF="PGrid_src.dll/runquery?Qsc">汽车市场</a></td>
<td>..</td>
<td>..</td>
<td><a HREF="PGrid_src.dll/OtherQuery?HKS">航空售票处</a></td>
</tr>
</table>
</BODY>
</HTML>
library PGrid_Src;
//注意:使用不同的Delphi版本,所使用文件和数量有差别(本例使用Delphi 7创建)!!!
uses
ActiveX,
ComObj,
WebBroker,
ISAPIThreadPool,
ISAPIApp,
UGrid_Src in 'UGrid_Src.pas' {QueryWebModule: TWebModule};
{$R *.RES}
exports
GetExtensionVersion,
HttpExtensionProc,
TerminateExtension;
begin
Application.Initialize;
Application.CreateForm(TQueryWebModule, QueryWebModule);
Application.Run;
end.
unit UGrid_Src;
interface
uses
//定义使用系统单元文件
Windows, Messages, SysUtils, Classes, HTTPApp, Db, DBTables, DBWeb,
HTTPProd;
type
TQueryWebModule = class(TWebModule)
//说明Web模块上使用的所有组件和事件处理过程
Information_Query_Root: TPageProducer;
QiCheQuery: TQuery;
QiCheDetailQuery: TQuery;
FangWuQuery: TQuery;
FangWuDetailQuery: TQuery;
RenCaiQuery: TQuery;
RenCaiDetailQuery: TQuery;
//如下是事件处理过程的说明
procedure TQueryWebModuleInfoQueryAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure TQueryWebModuledetailqueryAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure TQueryWebModuleRootAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure QueryWebModuleFangWuQueryAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure QueryWebModuleFangWuDetailQueryAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure QueryWebModuleRenCaiDetailQueryAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure QueryWebModuleRenCaiQueryAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure QueryWebModuleOtherQueryAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure QueryWebModuleOtherDetailQueryAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
QueryWebModule: TQueryWebModule;
implementation
{$R *.DFM}
procedure TQueryWebModule.TQueryWebModuleRootAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
//缺省动作项的事件处理过程,它为用户提供选择画面
begin
response.content:=Information_Query_Root.content;
//调用页面生成组件的content方法,形成响应Web客户请求的页面
end;
procedure TQueryWebModule.TQueryWebModuleInfoQueryAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
//查询汽车信息动作项的事件处理过程,它形成汽车简要信息的Web页面,
//并为用户进一步查询详细信息提供超级链接。
var
i:integer;
CaptionStr,colstr1,colstr2,colstr3,str1:string;
begin
i:=0;
//由于Delphi的Case语句不支持字符类型的分支,所以需将客户请求的参数
//转换成相应的序数值
if Request.query='QIC' THEN i:=0;
if Request.query='Qjx' THEN i:=1;
if Request.query='Qmr' THEN i:=2;
if Request.query='Qwx' THEN i:=3;
if Request.query='Jyz' THEN i:=4;
if Request.query='Qzl' THEN i:=5;
if Request.query='Qsc' THEN i:=6;
//为了减少程序的壅余、精炼程序,对与汽车有关的所有查询都采用同一个查询组件,
//实现动态查询和动态生成响应客户请求的HTML表格
QiCheQuery.close;
//关闭当前查询
QiCheQuery.sql.clear;
//清除当前查询的SQL语句
case i of
0:begin
//修改汽车的访问次数(客户每访问一次,访问次数加1)
//根据客户请求参数转换的序号生成响应的SQL语句和HTML表的显示标题
CaptionStr:='二手汽车';
QiCheQuery.sql.add('select * from QiChe where 编号 like '''+'QIC%''');
colstr1:='品牌';
colstr2:='型号';
colstr3:='车辆类型';
end;
1:begin
CaptionStr:='汽车驾校';
QiCheQuery.sql.add('select * from QiChejx where 编号 like '''+'Qjx%''');
colstr1:='名称';
colstr2:='地址';
colstr3:='交通';
end;
2:begin
CaptionStr:='汽车美容';
QiCheQuery.sql.add('select * from QiChemr where 编号 like '''+'Qmr%''');
colstr1:='名称';
colstr2:='保养项目';
colstr3:='地址';
end;
3:begin
CaptionStr:='汽车维修';
QiCheQuery.sql.add('select * from QiChewx where 编号 like '''+'Qwx%''');
colstr1:='名称';
colstr2:='维修类型';
colstr3:='服务时间';
end;
4:begin
CaptionStr:='汽车加油站';
QiCheQuery.sql.add('select * from Jiayouz where 编号 like '''+'Jyz%''');
colstr1:='名称';
colstr2:='品种';
colstr3:='服务时间';
end;
5:begin
CaptionStr:='汽车租赁';
QiCheQuery.sql.add('select * from QiChezl where 编号 like '''+'Qzl%''');
colstr1:='名称';
colstr2:='服务项目';
colstr3:='服务时间';
end;
6:begin
CaptionStr:='汽车市场';
QiCheQuery.sql.add('select * from QiChesc where 编号 like '''+'Qsc%''');
colstr1:='名称';
colstr2:='服务项目';
colstr3:='地址';
end;
end;
QiCheQuery.open;
//打开动态查询
QiCheQuery.First;
{形成HTML表的标题和表头信息,在该表中有四列信息,前三列为基本信息,第四列用于形成完成显示详细信息而必须的超级链接和条件,此处的条件是完成查询当前记录的 信息后部分}
Response.content:='<HTML><HEAD><TITLE>汽车信息</TITLE></HEAD><BODY>'#13+
'<H3 ALIGN="CENTER">'+CaptionStr+'</H3>'#13+'<table border>'#13;
Response.content:=Response.content+'<TR BgColor="White">
<TH>'+colstr1+'</TH><TH>'+colstr2+'</TH><TH>'+colstr3+
'</TH><TH>其它</TH></TR>';
while not QiCheQuery.EOF do
//当表的记录指针不在末尾时,获取当前表的所有前三个字段
begin
Response.content:=Response.content+Format('<tr><td>%s</td><td>%s</td>
<td>%s</td><td><a HREF="%S/rundetail?%s">%s</a></td></tr>'#13,
[QiCheQuery.fields[1].AsString,QiCheQuery.fields[2].AsString,
QiCheQuery.fields[3].AsString,Request.ScriptName,
QiCheQuery.fields[0].AsString,'详细']);
//获取下一个记录
QiCheQuery.Next;
end;
Response.content:=Response.content+'</table></BODY></HTML>'#13;
//最终完成响应客户请求的HTML表格
end;
procedure TQueryWebModule.TQueryWebModuledetailqueryAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
//查询汽车的详细信息动作项的事件处理过程,它形成汽车详细信息的Web页面,
//并为用户进一步查询详细信息提供超级链接。
var
i:integer;
CaptionStr:string;
begin
i:=0;
//IF语句根据客户请求参数判别下一步应执行的查询。
if pos('QIC',Request.query)>0 THEN i:=0;
if pos('Qjx',Request.query)>0 THEN i:=1;
if pos('Qmr',Request.query)>0 THEN i:=2;
if pos('Qwx',Request.query)>0 THEN i:=3;
if pos('Jyz',Request.query)>0 THEN i:=4;
if pos('Qzl',Request.query)>0 THEN i:=5;
if pos('Qsc',Request.query)>0 THEN i:=6;
QiCheDetailQuery.close;
//关闭当前的查询
QiCheDetailQuery.SQL.clear;
//清除当前查询的SQL语句
case i of
0:begin
//根据客户请求的参数,产生相应的查询语句和显示标题
CaptionStr:='二手汽车';
QiCheDetailQuery.sql.add('select * from QiChe where 编号='''
+Request.Query+'''');
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -