Delphi应用于移动电话的WML开发 |
| 作者:Jani J vinen 来源:本站整理 发布时间:2005-11-4 0:45:31 |
|
--- 又一个可提供下载的例程:是一个ISAPI的DLL程序。它可以在IIS3.0或者是更新的版本上运行,详细介绍这个ISAPI 的DLLS的文件超出了本文的范围,但是你可以在INTERNET上找到关于ISAPI的详细信息。其中最好的源代码是在 http://www.delphizine.com/include/Click_Redir.asp?Url=http://msdn.microsoft.com/. 上的Microsoft Developer Network (MSDN) 。需要查看调试ISAPI的DLLS的信息,请访问: http://www.delphizine.com/features/ 2000/04/di200004jj_f/di200004jj_f.asp#SidebarOne 在其中查看工具条"Debugging ISAPI DLLs." ---- ISAPI DLLS的缺省返回的是一般的HTML代码,它可以人工创建,也可以在DELPHI中的页面处理控件使用。当然了,最大的优点是DELPHI允许它很容易的连接到数据库,它可以查询到插入到HTML代码中的数据。我们的例程确实是这样实现的,它查询一个数据库,创建一个包含信息的WML,并且将查询的结果返回给用户。直接的说,例程使用的是在DELPHI中的DBDEMOS数据库别名。 ---- 这个DBDEMOS数据库允许访问一个关于海上冒险的潜水设备转售的虚拟用户和订单数据库。这个例程允许WAP手机用户来浏览一个实时的给出的用户的订单信息。这个例程的名字叫:"海上冒险订单在线查询系统",或者简称为MAOOQS(关于下载的详细信息,请看本文结尾的详细细节) 。 ---- 登录到海上冒险程序 ---- 当你想使用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 >MA's 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="/s cripts/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(确省的路径是/s cripts/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:'#13'CustID="' + CustID + #13'Password="' + 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代码。由于每一个由 |
| [] [返回上一页] [打 印] |
|
文章评论 |
