Web服务器应用程序

    <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;
      1:begin
        CaptionStr:='汽车驾校';
        QiCheDetailQuery.sql.add('select * from QiChejx where 编号='''
+Request.Query+'''');
        end;
      2:begin
        CaptionStr:='汽车美容';
        QiCheDetailQuery.sql.add('select * from QiChemr where 编号='''
+Request.Query+'''');
        end;
      3:begin
        CaptionStr:='汽车维修';
        QiCheDetailQuery.sql.add('select * from QiChewx where 编号='''
+Request.Query+'''');
        end;
      4:begin
        CaptionStr:='汽车加油站';
        QiCheDetailQuery.sql.add('select * from Jiayouz where 编号='''
+Request.Query+'''');
        end;
      5:begin
        CaptionStr:='汽车租赁';
        QiCheDetailQuery.sql.add('select * from QiChezl where 编号='''
+Request.Query+'''');
        end;
      6:begin
        CaptionStr:='汽车市场';
        QiCheDetailQuery.sql.add('select * from QiChesc where 编号='''
+Request.Query+'''');
        end;
    end;
    QiCheDetailQuery.open;
response.content:= '<html><body><head<title>'+CaptionStr
+'</title></head>'#13+'<table border><center>'#13;
    {信息分成两屏显示,在第一屏中显示三个字段内容,而第二屏是从第四个字段开始显示.    表格显示形式为字段名和字段值,每个字段显示一行,用字段的总数(QiCheDetailQuery.fieldcount)控制循环次数}
    for i:=1 to QiCheDetailQuery.fieldcount-3 do
      response.content:=response.content+'<tr><td>'+
        QiCheDetailQuery.fields[i].fieldname+'</td>'#13+'<td>'+
        QiCheDetailQuery.fields[i].asstring+'</td></tr>'#13;
      response.content:=response.content+'</center></table><hr>'#13
        +'</body></html>'#13;
    //最终完成响应客户请求的HTML表格
    End;

procedure TQueryWebModule.QueryWebModuleFangWuQueryAction(Sender: TObject;
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
    //房屋信息动作项的事件处理过程,并形成响应客户的Web页面
    //并为用户提供房屋的详细信息提供超级链接
    var
    i:integer;
    CaptionStr,colstr1,colstr2,colstr3:string;
    begin
    i:=0;
    //为了减少程序的壅余、对与房屋有关的所有查询都采用同一个查询组件,
    //实现动态查询和动态生成响应客户请求的HTML表格
    if Request.query='fwz' THEN  i:=0;
    if Request.query='XZL' THEN  i:=1;
    FangWuQuery.close;
    FangWuQuery.sql.clear;
    case i of
      0:begin
        CaptionStr:='房屋租赁';
        FangWuQuery.sql.add('select * from Fwzl where 编号 like '''+'fwz%''');
        colstr1:='楼盘名称';
        colstr2:='区域';
        colstr3:='地址';
        end;
      1:begin
       CaptionStr:='写字楼租赁';
        colstr1:='名称';
        colstr2:='面积';
        colstr3:='地址';
        FangWuQuery.sql.add('select * from Xzlz where 编号 like '''+'XZL%''');
        end;
      end;
    FangWuQuery.open;
    {形成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 FangWuQuery.EOF do
    //当表的记录指针不在末尾时,获取当前表的所有前三个字段,
    begin
      Response.content:=Response.content+Format('<tr><td>%s</td><td>%s</td>
<td>%s</td><td><a HREF="%S//FWDetailQuery?%s">%s</a></td></tr>'#13, 
[FangWuQuery.fields[1].AsString,FangWuQuery.fields[2].AsString,
FangWuQuery.fields[3].AsString,Request.ScriptName,
FangWuQuery.fields[0].AsString,'详细']);
      FangWuQuery.Next;
      //获取下一个记录
    end;
    Response.content:=Response.content+'</table></BODY></HTML>'#13;
    //最终完成响应客户请求的HTML表格
end;

procedure TQueryWebModule.QueryWebModuleFangWuDetailQueryAction(
    Sender: TObject; Request: TWebRequest; Response: TWebResponse;
    var Handled: Boolean);
    //查询房屋详细信息动作项的事件处理过程,形成响应Web客户的页面
    var
    i:integer;
    CaptionStr:string;
    begin
    i:=0;
    //IF语句根据客户请求参数判别下一步应执行的查询。
    if pos('fwz',Request.query)>0 THEN  i:=0;
    if pos('XZL',Request.query)>0 THEN  i:=1;
    FangWuDetailQuery.close;
    FangWuDetailQuery.SQL.clear;
    case i of
      0:begin
        CaptionStr:='房屋租赁';
        FangWuDetailQuery.sql.add('select * from Fwzl where 编号='''
+Request.Query+'''');
        end;
      1:begin
        CaptionStr:='写字楼租赁';
        FangWuDetailQuery.sql.add('select * from Xzlz where 编号='''
+Request.Query+'''');
        end;
    end;
    FangWuDetailQuery.open;
    response.content:=
        '<html><body><head<title>'+CaptionStr+'</title></head>'#13+
        '<table border><center>'#13;
    {信息分成两屏显示,在第一屏中显示三个字段内容,而第二屏是从第四个字段开始显示.表格显示形式为字段名和字段值,每个字段显示一行,用字段的总数(FangWuDetailQuery.fieldcount)控制循环次数}
    for i:=1 to FangWuDetailQuery.fieldcount-3 do
      response.content:=response.content+
        '<tr><td>'+FangWuDetailQuery.fields[i].fieldname+'</td>'#13+'<td>'+
        FangWuDetailQuery.fields[i].asstring+'</td></tr>'#13;
     response.content:=response.content+
         '</center></table><hr>'#13+'</body></html>'#13;
     //最终完成响应客户请求的HTML表格
end;

procedure TQueryWebModule.QueryWebModuleRenCaiDetailQueryAction(
    Sender: TObject; Request: TWebRequest; Response: TWebResponse;
    var Handled: Boolean);
//人才详细信息查询
    var
    i:integer;
    CaptionStr:string;
    begin
    i:=0;
    //IF语句根据客户请求参数判别下一步应执行的查询。
    if pos('Rcz',Request.query)>0 THEN  i:=0;
    if pos('Qiz',Request.query)>0 THEN  i:=1;
    if pos('JLZ',Request.query)>0 THEN  i:=2;
    RenCaiDetailQuery.close;
    RenCaiDetailQuery.SQL.clear;
    case i of
      0:begin
        CaptionStr:='人才招聘';
        RenCaiDetailQuery.sql.add('select * from RenCaizp where 编号='''+
Request.Query+'''');
        end;
      1:begin
        CaptionStr:='求    职';
        RenCaiDetailQuery.sql.add('select * from Qiuzhi where 编号='''
+Request.Query+'''');
        end;
      2:begin
        CaptionStr:='人才交流中心';
        RenCaiDetailQuery.sql.add('select * from Jiaoliuzx where 编号='''
+Request.Query+'''');
        end;
    end;
    RenCaiDetailQuery.open;
    response.content:= '<html><body><head<title>'+CaptionStr+'</title>
        </head>'#13+'<table border><center>'#13;
    {信息分成两屏显示,在第一屏中显示三个字段内容,而第二屏是从第四个字段开始显示.    表格显示形式为字段名和字段值,每个字段显示一行,用字段的总数(RenCaiDetailQuery.fieldcount)控制循环次数}
    for i:=1 to RenCaiDetailQuery.fieldcount-3 do
      response.content:=response.content+ '<tr><td>'
        +RenCaiDetailQuery.fields[i].fieldname+'</td>'#13+'<td>'+
        RenCaiDetailQuery.fields[i].asstring+'</td></tr>'#13;
      response.content:=response.content+'</center>
         </table><hr>'#13+'</body></html>'#13;
      //最终完成响应客户请求的HTML表格
end;

procedure TQueryWebModule.QueryWebModuleRenCaiQueryAction(Sender: TObject;
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
    //人才简要信息查询动作项的事件处理过程,它形成响应Web客户的页面
    //并为用户提供查询人才详细信息的超级链接
    var
    i:integer;
    CaptionStr,colstr1,colstr2,colstr3:string;
    begin
    i:=0;
    //为了减少程序的壅余、精炼程序,对与人才有关的所有查询都采用同一个查询组件
    //,实现动态查询和动态生成响应客户请求的HTML表格
    if Request.query='Rcz' THEN  i:=0;
    if Request.query='Qiz' THEN  i:=1;
    if Request.query='JLZ' THEN  i:=2;
    RenCaiQuery.close;
    RenCaiQuery.sql.clear;
    case i of
      0:begin
        CaptionStr:='人才招聘';
        RenCaiQuery.sql.add('select * from RenCaizp where 编号 like '''+'Rcz%''');
        colstr1:='招聘单位';
        colstr2:='地址';
        colstr3:='职位';
        end;
      1:begin
        CaptionStr:='求    职';
        colstr1:='姓名';
        colstr2:='所在地区';
        colstr3:='求职意向';
        RenCaiQuery.sql.add('select * from Qiuzhi where 编号 like '''+'Qiz%''');
        end;
      2:begin
        CaptionStr:='人才交流中心';
        colstr1:='名称';
        colstr2:='地址';
        colstr3:='联系人';
        RenCaiQuery.sql.add('select * from Jiaoliuzx where 编号 like '''
+'JLZ%''');
        end;
    end;
    RenCaiQuery.open;
{形成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 RenCaiQuery.EOF do
    //当表的记录指针不在末尾时,获取当前表的所有前三个字段
    begin
      Response.content:=Response.content+Format('<tr><td>%s</td>
<td>%s</td><td>%s</td><td><a HREF="%S/RCDetailQuery?%s">
%s</a></td></tr>'#13, [RenCaiQuery.fields[1].AsString
,RenCaiQuery.fields[2].AsString,RenCaiQuery.fields[3].AsString,
Request.ScriptName,RenCaiQuery.fields[0].AsString,'详细']);
      RenCaiQuery.Next;
      //获取下一个记录
    end;
    Response.content:=Response.content+'</table></BODY></HTML>'#13;
    //最终完成响应客户请求的HTML表格
end;

procedure TQueryWebModule.QueryWebModuleOtherQueryAction(Sender: TObject;
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
//其它项目简要信息查询
end;

procedure TQueryWebModule.QueryWebModuleOtherDetailQueryAction(
    Sender: TObject; Request: TWebRequest; Response: TWebResponse;
    var Handled: Boolean);
begin
//其它项目详细信息查询
end;
end.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值