您的位置:寻梦网首页编程乐园Java天地小龙亭之JSP实践之旅
 

WAP技术入门


(作者:苏红超 2000年06月12日)

前言 


  国际互联网的新技术层出不穷,随着国内中国移动通信和中国联通先后推出WAP手机上网业务,这项新兴的技术也渐渐在国内展露头脚。其实早在1997年,由爱立信、诺基亚、摩托罗拉、 Phone.com等公司共同发起了WAP Forum,随后业界众多的公司纷纷加入,并于1998年4月提出了WAP标准第一版。WAP的全称是“Wireless Application Protocol”,目的是为了在手机以及其他无线设备上面传送和显示数据,以及提供各种电信服务。根据Global Mobile杂志的调查显示,目前至少有2亿个无线用户,而诺基亚公司指出在2005年用户数量更会超过10亿。面对如此广大的使用群,众多的大小公司纷纷抢滩WAP,国内的龙头网站诸如新浪、网易、搜狐等等纷纷联手中国电信推出了基于WAP技术的网站。相信随着WTO的临近,中国的互联网发展的将会越来越快,国内的WAP网站也会越来越多,以适应发展迅速的WAP业务。 

  作为一名Web网站开发人员,我们在这场席卷全球的无线网络革命中更应当快速跟进,互联网时代是一个不断淘汰的时代,只有随时掌握了最新的技术,才可以跟得上互联网飞一般的脚步。 


第一章 WAP技术的架构 


无线网络和我们目前熟悉的有线网络有很大不同: 

第一, 市场形态有所不同 

1、 无线上网设备从一开始就被设计成为易用型,即使没有使用过电脑的用户也可以很快的利用手机快速的在国际互联网上面找到自己想要的信息。 

2、 就市场大小而言,无线网络的用户成长速度是惊人的,在2001年之前全球 有超过5亿3千万移动用户,预计将在2004年突破10亿大关,如此的增 长速度令人对WAP的前景充满的信心。 

3、 有着广阔用户的无线网络,其被期望的值也是很高的,用户希望WAP能够像语音技术一样完善,并且要更加快捷、容易使用等等。 

4、 WAP手机并不是为在国际互联网上面专门冲浪而设计的,其目的是使得用户在移动的过程中可以方便快捷的存取到互联网上面资料。 


第二, 网络的环境不同 

1、 无线网络的带宽较小 

2、 无线网络相对目前的国际互联网有较多的等待延迟 

3、 无线网络的稳定性较差 

4、 无线接入设备的CPU、内存以及显示屏幕等等有限 

  针对以上的种种不同,WAP架构有着不同于普通WEB网站的地方,首先,WAP技术是基于目前的WEB架构之上的,并且延伸到无线网络环境,它使得业界所开发的产品能够具有无线网络独立性、设备平台无关性、以及相互操作性。WAP沿用了目前的WEB架构,从而使得目前投放到WEB的资金、设备、人力等等,都能够继续保留并且沿用。WAP不同指出在于她多出了一个被称之为WAPGateWay的东西,Gateway有何作用呢?以Internet设备来讲,Gateway 就类似于Proxy,当客户端要取得某个网站的叶面的时候,都是由Proxy代理来取得,再交给Client端。而WAP Gateway除了代理手机取得所需要的网站的WML文件之外,还要充当转换HTTP协议和WAP协议的角色,从而使得手机顺利取得资料。WAP Gateway大都由电信局或者ISP所设立,而一般的网站,只要在WEB Server中加入相关的MIME格式设定就好了,就可以直接让用户的手机访问到了。 

架构描述如下图: 

无线设备(手机、PDA)<---->(WAP协定)<---->WAP网关<--->(HTTP协定)<---->WEB服务器<---->数据库服务器 

  可以看到,WAP Gateway在无线网络数据传送的过程中充当的是一个中间人的角色,有了她,现在已经投到互联网上面的资金、设备、人力等等才不会被WAP网站所废弃,相反的是可以更好的利用现有的几乎所有的资源。 

  另外,像诺基亚等公司,将WAP网关和WEB服务器整合在了一起,被称之为“Web Application Server”,但是其总体架构和上图仍然是相同的,这里就不再重复了。 

接下来,我们来看看,为了让用户能够在手机上面访问到我们的网站,应当如何设置目前已经存在的Web Server。 

一、Internet Information Server(IIS) 

设定方式:打开〔开始〕――〉〔程序〕――〉〔WindowsNT4.0 Option Pack〕――〉 

〔Microsoft Internet Information Server〕――〉〔Internet服务管理员〕 

在打开的窗口里面选中Server,右键选择“属性”,增加如下的MIME格式: 

文件类型         MIME 

.WML       text/vnd.wap.wml 

.WMLC application/vnd.wap.wmlc 

.WMLS text/vnd.wap.wmlscript 

.WMLSC application/vnd.wap.wmlscriptc 

.WBMP image/vnd.wap.wbmp 

二、Personal Web Server4 

1.打开注册表编辑器,在HKEY_CLASSES_ROOT下面新建一个主键“.WML”; 

2.在HKEY_CLASSES_ROOT\.WML下面新建一个字符串,命名为“Content Type”,值为 

“text/vnd.wap.wml”; 

3.在HKEY_LOCAL_MACHINE\Software\CLASSES\MIME\Database\Content Type新建一个主键“text/vnd.wap.wml” 

4.在“text/vnd.wap.wml”主键下面新建一个字符串,名称“Extension”,值为“.WML”; 

5.依次重复以上2,3,4步骤,建立其他的MIME类型 

三、Linux(Apache) 

  使用管理员身份登入系统,在命令行,输入“ps -ef”命令兰看看当前的WWW服务是否正常, 然后使用VI来编辑“/etc/httpd/conf/srm.conf”文件,在AddType处增加如下类型: 

AddType text/vnd.wap.wml          .wml 

AddType application/vnd.wap.wmlc   .wmlc 

AddType text/vnd.wap.wmls         .wmlscript 

AddType application/vnd.wap.wmlsc   .wmlscriptc 

AddType image/vnd.wap.wbmp       .wbmp 


  保存后,将httpd重新启动即可。 

  这样设置过后,我们的Web Server就可以让手机访问得到了,当然,对于普通的HTML文件,手机是无法识别的,手机所要读取得文件类型从上面设置过程我们也可以猜测的 

出来,对了就是WML文件。在开始设计WML之前,我们先要来熟悉一下我们的WAP网站开发环境。



第二章 手机仿真开发环境


  所谓的手机仿真开发环境,也就是在普通的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、Floating-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就掌握了未来!