肖波 张翠芳
1.西南交通大学峨眉分校,四川 峨眉 614202;
2.西南交通大学计算机与通信工程学院,四川 成都 610031)
摘 要:在无线应用协议(WAP)技术的无线应用环境部分,本文提出一种嵌入移动终端的微浏览器的设计方案。在设计中按功能划分为接口、执行、解析、显示4个部分,在实现中利用封装技术,使其易于移植到移动终端内。将实现了的微浏览器嵌入到实验所用的移动终端,实验表明,该微浏览器能成功地解析和显示无线应用协议网关处理过的网页。
关键词:无线应用协议;微浏览器;无线应用环境;无线标记语言;设计
一、引言
微浏览器(Micro-browser) 嵌入在移动终端内,能够将网页内容解析和显示给移动终端用户,是无线方式接入互联网的关键技术之一。由于移动终端主频、计算能力都比较小,存储器容量、显示屏和输入设备大小也受到限制[3],因此要求微浏览器在设计和实现时必须紧密、清晰。微浏览器在无线互联中得到了广泛应用,其中著名的有日本的I-mode技术和WAP(Wireless Application Protocol)论坛公布的无线应用协议技术。在无线应用协议技术中,无线应用协议是通过改写网络的通信协议,使该协议与现有网络通信协议兼容,并且更适合于无线应用这一特殊环境而形成的一种协议。本文的微浏览器设计方案,是作者所参与的项目组根据WAP论坛公布的微浏览器规范进行设计并实现的。
二、微浏览器在无线应用协议技术结构中的位置
在无线应用协议技术中,微浏览器是无线应用环境(Wireless Application Environment,简写为WAE)的一部分,处于WAE的上层。WAP技术就是使用户能将应用WAP协议软件的移动终端连接到一个与Internet相连的WAP网关,从而如同使用桌面终端的用户一样浏览网上的信息。而WAE则是WAP协议栈(WAP Protocol Stack,简写为WAPS)的最高层协议,它规划在整个WAP标准中,其目的是建立一个交互环境,使网络运营商和网络提供商能够有一个在无线平台上提供服务的有效的方法。WAE定义了标准的内容格式,规定WAP移动终端使用(Wireless Markup Language,简记为WML)无线标记语言显示各种文字图像数据。WML是一种基于扩展标记语言(Extension Markup Language,简记为XML)的标记语言,主要用于标记和说明WAP移动终端收发的Internet信息和用户接口。在WAP中,一个WML文档称为一个“Deck”,一个“Deck”内包含若干个“Card”,“Card”是用户浏览和交互的基本单元。微浏览器在WAP技术中就是实现 WML用户代理 (WML User Agent) 功能,是WAE的一个重要组件,其实现技术是WAE实现中的核心技术。
三、微浏览器的规范、功能和特点
微浏览器的规范定义了一个适合于移动终端的功能强大的用户接口模型。这个规范定义了移动终端如何解释WML和WMLScript,并且显示给用户。用户通过上移键和下移键而不是鼠标在各个卡之间来回进行导航。为了保持与标准浏览器的一致,微浏览器还提供了各种导航功能如Back、Home、书签等。
基于这些详尽而明确的规范,微浏览器应完成的主要功能是显示WML叠并且支持WML语言的事件处理,使用户能在卡和叠间导航。
由于移动终端硬件的特点和WAP网关工作的特性,使得WML浏览器无论是在结构方面还是在功能方面,都具有自己独特之处。一方面,由于移动终端的内存资源有限,要求微浏览器在闪存(Flash Memory)和RAM的使用上应尽量节省。并且,微浏览器处理的是经过WAP网关编码的WML文件,因为WAP网关已经在词法、变量引用、事件合法性等很多方面作了判断和工作[1]。另一方面,浏览器工作在WAP协议栈和用户界面之间,由于移动终端硬软件实现差别很大,要求微浏览器将与移动终端操作系统有关的东西封装起来,实现与操作系统和硬件无关。
四、微浏览器设计方案
1.微浏览器总体设计方案
从总体结构上,将整个微浏览器划分为4个大部分:Interface(接口)部分、Executive(执行)部分、Parser(解析)部分和View(显示)部分。其设计原理如图1所示,其设计实现如图2所示。
这种划分实际上是按照微浏览处理的功能进行的,各部分完成特定的功能,并向其它相关部分的接口传递必要的信息。各部分的主要功能和模块设计如下:
(1) Interface部分是微浏览器的入口,在这一部分通过移动终端人机接口的输入控制得到用户的按键事件,针对这一事件设计一个与按键有关的输入模块,它可以是一个线程,也可以是一个不断循环的程序段,还可以利用中断实现。利用这个模块将系统的输入部分封装起来。同时,为Interface部分设计一个执行体模块,在该模块中设置一个状态机,根据不同的状态,对事件进行分类和分派,把接收到的按键消息发给不同的模块处理。另外,设计运行模块,以实现Do菜单事件,它利用Parser部分生成的Do表,在用户按下某一键时激活Do菜单,出现WML作者在当前卡中定义的Do任务,用户选定Do后,发相应消息给Executive完成任务处理。在实现上述主要功能的同时,Interface部分还要完成界面的初始化,实现系统菜单。
(2) Executive部分处理WML文本中的事件(即在叠/卡中定义的事件)。Interface部分接收到的与WML文本有关的事件触发信息都转给Executive部分,由它完成与事件绑定的节点的查找和相关事件处理函数的执行。根据Executive部分必须完成的功能要求,设计事件处理模块,确定在Parser部分生成的事件表的事件号,根据事件号查找事件表中的相关表项;同时,设计5种事件处理函数,实现前进、后退、刷新、输入、选择5种事件的处理。而这五种事件处理函数为了完成事件处理,都需调用一个任务微函数模块,该模块中定义了一系列的原子函数。其设计原理是根据规范中的卡间导航参考运行步骤规定,可以将事件处理函数分解为多个原子函数,通过原子函数的不同组合,完成不同的事件处理。
(3) Parser部分是整个用户代理的基础,它将接收到的编码后的二进制文本解析成为一棵以元素为节点的Deck树。并生成其它部分运行时需要用到的数据结构。由此将解析部分设计为解析执行模块和解析树遍历模块。在解析执行模块中完成将WAP网关中取回的WML文本进行处理,设计解析树的建立函数和查询函数,并对外提供统一封装后的接口。在解析树的遍历模块实现生成和处理事件表、变量表、Do表,并对内存管理。
(4)View部分根据Deck树完成对WML文本显示格式的解释和显示。接收到上下键的按键信息时改变虚窗口,浏览整个页面。接收到确认键的按键信息时,根据当前的显示内容确定该触发的事件,将此事件反馈给Executive。当事件完成时,如果有变量被改变,Executive会通知View部分重显屏幕。由此将View部分设计为初始化模块、浏览处理模块。在View部分的初始化模块中分析由Parser部分生成的树,建立事件显示表和初始的显示区。浏览处理模块则完成上移、下移键按下时的处理,改变显示区内容和反显的事件。当按上移键时,根据新的坐标显示新的内容;当按下移键时,根据新的显示内容决定当前应该聚焦的事件,将与该事件有关的显示内容(文本或是图片)反显。
2.微浏览器典型处理流程
在上述的功能划分和消息传递机制下,一次微浏览器的典型的处理流程是:
(1)执行微浏览器程序,Interface获得执行权,此时,如果浏览器设置了HomePage,Interface向Executive发出信息,取回HomePage并分析、显示。如果浏览器没有设置HomePage,Interface进入空等状态,等待用户输入需访问的URL;
(2)Executive调用WAPP提供的接口函数,取得指定的Deck,交由Parser完成解析,生成树和表;
(3)Parser生成的树提交给View部分显示,执行权重交给Interface,系统进入等待用户输入状态;
(4)Interface接收到用户输入,对按键信息分类,一部分按键被截获,激活系统菜单;一部分被发送给View,改变浏览区,或者激活事件,事件号发给Executive,完成事件处理;
(5)可能发生的事件分为2类,一类要获取另外的Deck,一类只要改变当前微浏览器的上下文。当发生第二类事件时,Executive 部分完成事件处理并告知Interface要不要刷新显示区,Interface调用View部分完成显示区处理。第二类事件发生时,Executive 取回Deck,分析、建树,通过Interface告知View部分重新分析树,建立初始显示区。事件完成后进入等待用户按键状态;
(6)用户激活系统菜单,选择“退出”,释放申请的内存块,用户代理结束。
3.微浏览器设计和实现中的技术难点及其解决办法
(1)WML的解码
WML文本在传送之前要按照规范所述进行编码,减小容量以适应窄带宽的传输。编码时对所有的元素和属性及部分属性值进行编码。在编码时用几个特殊的标记表明变量引用和字符串的开始。编码之后的文本是上下文有关的,除了全局标记之外,在不同状态下遇到相同的标记对应于不同的解释。经过编码后,WML文本表示成特殊结构的二进制流。因为编码的方法和编码后文件的格式都严格遵守编码规范,所以解码的工作相当清晰。在Deck树建立和信息引用的时候,将当前信息的8位值与编码比较,由此确定对当前信息的操作及以后几个字节的操作。
(2)Deck树的生成
WML文本的一个Deck可以表示为一棵树,树中包含了标签和标签属性的信息,在对文本进行分析生成树时,使用递归下降分析。因为WML文本格式很固定,不会有回溯,并且没有太多的嵌套。在生成Deck树时采用递归下降分析法,思路清晰,实现容易。
(3)实现整块内存使用策略
先根据WML文本的大小,一次性向操作系统申请一块空间,保留此空间的起始指针和大小,由微浏览器的程序对这一块内存进行分配和管理。这样在操作系统看来,Deck树是一个完整的块,而块内则是由指针相连而形成的一棵树。当用户转到其他的Deck,要丢弃当前Deck时可以一次性在回收整个块。这一方法的优点是:一方面使用指针进行信息的复用,避免对重复信息生成另外的一个拷贝带来的内存浪费,最大程度地复用了内存;另一方面,在内存复用过程中,要进行内存回收,由于多个指针指向同一块内存,有可能会出现指针悬挂的情况,但现在采用了一次性分配的方法,指针悬挂问题就完全可以得到避免。
(4)封装功能的实现
在整个微浏览器软件的设计实现过程中,虽然用的是Standard C,但把处理每一个数据结构的模块作为一个对象来看待,建立完善和统一的接口,同时注意到在其他的模块中避免对此模块的数据的直接使用。这样,在没有面向对象编译器的支持下实现了部分的面向对象思想,虽然只有一个封装的功能,但是程序在可维护性、可剪裁性、可重用性上有了很大的改善。
五、结束语
该微浏览器的设计与实现严格按照规范进行,在设计和实现中充分考虑了与移动终端硬件的无关性、与操作系统的无关性,能够方便地嵌入到移动终端里面。将所实现的微浏览器成功移植到实验用的移动终端康佳7218型手机上,实验证明,微浏览器实现了WML用户代理功能,能够正确地解析和显示经过WAP网关处理过的网页。
摘自《北极星电力电信网》
|