WAP技术入门(下)

(转载自赛迪网 2000/06/14)

(作者:苏红超)


第二章 手机仿真开发环境


  所谓的手机仿真开发环境,也就是在普通的PC机器上面使用各种模拟器来模拟手机的真实环境,从而方便WAP网站的开发,目前较为流行的模拟器主要有以下几个:

一、Nokia Toolkit 1.2/1.3

  可以从这个地址下载这个仿真开发环境:http://www.nokia.com目前这个WAP工具包的最高版本是1.3beta,诺基亚公司的这个开发包是采用JAVA编写的,所以你在安装之前首先要安装JRE2.2以上的版本才可以,JRE可以在SUN公司的主页上面下载(http://www.sun.com/)。诺基亚公司的这个开发工具是一个集成环境,可以方便的编译WML/WMLScript,并且有着详细的WML/WMLScript开发文档,用户可以通过地址栏来装载本地正在开发的WML文件,或者直接浏览互联网上面的WAP网站;但是Nokie Toolkit的运行条件比较苛刻,如果你的机器内存小于128兆,那么运行的速度将大打折扣,没有办法,JAVA编写的程序向来如此的,这也算是一个小小的遗憾吧。1。2的版本没有模拟实际型号的手机,而1.3版本就有模拟产品7110的仿真环境。

二、 Ericsson WapIDE4

  爱立信公司推出的一个WAP开发包,和诺基亚公司的开发包类似,爱立信公司的这个工具也是一个集成开发环境,比较方便,可以从这个地址下载:http://www.ericsson.com/wap 相对于诺基亚公司的WAP开发工具而言,爱立信公司的这个开发工具就较为简陋一些,并且它的开发文档很少,但是它的运行速度要比诺基亚的那个开发工具包要快的多,尤其是内存在64兆左右的机器。

三、 UP.SDK 4.0

  Phone.com公司的UP.SDK产品和上面的两种开发工具相比就是没有集成的IDE开发环境。这个开发工具可以在:http://www.phone.com/取得。

  从上面的说明来看,在这三个流行的WAP开发工具中,最具有吸引力的当然就是诺基亚公司的模拟仿真环境了,图形界面以及丰富的开发文档,的确不可多得。另外,还有其他的一些可以浏览WAP网站的软件,比如WinWAP,WAPMan等等,他们都是可以直接在PC机上面直接来浏览WAP网站的软件,值得一提的是,Opera公司推出的4.0版本的浏览器就已经支持直接在浏览器中访问WAP网站了,这个小巧的浏览器功能很是强劲。相信微软也不会坐视不等,可能在IE的后续版本中增加支持WML文件的功能。

  上面的WAP仿真开发环境的安装后的设置都比较简单,稍微懂一些英文的都会看得懂的。

 

第三章 WML/WMLScript设计


  现在我们来正式设计我们的WAP站点,正如目前的WEB网站是基于HTML语言一样,WAP网站是基于WML语言的,而WML语言其实是遵循目前的XML技术的,不过你如果不懂XML也不要紧的,还是可以很快入门的。

  WML和以往的HTML语言最大的不同是,WML语言的限制非常严格,表现在下面几个方面:

1、 WML中的所有标签、属性都是区分大小写的

2、 对于连续的空格,WML编译器将认为是一个

3、 所有标签的属性都需要使用双引号括起来

4、 所有的标签都必须封闭,对于不成对出现的标签,必须在“>”之前加上“/”,比如“<br/>”

  一定要注意上面的要点,否则很有可能出现手机无法浏览WML的情况出现。做到这一点,只是习惯的问题,主要是我们在HTML时代养成的“懒散”习惯不太好,都是IE的兼容性太好惹得祸,^_^

  在WML中,最基本的单位叫做“card”,他被用来向用户提供交互界面,这其实也是为了照顾到手机的屏幕比较小而设计的,并且手机的处理能力有限,不可能像我们经常使用的IE等浏览器那样一次将整个页面载入,在使用滚动条来察看内容,被设计用于手机浏览的WML文件,一个最大不能超过1.4K,所以我们才将大的叶面分割成为若干个card,来一次显示;多个“card”就组成了一个“Deck”,也即使一个“层面”,一个WML文件中只允许出现一个层面,正如HTML中只用一个“<html></html>”标签一样。

  另外还要记住,只要想显示一些文字到手机上面,就必须使用"<p></p>"标签将这一段文字括住。

不再罗嗦,下面我们就先看看一个简单的例子:HelloWorld

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"

"http://www.wapforum.org/DTD/wml1_1.1.xml">

<wml>

<card id="hello" title="WAP">

   <p>Hello! World!</p>

 <!-- 注释信息 - ->

</card>

</wml>

  将这个文件存盘,在诺基亚仿真浏览器中浏览就可以看到你向WAP世界的问候语了。我们可以看到,在WAP中的注释方法同HTML中是一样的。要注意的是每一个card的id属性是不允许省略的,并且在默认的情况下手机显示的是这个“层面”的第一个“卡片”,当然我们也可以直接指定要浏览的特定“卡片”,后面我们会提到。

  怎么样,看看这第一个例子,觉得WML并不是很难吧,要比HTML还要简单呢,只是它的限制稍微多一些而已,接下来我们来看看WML中其他有用的标签:

标签:<wml></wml>

描述:定义“层面”的开始和结束,一个WML文件只允

许一个层面

标签:<card></card>

描述:定义“卡片”的开始和结束,多个“卡片”组成一

个“层面”

id属性必须要给出,用以区分不同的“卡片”

title属性指明提示信息

标签:<p></p>

描述:用来显示文字的标签

标签:<img src="" alt="" localsrc="" align="left" height=""

width="" vspace="" hspace="">

描述:

alt属性用来指定图片没有正常显示时的提示信息

src属性指定图片的路径

以上两个属性是必须的

其他的属性类似于HTML语言

标签:<do type="" label="" name="" option=""></do>

描述:

执行某些动作,其中属性type是必须的。

type值         触发事件

accept         触发确认

delete     触发删除

help      触发帮助 

options     触发选择

prev      返回上一页

reset      清除目前状态

标签:<go href=""/>

描述:当用户点击了do标签之后,就可以使用这个标签

连接到其他的“卡片”或“层面”

要指定它的“href”属性。

标签:<timer value="">

描述:设定计时器的时间,以0.1秒为单位,同一个“卡

片”只能有一个timer标签。到达特定时间后会触

发ontimer事件

标签:<a href=""> </a>

描述:类似HTML中的同样标签

标签:<go method="" href=""></go>

描述:类似于HTML中的form标签,method属性的

值:post/get

标签:<postfield name="" value=""/>

描述:设定变量的名字和值,这些值可以被服务器端的

ASP,JSP等程序捕获。

标签:<input type="text/password" name="" value=""/>

描述:提供输入的表单,类似于HTML

$(name)

描述:获取变量的值

  以上就是在WML中经常用到的标签,当然还有很多标签,你可以在Nokia Toolkit中找到详尽的语法,这里就不再重复了。要注意的是,在WML中使用的图片格式不同于平常的图片,而是要使用WBMP格式的图片,这种图片是黑白两色的专为手机提供的图片格式,你可以下载Photoshop的WBMP插件,用来编辑WBMP格式的图片,或者网络上面有很多的工具可以转换其他格式的图片到WBMP格式。

  接下来我们要介绍一下运行在手机上面的script程序:WMLScript WMLScript语言和JavaScript语言非常相似,不同之处在于WMLScript语言必须放在一个WMLS的文件里面,并不像javascript那样可以镶嵌在HTML中,并且WMLS文件的大小也不要超过1.4K。

语法规则如下:

1、 每一行程序均以分号结尾

2、 注释方法:“//”或者“/* */”

3、 使用关键字“var”来声明变量

  怎么样?从上面我们就可看出来,WMLScript语言和javascript语言是多么的

相似,WMLScript的变量类型有:Boolean、Interger、Floatin

g-point、String、Invalid

  WMLScript的流程控制语言和javascript的相同,实例如下:

// if-else

if (x == y){

  x = x * 3.25;

}else{

  x = 0;

}

// for loop

for (var counter = 1; counter < 500; counter ++){

  var i = counter * 1.05;

  somefunction(i);

};

// while loop

while (i > j){

  i--;

};

// break

for (var counter = 1; counter < 500; counter ++){

  var i = counter * 1.05;

  if (counter == 250) break;

  somefunction(i);

};

//continue

for (var counter = -100; counter < 100; counter ++){

  if (counter == 0) continue;

  var x = 350/counter;

};

函数:

WMLScript的函数使用方法如下:

extern function identifier(FormatParameterList) Block ;

extern是说明函数是放在另外一个文件当中的。如下:

function RunTime(distance, speed){

  var time = distance / speed;

  return time;

};

  此例出入distance以及speed两个参数,然后返回time的值。

  如果调用的是WMLScript的內建函数,就必须加上这个函数所属的类名,例如调用

String类的length()函数,使用:

var a = String.length('just a test');

內建函数

WMLScript有六大內建函数:

Lang:包含数据形态、绝对值、随机数等。

Float:浮点数处理。

String:字符串长度(length)、字符位置(charAt)等字串处理。

URL:getReferer、getHost。

WMLBrowser:go、prev、next、refresh等浏览处理。

Dialogs:弹出(prompt、confirm、alert)等对话框。

  首先我们先建立一个WML文件,WMLScriptExample.wml,內容如下:

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"

"http://www.wapforum.org/DTD/wml_1.1.xml">

<wml>

<card id="stuid" title="stuid:">

<do type="accept" label="Results">

  <go href="WMLScriptExample.wmls#checkid($(stuid))"/>

</do>

<p>

  Enter Stu_ID: <input type="text" name="stuid"/>

</p>

</card>

<card id="Results" title="Results:">

<p>

  You entered:<br/>

  Stu_ID: $(stuid)<br/>

</p>

</card>

</wml>

让用户输入学号,go的href连接到另外一个.wmls文件,调用checkid函数。再建立一个WMLScriptExample.wmls文件,內容如下:

extern function checkid(stuid){

  if (String.length(stuid) != 8){

    WMLBrowser.setVar("stuid", "Error: String must be 8 digits

long.");

  }

  WMLBrowser.go("WMLScriptExample.wml#Results");

};

  这个WMLScript就是检查stuid字串长度是否为8,并且返回结果。WMLBrowser.setVar()设定变量的值,WMLBrowser.go()將手机定位到下一个WML文件,也就是WMLScriptExample.wml的Results卡片。

  怎么样?WMLScript是不是很类似于javascript?简直就是一模一样,就是多了和WML文件相配合的功能而已。

  最后需要指出的是,现在的大多数WAP手机(Nokia7110、爱立信R320S等等)都是使用UTF-8编码的,也就是采用Uniecode来编码,这样,如果我们直接在WML/WMLScript中使用中文的话,将会产生乱码,手机用户无

法识别,所以我们在输出中文之前,要对中文进行Uniecode的编码,这个工作就要服务器端的程序来完成了,比如我们使用ASP来做这项工作,可以调用这个函数实现转换,其他语言的实现方法类似:

Function c2u(myText)

  For i = 1 to Len(myText) ' 对每一个字节进行处理

   c = Mid(myText, i, 1)

    c2u = c2u & "&#x" & Hex(AscW(c)) & ";"

    ' 将传回的Unicode转换为十六进制值

  next

End Function

实现的例子如下:(chinese.asp)

<% Response.ContentType="text/vnd.wap.wml;charset=UTF-8"

%>

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"

"http://www.wapforum.org/DTD/wml_1.1.xml">

<%

Function c2u(myText)

  For i = 1 to Len(myText)

    c = Mid(myText, i, 1)

    c2u = c2u & "&#x" & Hex(AscW(c)) & ";"

  next

End Function

%>

<wml>

<card id="card1" title="UTF8">

  <p>

    <%=c2u("IT的事找赛迪网!!")%><br/>

  </p>

</card>

</wml>

  在诺基亚的仿真手机中浏览这个ASP文件,就可以看到中文了!

 

结束语


  我们通过上面的介绍,也可以大致了解一下WAP技术的来龙去脉了,相信通过你自己的不断实践,一定能够驾驭它的。其实WML和HTML一样属于一个静态的页面,要想真正建设吸引用户的WAP站点,不光要仅仅依靠WML本身,还要配合各种运行在服务器端的程序,比如ASP、PHP、JSP、CGI等等来实现丰富多彩的动态WAP网站,这就是后话了,暂且不谈。随着国内的WAP技术大环境的越来越完善,将会有更多的网站、ISP等投入到这场抢夺市场的战斗中来,相信WAP技术的可移动性和简易操作性将会吸引越来越多的用户投身到广阔的无线网络中,对于我们WEB开发人员来讲,掌握了WAP就掌握了未来!