HelloWorld!
DECK里面各个组成部分的具体解释在本教程的其他部分有说明。
WML字符集[TOP]
WML是XML的子集,继承了XML的字符集设置。WML文档缺省的字符集是UTF-8。
要显示中文,有两种办法。最简单的办法就是在文档头使用encoding,即把第一行改为:
然而令人丧气的是,这种方法有些手机和模拟器并不支持(将来会的),所以目前第2种方法更普遍:不改变字符集设置,但是在写中文的时候采用UNICODE代表中文字符,如:
代表:
通讯录
WML元素:标记(Tag)和属性[TOP]
WML的主要内容是文本,由于标记会降低与手持设备的通讯速度,所以WML标准里仅仅使用了很少一部分。用于表格和图像的的标记几乎都被排除了。
与XML一样,在WML语言中,所有元素都放在符号""中,并且包含一个开始标志、一个结束标志和一个内容标志,或者使用自身结束的控制标记。就象这样:
例如:
Helloworld!
或
例如:
和
WML同样支持在标志中标出属性。属性是标志的附加信息,与元素的内容不一样,它并不在屏幕上显示出来。属性通程遐元素的开始标志后指定。如上面最后一个例子。
由于WML是XML的一种应用,因此所有的WML标记和属性都是大小写敏感的(完全不同),而且所有的标记都必须正确地结束。WML要求属性的值必须放在双引号或单引号内。单引号可放在属性标志内或双引号内。字符亦可作为属性的值。
============
3、禁止对URL的缓存[TOP]
对于快速变化的内容,一般都会希望每次都得到最新的数据。所以这个时候要完全禁止对相关网页的缓存。方法有三种:
*设定Cache-Control:no-cache;
*设定最大缓存时间为0,Cache-Control:max-age=0;
*设定缓存到期日为一个早就过去的日期,Expires:Mon,1Jan199000:00:00GMT。
实际上,后两种不是最好的选择。首先这样会多占用终端的处理时间,因为当碰到这个DECK时,终端需要计算一下过期时间。其次,这样会多占用一些字节,而且在表达上也不够清楚。
三、验证(validation)和历史堆栈(HistoryStack)[TOP]
在HTTP1.1中对缓存进一步提出了验证的概念。验证的目的就是检验缓存项目是否在有效期内。由于历史堆栈的存在,WAP终端上的验证过程变得有点复杂。
WAP标准规定所有的WAP设备都至少要有可以容纳10-个项目的历史堆栈。当用户按下由定义的后退(backward)链接,URL被弹(pop)出。
一般情况下,所有的前行链接都会被验证,而后退链接则不会,因为它已经在cache里了。可是我们有时候还是希望当用户按下后退键时依然能够得到最新的数据。如果终端总是不予验证的话,那用户只好找到主菜单再重新进入那个页面。
幸运的是,我们用Cache-Control:must-revalidate就可以强迫用户终端在用户按back时对URL进行验证。当然,进行验证并不是说该页面会立刻重新读取,而是根据他是否过期来决定。如果没有过期,验证的结果仍然是显示缓存中的页面。
如果你需要每次back都重新读取页面,用Cache-Control:must-revalidate,no-cache可以实现。另外,把no-cache换成max-age=300就可以在back时对已缓存了300秒的页面进行刷新。
四、HTTP头与meta元素[TOP]
到这里,大家已经知道HTTP消息头的在WAP页面的作用了。不过要在WML文档里设置这些消息头,就要用到meta元素,它只能出现在WML文档段里。下面是几个消息头和它们的表示形式:
Expires:Mon,10Jan200000:00:00GMT
Cache-Control:max-age=300
Cache-Control:no-cache
当网关在WML文档中扫描到元素时,就会把它们转换成WSP等效的HTTP消息头,然后用户终端就可以据此对缓存进行控制了。