北京市融海公司
王炯
---- 现在很多朋友都有了自己的个人主页。有一个留言板主页与访问者交流一下可能是很多网友愿望。但留言板主页不同与一般主页,它不但有主页部分而且还要有数据存储功能。其实用DELPHI的CGI应用程序可以轻松的制作留言板主页。用ELPHI开发CGI应用程序不但可以实现ASP,HTML很难实现的低层操作,而且简化了CGI应用程序开发过程。
---- 1.选择Delphi的菜单File|New,在New标签中选择"Web Server Application"。
---- 然后在选择"CGI Stand-alone executable",创建一个CGI应用程序。
---- (如果想创建ISAPI或NSAPI应用程序,只需选择"ISAPI/NSAPI Dynamic Link Library",后几步操作不变。)
---- 2.系统自动创建一个非可视的WebModule1组件,我们按以下步骤给程序添加控制和代码:
---- (1)、双击WebModule1的Actions属性,弹出"Editing WebModule1.Actions"对话框;
---- (2)、单击Add按钮,添加一个新行WebActionItem1
---- (3)、单击WebActionItem1,在Object Inspector中将WebActionItem1的Default属性设置为True;这样设置使访问CGI.EXE时直接访问此页面。
---- (4)、单击Add按钮,添加一个新行WebActionItem2
---- (5)、单击WebActionItem2,在Object Inspector中将WebActionItem2的PathInfo属性设置为"\Info";即访问此页面的路径为CGI.EXE\Info。
---- (6)、在Object Inspector中双击WebActionItem1的OnAction事件,添加代码。将留言板页面的HTML语句赋给Response.Content属性,使用户访问WEB服务器应用程序时显示。
---- (7)、在Object Inspector中双击WebActionItem2的OnAction事件,添加代码处理留言板页面传回的信息,同时显示相关信息通知用户。其中涉及Request.ContentFields.Values['index']及Request.ContentFields.Strings[counts]两个属性的应用。
---- Request.ContentFields.Values['UserName']是指留言板页面中name="UserName"的控件中的数据信息。
---- Request.ContentFields.Strings[Counts]是指留言板页面传过来各项数据及对应的控件名。以Counts区分其为哪项数据,其数值为留言板页面传输数据项的顺序号。
---- 数据存储方式我采用文本文件存储,如果网友的主页人气鼎盛也可考虑改用数据库存储。
---- 以下是完整的程序代码
---- 在DELPHI3,IIS4.0/PWS,IE4.0中运行通过。
unit Html;
interface
uses
Windows, Messages, SysUtils, Classes, HTTPApp;
type
TWebModule1 = class(TWebModule)
procedure WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure WebModule1WebActionItem2Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
WebModule1: TWebModule1;
implementation
{$R *.DFM}
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var html:string;
begin
html:='';
html:=html+'< html >< head >< title >会员注册< /title >< /head >< center >';
html:=html+'< H2 >会员注册< /H2 >< /center >';
html:=html+'< body background="" bgcolor="#fffff" >< td >< /td >';
html:=html+'< form action="webcgi.exe\Info" method="post" id="form1" name="form1" style="FONT-SIZE: larger" >';
html:=html+'< p >姓名:< input size="12" maxlength="10" name="UserName" >< /p >';
html:=html+'< p >性别:< input type="radio" name="Sex" value="Man" checked >男';
html:=html+'< input type="radio" name="Sex" value="Woman" >女< /p >';
html:=html+'< p >年龄:< input size="5" maxlength="3" name="Age" >< /p >' ;
html:=html+'< p >所在城市:< input size="20" maxlength="16" name="City" >< /p >' ;
html:=html+'< p >Email:< input size="24" maxlength="30" name="Email" >< /p >';
html:=html+'< p >留言:< textarea name="Textarea" rows="5" cols="30" >< /textarea >< /p >';
html:=html+'< center >< input type="submit" Name="submit" value=" 提 交 " >';
html:=html+'< input type="reset" value=" 取 消" >';
html:=html+'< /form >< /center >';
html:=html+'< /BODY >< /html >';
Response.Content :=html;
end;
procedure TWebModule1.WebModule1WebActionItem2Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
html:string;
Output: TextFile;
Counts,line:integer;
begin
Assignfile(Output, 'List.Txt');{如果没有list.txt文件会报错,须先手工创建。}
Append(output);
for counts:=0 to Request.ContentFields.Count-2 do
begin
if counts< Request.ContentFields.Count-2 then
begin
Write(Output, Request.ContentFields.Strings[counts]);
for line:=0 to 20-length(Request.ContentFields.Strings[counts]) do
begin
Write(Output,' ');
end;
end
else
begin
Write(Output, Request.ContentFields.Strings[counts]);
Writeln(Output,' ');
end ;
end;
CloseFile(output);
html:='';
html:=html+'< html >< head >< title >Thank You!< /title >< /head >< body >';
html:=html+'< center >< P >< H2 >'+Request.ContentFields.Values['UserName'];
html:=html+'您好!您已注册成功!< /H2 >< /P >';
html:=html+'< A href="http://zhou/scripts/Webcgi.exe" >点击这里返回< /A >';
html:=html+'< /center >< /body >< /html >';
Response.Content :=html;
end;
end.