---- 当你想使用MAOOQS的时候,在你的WAP手机上(或者是在WAP的开发工具中)输入http://myserver/login.wml,这时WML浏览器交要的显示一个"Welcome to" 屏幕,然后会出现一个登录屏幕,"Welcome to" 和登录卡的WML源代码如下所示:
< card id="welcome" title="Welcome to" newcontext="true"
ontimer="#login" >
< timer value="30"/ >
< p align="center" >
< big >MAs On-line< /big >< br/ >
< em >Order Query System< /em >
< /p >
< /card >
< card id="login" title="Login" newcontext="true" >
< p >
< em >Enter your ID:< /em >< br/ >
< input name="custid" value="1221" maxlength="4"
format="*N" emptyok="false"/ >
< em >Enter your password:< /em >< br/ >
< input name="password" value="HI" maxlength="10"
format="*M" emptyok="true"/ >
< br/ >
< do type="accept" label="Login" >
< go method="post" href="/scripts/ma_ooqs.dll/login" >
< postfield name="custid" value="$(custid)"/ >
< postfield name="password" value="$(password)"/ >
< /go >
< /do >
< /p >
< /card >
---- 登录屏幕包括两个输入字段,一个是用户的ID ,另外一个是密码。这两个字段是使用WML的< INPUT >标识符来创建的,用户输入的各种各样的名字是由NAME属性定义的。
---- < DO >标识符定义了一个< go >的作用,它指向例程的ISAPI 的DLLS(确省的路径是/scripts/ma_ooqs.dll)。< go >使用标准的http 的post命令来发送用户输入的数据到这个dll中。注意< postfield >标识符自动的指示浏览器通过http协议来翻译用户输入的$(custid)和$(password) 变量。
---- 当用户点击登录命令的时候,这个wap手机连接到这个dll,这样使得这个dll执行如图所示的登录动作。首先,代码从Request.ContentFields 属性中提取出custid 和password字段。当被确认之后,(又专门的数据库来保存这些信息,通过遍历数据库的方法来确认它,这个遍历的函数是IsValidCustID,如下代码说示
function TMAWebModule.IsValidCustID
(CustID, Password: string): Boolean;
begin
DebugMessage(IsValidCustID:#13CustID=" + CustID +
#13Password=" + Password + ");
Result := False;
with Customer do begin
try
Open;
if Locate(custno,CustID,[]) then
if (LowerCase(CustomerState.AsString) =
LowerCase(Password)) then
Result := True;
finally
Close;
end;
end;
end;
procedure TMAWebModule.MAWebModuleLoginAction(
Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
var
CustID, Password : string;
begin
CustID := Request.ContentFields.Values[custid];
Password := Request.ContentFields.Values[password];
{ Check validity of custid/password. }
with Response do begin
if IsValidCustID(CustID,Password) then
begin
DebugMessage(CustID/Password is valid.);
MAWebModuleMainMenuAction(Sender, Request,
Response, Handled);
end
else
begin
DebugMessage(Invalid CustID/Password pair.);
ContentType := MIMETypeWML;
Content := InvalidIDPageWML;
end;
end;
Handled := True;
end;
---- 由于DBDEMOS数据库不包含真实的用户ID和相应的密码,例程使用客户表Customer 中的的CustNo字段来做ID,使用State字段来作相应的密码。为测试这个意图,你可以使用如下的ID 和PASSWORD:"1221" and "HI"; "1560" and "FL"; and "1680" and "GA." 返回到浏览器上的WML代码
---- 一般的,WebBroker应用通过对在OnAction事件句柄中的Response对象的控制返回一些简单的HTML代码到浏览器中,。TWebResponse类通过Response 参数的一个Content 属性来表示,它可以接收被这个事件句柄创建的HTML代码。
---- 当用户的浏览器接收数据的时候,它根据它的MIME类型(Multipurpose Internet Mail Extensions)来处理它。TWebResponse 类的MIME类型缺省类型是"text/html",它指定Content 属性的数据类型,确实的是,HTML代码。
---- 但是,WAP应用需要WML(version1.1)的数据的MIME类型"text/vnd.wap.wml." 因此,Response 对象的ContentType属性需要被改变。注意,ContentType 属性可以被改变成任何有效的MIME类型。例如:改变该属性为"image/gif" 就会允许改动作返回一个位图的图像数据(binary.gif)。
---- 当定义好正确的MIME类型后,该动作事件的句柄就会清楚的设置Content 属性可包含有效的WML代码。由于每一个由application产生的WML页都需要一个公共的题头,这个例程定义了一个名字是WMLHeader 的常量来包含这个信息。
---- 存储返回到数据库中的数据当用户成功登录之后,用户重新回到海上探险的主菜单。通过这个菜单,用户可以选择查看客户的信息或者是订单的状态。如果客户选择用户信息的超链接,将执行MAWebModule Web 模块的 CustInfoAction方法的这个定义过的方法。
---- 首先,代码返回到随着post http命令的CustNo参数,当登录的用户的信息在客户表中被查找到以后,代码创建包括三个输入字段的WML代码。最初,三个输入字段包括客户的zip号码,城市,和state,(记着,这个state是口令). 用户可以调整这三个字段,他可以通过选择"Modify Info"命令,用户可以保存新的值返回到数据库。当用户选中这条命令的时候,将执行ModifyCustAction 方法。(见下图)
上一页 [1] [2] [3] 下一页