1、WAP 建站进阶第 1 页 共 93 页WAP 建站进阶在对 WAP 的概念有了初步的了解之后,读者将要重点学习如何使用 WML 标记语言和 WMLScript 脚本语言进行开发。本章首先介绍了一些流行的 WAP 工具包,然后深入浅出地介绍了 WML 和WMLScript,并且还有详尽的实例供初学者参考。详细的 WML 标记和 WMLScript 函数库是难得的中文参考资料。一、 WAP 工具包目前 WAP 技术还处于初步的发展阶段,但是它的出现引起了公众的强烈兴趣。WAP 业务在欧洲开展得较早,目前将有更多的业务在北美和亚洲展开。很多 WAP 开发商推出了一些 WAP 应用工具,以进一步加快
2、 WAP 应用的发展。WAP 工具包目前 WAP 技术还处于初步的发展阶段,但是它的出现引起了公众的强烈兴趣。WAP 业务在欧洲开展得较早,目前将有更多的业务在北美和亚洲展开。很多 WAP 开发商推出了一些 WAP 应用工具,以进一步加快 WAP 应用的发展。在这里将要介绍一下目前四个主流的 WAP 工具包:o Ericsson WapIDE 2.0 o Nokia WAP Toolkit 1.2 o P UP.SDK 4.0 o Motorola ADK 1.0 虽然这四家公司都是 WAP 论坛的主要成员,但是他们的开发工具包在很多方面都有所不同。如果读者正打算开发第一个 WAP 应用,建议
3、使用 Nokia WAP Toolkit 作为入门工具。阅读工具包中所带的例子是学习 WAP 好方法。下面主要整体介绍各种工具包,具体的功能与操作可以参考前面对 Nokia WAP Toolkit 的功能介绍。Ericsson WapIDE 2.0Ericsson WapIDE 2.0 具有集成化的 WAP 开发平台。它由一系列能支持设计和 WAP 测试的应用工具构成。同时它支持自己设计和更换测试设备的外形。WapIDE 的 SDK 目前只能在 Windows NT 4.0 和 Windows 95/98 下使用。在 WapIDE 中还有用于测试服务器应用的程序。这些包括 Perl 5.0、T
4、cl/Tk 和 Xitami Web Server。安装 WapIDE 需要首先安装 IDE,然后安装 SDK。还需要注意的是:如果不安装 Xitami Web 服务器,那么整个安装过程就失败了。所以如果读者已经有了其他的 Web 服务器,可以先关闭它。等安装完成后关闭 Xitami Web 服务器,再恢复原来的 Web服务。在安装的时候,最好安装全部功能选项。如果不需要 Xitami Web 服务器,那么就不要选择 Xitami Web 服务器自动启动这一项。否则在重新启动机器的时候 IIS 会与 Xitami Web 服务器产生冲突!WAP 建站进阶第 2 页 共 93 页图 3-1 Wa
5、pIDE 2.0图 3-1 所示是 WapIDE 的一个界面,其中包括浏览器(用于测试应用程序)、应用设计器(用于编写应用程序)和一系列服务器端工具集(一些工具诸如:WML/WMLScript 编译器和一个语义分析器)。图 3-2 浏览器浏览器(图 3-2)支持使用不同的设备(缺省情况下设备显示的是 R320s 的样子),允许使用者测试工具包中带有的 WAP URLs 例子,或测试自己编写的应用,这些 WAP 应用例子包括金融、股票和日程等的应用。在使用这个浏览器的时候有一个十分有意思的事情:必须按住开机按钮,才能启动浏览器并开始使用。否则,读者就会弄不懂它为什么不工作。读者的大部分时间将会花
6、费在应用程序设计上。这个部分集成了一个 WML 编辑器和一个 WapIDE 浏览器,这样编程序和测试将在一起实现。这是一个十分朴素的开发环境,相关文档也比较少,只有一些 Adobe Acrobat 的文档可供下载。 Nokia WAP Toolkit 1.2Nokia 的 WAP 工具包在某些方面很类似于 Ericsson 的 WapIDE。两个产品都有图形开发环境、浏览器和 WML/WMLScript 编译器。Nokia 工具包目前只能在 Windows NT 4.0 上运行。要注意的是 Nokia WAP Toolkit 需要 Java 运行环境。所以需要先到 Sun 的 Java 站点下
7、载一个 Java 2 SDK 或者 Java 2 Runtime Environment(JRE)才可以安装和使用 Nokia WAP Toolkit。工具包安装完之后,可以看到 WAP 工具包程序组中包括一个工具包 IDE。还有很多关于 WAPWAP 建站进阶第 3 页 共 93 页、WML 和 WMLScript 的详细文档以及工具包本身的使用指导。该工具包支持在同一个应用下进行编辑、修改和测试 WML/WMLScript 文件等工作。用户可以通过输入 WAP 应用的 URLs 或通过 WAP 网关进行浏览网页。Nokia 还出售一个独立的基于 WAP 服务器的 Java Servlet。
8、该产品将应用服务器功能和 WAP 网关功能集成到一个产品中。总体来说,Nokia WAP 产品相对于 Ericsson WapIDE 产品显得较成熟、实用。P UP.SDK 4.0P 公司的 UP.SDK 产品适用于 Windows 95/98/NT 和 Solaris。与 Nokia 和 Ericsson 的产品有稍许区别,它不带有图形的 IDE。也没有提供编辑和测试 WML/WMLScript 程序代码的集成环境。UP.SDK 更着重于提供一系列可由不同语言(如:WML、Perl、C、C+和 VB 等)重复使用的代码库。P 是 WAP 微浏览器制造的领先者,很多 WAP 手机中采用的都是
9、P 公司提供的 WAP 微型浏览器。模拟器 UP.Simulator 如图 3-3 所示。模拟器目前只能在 Windows 平台上运行。图 3-3 UP.SimulatorUP.Simulator 在启动的时候将自动连接 P 开发者站点,所以需要保持与 Internet 的连接。UP.Simulator 无法脱机使用,也无法直接打开 WML 文件。推荐大家去试用一下该产品,它会很直观地让读者感觉到 WAP 的用途。在一两秒之内就能使用 UP.Simulator 查到本地的天气情况,看到世界各地的新闻。UP.SDK 还包括有供 Perl 和 C 语言使用的库函数,可以用来生成 WML 文件,控制
10、 HTTP 请求等。另外,UP.SDK 有请求并安装 SSL 证书的安全性工具。P 除了提供标准的 WAP 功能外,它还扩展了更多的 WAP 功能如传真、通知等。Motorola Mobile ADK 1.0从总体上来说 MADK 提供了一个完整的集成开发环境和浏览器。使用的时候会发现它的工作方式和 Visual Studio 的工作方式很像(图 3-4)。因此对于习惯于使用微软产品的开发人员来说WAP 建站进阶第 4 页 共 93 页将是十分顺手的。另外 MADK 还提供了比较完整的帮助文档,里面除了介绍 WML 和 WMLScript 以外,还介绍了 VoXML。图 3-4 MADK 集成
11、开发界面图 3-5 模拟器如果操作系统为 WinNT 或者 Win98,那么在安装 MADK 之前必须更新 Java 虚拟机,否则安装过程就会失败。在安装的过程当中,还将附带地安装 Voice Agent。在使用的过程当中,读者会发现 MADK 不如 Nokia WAP Toolkit 成熟。例如:如果直接输入中文,就会引起编辑界面的混乱;在每次模拟完成之后,必须停止模拟器(图 3-5)再重新打开,否则无法进行新的测试工作;再每次编译之后留下一大堆的 WMLC 文件;更奇特的是在 Nokia WAP Toolkit 编译通过的页面,在 MADK 上就可能通不过。 其他工具包工具包 编辑器 模拟
12、器 调试工具 例子程序 在线文档WAP 建站进阶第 5 页 共 93 页Nokia WAP Toolkit 1.2http:/ MADK 1.0http:/ WapIDE SDK 1.2http:/ UP.SDK 4.0http:/ WAPObjectshttp:/ WAPPage 1.0http:/ CardONEhttp:/www.peso.de/wap_en/index.htm WAP Developer Toolkit 1.0http:/ PWOT WML Toolshttp:/pwot.co.uk/wml/ 二、WML 简介WML 是一种基于 XML(扩展标记语言)的一种标记语言。这
13、种语言是为无线设备用户提供交互界面而设计的。这些无线设备包括电话、呼机和个人数字助理(Personal Digital Assistants)等等。WML 是一种基于 XML(扩展标记语言)的一种标记语言。这种语言是为无线设备用户提供交互界面而设计的。这些无线设备包括电话、呼机和个人数字助理(Personal Digital Assistants)等等。WML 是为具有以下特点的设备而设计的:体积小(相对于个人计算机) 。 有限的内存和 CPU 大小。 通讯带宽窄和时延长。 现在支持 WML 的设备大致分为两大类: 电话棗其特点就是只有 410 行的文本屏幕。用户通过电话的按钮进行输入。 个人
14、数字助理(PDA)棗其特点就是能支持 100100 分辨率(或者更好) 。用户能够通过键盘、鼠标或者手写输入。 现在正期待着其他的手持设备同样能支持 WML。因为 WML 支持许多功能不同的设备,因此文档中列出了这些设备至少应有的功能或者是参考设备。参考设备有以下的特点:WAP 建站进阶第 6 页 共 93 页 有一个显示屏幕,能显示 4 行字符,每行 12 个字符。包括保留给功能按钮的那一行。 支持 ASCII 的可打印码。 支持数字和字符的输入。 支持使用箭头或者数字按钮进行选择。 两个可编程功能键,ACCEPT 和 OPTIONS,并且显示在接近键盘的屏幕下。 一个 PREV 导航键。
15、支持垂直滚动的箭头按键。 支持水平滚动(不是使用自动换行) 。 字符集WML 使用 XML 的字符集棗也就是当前使用的通用的字符集 ISO/IEC-10646(Unicode 2.0)并且支持其他系列的子集(例如:US-ASCII、ISO-8859-1 或者 UTF-8)。不必使用整个 Unicode(UCS-4)编码,除非正在使用的不是 UTF-8 编码。大小写敏感不象 HTML,WML 是一种大小写敏感的语言。所有的标签、属性和枚举属性都必须使用小写。在编写 WML 页面的时候,必须注意到大小写。包括参数的名字和参数的数值都是大小写敏感的。例如:variable1、Variable1 和
16、vaRiable1 都是不同的参数。不显示的字符表 3-2 中包括了在 WML 中不显示的字符:表 3-2 不显示的字符字符 8 位十进制值换行 10回车 13空格 32水平制表符 9除非特别的指定,WML 将一个或多个连续的换行、回车、水平制表和空格转换成一个空格。换句话说,忽略所有的多于一个以上的不显示字符。例子 1:Some text例子 2:WAP 建站进阶第 7 页 共 93 页Some text 上面的例子中,手工地使用换行和回车保证程序的可读性,但不是很必要。文件开场白所有的 WML 页面必须在文件的开头处声明 XML 文件类型:为了将这个开场白自动地加入到页面中,读者可以使用函
17、数调用来实现。注意:为了确定 WAP 浏览器的类型和版本,可以通过捕获 HTTP 头中的 USER_AGENT 来进行。Content Type为了建立一个有效的 WML 信息实体(MIME type),必须在文件的开场白之前指定文件的类型:Content-type: text/vnd.wap.wml注意:必须(至少)在 Content Type 和 XML 文件声明之前保留一段空行。如果省略了,将造成编译器错误。过多的空行同样也会造成错误。属性许多 WML 标记有一个或多个属性标记,有些是必须的,有些是可选择的。属性可以指定附加的信息,用来确定设备如何解释这些标签。WML 标记有以下两种使用
18、方式: content 必须使用成对的单引号或者双引号将属性值包含在内,每个属性之间使用空格分开。引用变量很像 UNIX 下的 Shell 变量,可以在格式化的文本、 URL、选择文本等等文本内容中使用变量。使用变量的语法如下:$(myvar)。WAP 建站进阶第 8 页 共 93 页特殊字符WML 的保留字符:“”、“”、“ ”和“ “ $ $连续空格 - 分号是字符标签的一个部分,不能省略。如果省略了,将可能会造成 WML 编译器错误。注意:与 HTML 不同的是,当在 URL 中使用来代替字符。WAP 建站进阶第 9 页 共 93 页基本格式和文件头wml 文件的一般格式:Some co
19、ntents.结构看上去和 HTML 文件很类似,对于每一个页面,在其文档开头必须指明以下的类型声明:千万注意字母的大小写。对于一个页面,其文件大小最好不要超过 1.2K。标签和 HTML 中的标签一样,用来表明这是一个 WML 的页面。它有一个可选的“xml:lang”属性来制定文档的语言,比如表示文档语言为中文。和 HTML 一样标签包含了该页面的相关信息。标签之间可以包含一个 标签和多个标签。相当于 HTML 中的 标签,指定该页面的访问控制信息。它用两个可选的属性,domain 用来指定域,默认值为当前域;path 用来指定路径,默认值为“/”,即根目录。由于单独使用,所以要用“/”结
20、尾,以后对于类似的情况不再赘述。和 HTML 中的类似,提供了该页面的 meta 信息。属性是必选的,包括以下三种情况:o name=“name“ UP.Link Server 忽略 meta 数据。 o http-equiv=“name“ UP.Link Server 将 meta 数据转为 HTTP 响应头(同 HTML) 。 o user-agent=“agent“ UP.Link Server 直接将 meta 数据传给手机设备。 content 属性也是必选的,其内容根据属性而定。scheme 属性目前尚不支持。forua 为可选属性,指定在该 wml 文件传到客户端之前, 标签是不
21、是被中间代理删除(因为传输的协议可能改变),默认值为 false。目前支持的 meta 数据: WAP 建站进阶第 10 页 共 93 页指定页面在手机内存缓存中的存储时间段,默认的为 30 天(除非内存耗尽)。在此期间,手机对于访问过的页面直接从缓存里调用。如果信息是对时间敏感的,可以用 max-age 指定页面在缓存里的生存期,最小单位是秒。如果指定为 0,则每次都需通过连接服务器来调用该页面 类似于普通浏览器的书签功能。当用户将一个卡片做了书签后,手机浏览器首先用一个标记记录该卡片。这个标记默认的是标签中的 title 属性(以后会讲到)。然后当用户选择了该书签以后,浏览器就会打开被记录
22、的 URL。但是因为在默认的情况下,手机会记录所有的页面。所以,一般被用来使手机不要记录当前的 URL,即。此外,如果要为书签指定不同于当前页面的 URL,用。一个页面可以包含多个卡片,每个卡片的内容可能不止一屏显示,注意页面、卡片和屏幕显示范围的关系。一个卡片用 和包含。可以包含以下可选的属性: id 属性用来指定卡片的名字,可用来在卡片间跳转,相当于在 HTML 中在页内跳转时用。 title 属性用来作为书签的标记,该属性一般不会显示在屏幕上。 newcontext 属性(默认值为 false)用来指示当跳转到本卡片时,手机是不是要清除以前保留的信息。包括变量、堆栈里的历史记录、重新设置
23、手机状态等。 ordered 属性(默认值是 true)表明该卡片里的内容是按固定的顺序显示,还是按用户的选择顺序来显示。这点和 HTML 不同,卡片里的内容可以按一定的顺序显示。默认的是按线性顺序显示,即按代码的顺序。但是,要注意的是,以下三个标签必须按以下顺序来写:、(这和以后要讲的“事件”有关) 。这样做是为了方便填表单,当 ordered设置为 true 时,如果一个表单的内容不能在一屏里显示完,就分成多屏显示;当 ordered 设置为false 时,手机可以显示一个概要卡片来总结有效的选项,用户可以从中选取表单选项来填写。 onXXXX 属性,类似于 HTML 标签中的 onXXX
24、X 属性,用来捕捉事件。当事件被触发时执行指定的操作(任务),在这里是转向某个 URL。显示文本在文本的显示上 WML 基本和 HTML 相同。文字段落包含在 和之间。 align 属性指定该段文字的对齐方式,默认的是 left。其他可选择 right 和 center;mode 属性指定当一行显示不下所有的文字时是否自动换行。默认的是自动换行 wrap。如果选 nowrap,则在一行中显示,浏览器会通过类似于水平滚动条的机制来显示所有文字。换行标签也一样为。这里先提一下,在表单中如果有多个 或者,其间不要用,否则会使手机浏览器认为是断点而把表单分页显示。文字的修饰标签有、 和,意义和 HTML 里的相同。表格的显示标签也和 HTML 相近,使用 、 和来显示。 的 title 属性用来给表格取个名字,columns 属性指定表的列数,不能为 0。可选的 align 属性和前面提到的一样是对齐方式。表格中可以包含文字和图片。请研究下面的例子程序: