开发者社区


C++/C | Java | .Net/Windows | Linux/Unix | 开源 | 其他
首页 - 编程
编程
全文搜索:   

用Delphi 6 编写基于WAP的无线应用
作者:
2001-10-12 16:06:41



显示部分
代码的显示部分是一行字符说"请输入:", 接着是两行, 可以用来输入荷兰盾或者是欧元. 两个输入域都带有格式符*N(意思是不限量的数字字符).

行为部分
行为部分和"prev"按纽联系在一起而且有一个标签叫做"Convert(转换)." 在do置标里, go置标会去执行一个外部的叫做wap.exe(PathInfo的值是/convert) 的URL (或者说WAP 应用), 这个URL 放在cgi-bin目录里. 我们将很快用Delphi 6 来创建这个WAP Web 服务应用.

使用POST 协议, 两个数据域和值会被传递给这个WAP 应用: 一个域叫做Guilder, 它有一个属于显示部分 Guilder 域的值, 另一个域叫做Euro, 它和显示部分的Euros 域是相关联的.

配置Web 服务器
要配置你的Web 服务器以便它能够明白WML 输出(和WBMP位图), 你需要添加两种特别的MIME 类型. 要做到这一点, 打开你的Web 服务器(比如Win2K上的IIS5)的配置对话框, 选择HTTP Headers 标签, 然后点击文件类型按纽, 为.wml(deck)页面注册text/vnd.wap.wml 并为.wbmp 图象注册image/vnd.wap.wbmp(如图B).

图B

注册必需的文件类型

可选的, 你也可以注册text/vnd.wap.wmlscript (为WMLScript) , 但我现在没有使用WMLScript.

生成WML
既然我们已经搭好了平台, 现在就应该启动Delphi 6(或者 Kylix) 然后建立一个能够生成WML的 Web 服务器应用程序了. Web 服务应用的类型并不重要, 但是既然在Delphi 和 Kylix 中相同的只有一种类型, 我就在我的例子中创建了一个CGI 可执行文件, 并命名为wap42. 记住任何Web 服务器程序都能够生成WML 代码, 所以在实际工程中, 你可以任意的试验ISAPI/NSAPI 或者 Apache DSO. 在Web 模块里右键单击并创建两个Web 行为单元: 一个带有/convert PathInfo 值而另一个没有PathInfo 值, 这个将成为缺省的Web 行为单元. Web 行为单元编辑看起来如图C 一样.

图C

Web 行为单元

我们将从缺省的Web 行为开始. 选择这个单元, 然后在Object Inspector 窗口里找到OnAction 事件处理函数, 最后写下面的代码.


procedureTWebModule1.WebModule1WebActionItem0Action(Sender: TObject;
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
    Response.ContentType := 'text/vnd.wap.wml';
    Response.Content :=
        '<?xml version="1.0"?> ' + #10#13 +
        '<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"' +
        ' "http://www.wapforum.org/DTD/wml_1.1.xml">' + #10#13 +
        #10#13 +
        '<wml>' +
        '<card id="euro" title="Euro Conversion">' +
        '<p>' +
        'Please enter: <br/>' +
            'Guilders: <input name="Guilders" format="*N"/><br/>' +
            'Euro: <input name="Euros" format="*N"/>' +
        '</p>' +
        '<do type="prev" label="Convert">' +
            ' <go method="post" href="/cgi-bin/wap.exe/convert">' +
                ' <postfield name="Guilder" value="$(Guilders)"/>' +
                ' <postfield name="Euro" value="$(Euros)"/>' +
            ' </go>' +
            '</do>' +
        '</card>' +
        '</wml>';
end;


第一个语句与ContentType 有关, 缺省的值是text/html, 所以我们必须显式的将它改成text/vnd.wap.wml. 在我们设置了ContentType以后, 我们必须设置Response.Content 本身. 这是以两行的XML 头信息开始的, 然后紧跟我们在荷兰盾-欧元转化例子中看到的WML card. 唯一的不同是这一次, 我们将动态的生成WML (而不是使用一个静态的WML card).

【上一页】 【下一页】
声明:
Builder.com.cn(原ZDNet China应用开发频道)原创文章版权所有,未经许可严禁转载,且不构成投资建议。
实用技术文档
J2me XML
C/C++ C#
Java Oracle
Mysql .Net
VB.NET CSS
SQL Server 数据库
SQL UNIX
Linux Jsp
PHP Perl
Javascript IIS
XHTML ColdFusion
ASP/ASP.NET Apache
AJAX
订阅技术邮件
订阅"技术圈"杂志!请在下面选择您感兴趣的专题,填写e-mail地址,然后按订阅按钮:
应用开发管理
VS.NET 周刊
Database 周刊
WEB Service周刊
JAVA 周刊
IT 认证
Windows服务器周刊
互联网开发
当Windows Server 2008专家得5000元现金大奖
CNET NETWORKS 中国: 爱卡汽车网 | CNET科技资讯网 | e询网 | CWEEK | 蜂鸟网 | GameSpot China | 个人电脑 | PChome | SPN | 网友世界 | ZDNet China | 中关村在线
CNET NETWORKS 美国: BNET | CNET.com | CNET Download.com | CNET News.com | CNET Reviews | CNET Shopper.com | GameSpot | MP3.com | mySimon | Release 1.0 | Search.com | TechRepublic | TV.com | Webshots | ZDNet
Copyright (c) CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
ZDNet 公司标识是 CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号