




已阅读5页,还剩73页未读, 继续免费阅读
(计算机科学与技术专业论文)嵌入式浏览器若干关键技术的设计与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
塑婆奎兰堡主兰篁坚一一壁垒茎型堕堡董三羞壁垫查塑堡生兰壅里 室】! ! ! ! ! ! 旦 摘要 随着信息技术和网络技术的快速发展,支持网络的嵌入式系统已广泛应用于信 息家电和通信等领域,嵌入式浏览器已成为嵌入式系统的基本支撑软件,嵌入式浏览 器也拥有广阔的多样化的市场前景。所以,研究嵌入式浏览器技术,自主开发嵌入 式浏览器,有着十分重要的意义。 本文首先介绍了嵌入式系统的概念。对其特点、历史和现状的分析,显示出嵌 入式系统发展和应用的强劲势头和广阔前景;进而介绍了嵌入式系统中举足轻重的 组成部分嵌入式浏览器的特点,发展历史和现状,并列举了主流嵌入式浏览器 的实例。而后在总结现有系统的问题和可完善之处的基础上,提出本文的原型系统 的构思和特点。 其次,本文介绍了文中原型系统的总体设计结构;然后,又具体介绍了系统的 软硬件运行环境_ x h y b e r 2 5 5 b ( i m e lx s c a l ep x a 2 5 5 ) 开发板和q “e m b e d d e d 。 再次,本文着重对浏览器引擎模块和用户界面g u i 模块进行了模块描述。进而, 对浏览器引擎中d o m 规范,h 1 m l ,x h t m l ,网页脚本语言j a v a s c r i p t ,j a v a a p p l e t , w m l 等的解析和实现过程做了详尽的说明和叙述,并提出了一些独特的数据结构 的算法。此外,将浏览器对v l w l 的扩展做了说明和示范。 最后,本文对系统在特定的软硬件环境下的运行情况进行了展示,并对运行结 果进行了分析和说明。 总而言之,本系统在解析和显示网络页面的全面性方面,相较其他嵌入式浏览 器有明显的提高:系统可在编译阶段和运行阶段分别对浏览器进行动态配置,动态 裁减解析模块,工具栏、地址栏、查找栏,以及配置c 0 0 k i e s 策略和代理等:系统 采用了文档视图结构机制。有良好的可移植性;此外,系统在可伸缩性、总体性能 和页面显示优化等方面有一定的创新和加强。 关键词:嵌入式浏览器,嵌入式系统,页面解析,页面显示 浙江大学硕士学位论文嵌入式浏览器若干关键技术的设计与实现宋飞2 0 0 6 年5 月 a b s t r a c t w 汕t h er 印i dd e v e l o p m e n to fi n f o 咖a t i o na 1 1 di n t e m e tt e c h n o l o g y ,e m b e d d e d s y s t e ms u p p o n i n gn e t 、v o r k 印p l i c a t i o n sh 鹊b e e na l r e a d yw i d e l yu s e di nt h ei n f o l m a t i o n a p p l i 绷c ea i l dc o m m 蚰i c a t i o nf i e l d s e m b e d d e db r o w s e rh a sa l r c a d yb e e nt h eb a s i c s o r w a r eo fe m b e d d e ds y s t e m b e c a u s eo fj t sl a 唱ea i l dm u l t i p l e xm a r k e t ,i ti ss i g n i f i c a n t f o ru st o s t u d yt h ee m b e d d e dw e bb r o w s i n gt e c h n x 塑垩奎兰堡主兰垡堡苎壁垒茎型丝墨董王茎塑垫查竺丝生量窒翌塞31 1 塑生! 星 1 2 嵌入式浏览器简介 1 2 1 浏览器概述 网络覆盖的广泛普及,网络技术的快速发展,使网络成为了当代计算机系统中 不可缺少的重要组成部分。为了能充分利用网络资源,产生了浏览器( b r o w s e r ) 。 浏览器功能强大、界面友好、操作简单,用户通过它在浩瀚的网络世界里自在邀游。 浏览器是一种应用软件。通过浏览器可以在w w w 上搜寻、查着各种信息。所有这 些信息都是以网页的形式存在的。从技术上讲,浏览器是一个客户端程序。它用h t t p ( h y p e n e x tt r 孤s f e rp r o t o c 0 1 ) 协议,通过i n t e m e t 向w e bs e e r s 发送浏览器用户的请 求。1 9 9 2 年,m o s a i c 出现,它是第一个图形用户界面的浏览器。m o s a i c 是早期浏览 器的一个商业版本,后来,n e t s c a p e n a v i g a t o r 采用了许多它的用户界面的特性。 n e t s c a p e n a v 培a t o r 是第一个得到广泛使用的浏览器。随后,m i c m s o 财匡出了他们自 己的浏览器,m i c r o s o ni n t e m e te x p l o r e r 。n e t s c 印en a v i g 砷3 r 和m i c r o s o f ii n t e m e t e x p i o r e r 相互竞争,成为了两个最流行的浏览器。 图形浏览器( 如n e t s c 印e n a v i g a t o r 和m i c r o s o f t i n t e m e t e x p l o r e i ) 既可以浏览图 形,又可以浏览文本。大部分的现代浏览器还能提供多媒体信息,包括声音、图像。 1 2 2 嵌入式浏览器概述 目前嵌入式浏览器还没有一个完整、准确、严格的定义,从其功能方面分析, 可以从以下两个方面定义规则。第一,与桌面浏览器一样,它必须是一个网络信息 浏览器,必须支持h r r p 或者、v a p 【8 】等传输协议,支持h t m l 【9 】、j a v a s c r i p t 1 1 ,1 2 】 和w m l 1 3 等页面语言,可以完成信息浏览的功能;第二,嵌入式浏览器必须适合 在嵌入式设备中运行,必须能够根据嵌入式设备的需要而方便地进行裁减和修改。 嵌入式系统中只有很有限的空间,要优化嵌入式浏览器的代码,保证系统占用 存储空间,运行时内存占用都很低。并保证比较高的运行速度、运行效率。 浙江大学硕士学位论文嵌入式浏览器若干关键技术的设计与实现宋飞2 0 0 6 年5 月 第二章系统总体结构和运行环境2 1 系统总体结构 首先,图2 1 描述了嵌入式浏览器的总体结构,具体描述请见第三章。圈彤用户珏面gm 1 w 【p 盼议蘸i 面瑾一i 拨宴埋罔卡驱动plip p p 协议 图2 1 嵌入式浏览器系统总体结构 图2 2 ,2 3 ,2 4 对上述模块进行了进一步的分解,图2 2 是协议实现模块的分 解,具体描述详见3 1 节: 图2 2i os l a v e s 实现h t m l 或f t p 协议子模块分解 塑婆查堂堡主兰竺堡奎壁垒苎塑堕登董王鲞壁垫查塑堡兰兰塞翌 查王! ! 堕生! 星 2 2 系统运行环境 2 2 1 硬件环境 使用x - h y p e r 2 5 5 b ( i n t e lx s c a l ep x a 2 5 5 ) 开发板,其性能参数为:3 2 位4 0 0 m 主 频的x s c a l ep x a 2 5 5 处理器、6 4 ms d r a m 的主存、3 2 mf l a s hm e m o r y 储存器、 e t l l e m e t1 0 b a s e t 网络、t f t6 4 ”显示屏等,运行于l i n u x 系统。图2 5 就是本系统 使用的开发板。 2 2 2 软件环境 图2 5x - h y p e r 2 5 5 b 开发板 系统的软件环境是基于q t e m b e d d e d ,如果需要运行j a v aa p p l e t ,还需要在板 上编译j a v a 虚拟机( 自主研发的z j uj v m ) 。同时,针对现有的需求和开发环境, 系统开发参考了开源浏览器k o n q u e r o r 的一部分功能实现。 q t q t 是一个跨平台的图形用户界面库,由挪威t r o l i t e c h 公司出品,目前包括q t , 基于f r a m e b u 仃c r 的q te m b e d d e d ,快速开发工具q td e s i g i l e r ,国际化工具q tl i n g u i s t 等。部分q t 支持所有u n x 系统,当然也包括l i n u x ,还支持w i n n t w i n 2 k ,w i n 9 5 9 8 塑垩查堂堡主兰堡垒苎壁垒茎型苎墨董王羞壁垫查盟堡生量窒墨室王! ! ! ! 兰! 旦 平台。 q t 的第一个商业版本于1 9 9 5 年由t r o l l t e c h 公司推出。 基本上,q t 同xw i n d o w 上的m o t i f ,o p e n w i n ,g t k 等图形界面库和 w i n d o w s 平台上的m f c ,o w l ,v c l ,a t l 是同类型的东西,但是q t 具有下列 优点: 优良的跨平台特性 q t 支持下列操作系统:m i c r o s o f tw j n d o w s9 5 9 8 ,m j c m s o f tw i n d o w sn t , l i n u x ,s 0 1 a r j s , s u n o s ,h p u x ,d i g i t a lu n i x ( o s f l ,t h 6 4 ) , i r i x ,f r e e b s d , b s d o s , s c o , a i x , o s 3 9 0 ,q n x 等等。 面向对象 q t 的良好封装机制使得q t 的模块化程度非常高,可重用性较好,对于用户开 发来说是非常方便的。q t 提供了一种称为s i 驴a l “s l o t s 的安全类型来替代 c a l l b a c k ,这使得各个元件之间的协同工作变得十分简单。 丰富的a p l 支持2 d 3 d 图形渲染,支持o p e n g l 订l 支持 但是真正使得q t 在自由软件界的众多w i d g e t s( 如l e s s t i f ,g t k ,e z w g l , x f o 咖s ,n t k 等等) 中脱颖而出的还是基于q t 的重量级软件k d e 。 q t l l m b e d d 甜 q 证m b e d d e d 是著名的q t 库开发商1 b l l t e c h 公司开发的面向嵌入式系统的q t 版本。许多基于q t 的xw i n d o w 程序可以非常方便地移植到q t e m b e d d e d 上,与 x l l 版本的q t 在最大程度上接口兼容,延续了在x 上的强大功能,在底层彻底摒 弃了x1 i b ,仅采用触m e b u 仃e r 作为底层图形接口。丰富的控件资源和较好的可移 植性是q t e m b e d d e d 最为优秀的一方面,使用x 下的开发工具q td e s i g n e r 可以直 接开发基于q 征m b e d d e d 的u i ( 用户操作接口) 界面。 q t e m b e d d e d 的移植与应用方式如下: 针对q t e m b e d d e d 的实现特点,移植该嵌入式g u i 系统一般分为以下几个步骤: 设计硬件开发平台,并移植l i n u x 操作系统;采用静态链接进l i n u x 内核的方 塑垩查兰堡主兰垒笙兰壁垒茎型鉴塑董王羞堡茎查竺堡生量塞翌鲞31 1 塑芏! 星 式,根据该平台显示设备的显示能力,开发船n e b u 彘r 驱动程序;开发针对该平 台的鼠标类设备驱动程序,一般为触摸屏或u s b 鼠标;开发针对该平台的键盘类 设备驱动程序,一般为板载按钮或u s b 键盘( 该部分可选) ;根据舳m e b u 腩r 驱 动程序接口,选择并修改q t ,e m b c d d c d 中的q l i n u x f b s c r e e n 和q g 仅r a s t e r 类;根 据鼠标类设备驱动程序,实现该类设备在q t e m b e d d e d 中的操作接口;根据键盘 类设备驱动程序,实现该类设备在q i 愚m b e d d e d 中的操作接口( 该部分可选) ; 根据需要选择q 扼m b e d d e d 的配置选项,交叉编译q t ,e m b e d d e d 的动态库;交叉 编译q 垤m b e d d e d 中的e x a r n p l e 测试程序,在目标平台上运行测试。 k o n q u e m r k o n q u e r o r 浏览器是k d e 的核心,它同时兼有浏览本地硬盘的文件内容和互联 网w e b 浏览的功能。 k o n q u e m r 的指标主要如下: a ) h t m l 4 0 标准。 b ) c s s1 o 标准以及部分c s s 2 o 的支持。 c ) j a v a s c r p t l 5 支持。 d ) 兼容j d k l - 2 的j a v a 支持( 需外部j a v a 虚拟机支持) 。 e ) n e t s c 印e 的各种插件支持( 需要l e s s t i f 、0 p e nm o t i f 的支持) 。 f ) t l s l x 、s s l v 3s s l v 2 支持( 需要使用o p e n s s l ) 。内建表单自动补全。 曲更多的图像格式支持。 本文在参考k o n q u e r o r 现有功能的基础上,对h 州l 和j a v a s 翻p t 进行了一定 程度的借鉴和修改;并在开发版上加载编译自主开发的j a v a 虚拟机z j uj v m ,针 对该虚拟机,实现了一个解析和显示j a v a a p p l e t 的独立模块;增加了对x h l m l , w m l 的解析;并提供了对v r m l 的扩展支持。 塑坚查竺堡主鲨堕主壁垒苎型塑墨董王耋堡苎查盟堡生皇塞型室31 堕兰! 星 第三章模块介绍 3 1i ,o s 姗s 实现町p 和f t p 协议 i 0s l a v e s 就是从网络上获取文件或目录的进程,在本嵌入式浏览器中采用一 种进程间的通信机制“管道0 i p e ) 机制”实现主进程和其他i ,os l a v e s 予进程之间的 通信,从而完成网络的h 订p 、f t p 协议等的连接、数据传输、c 0 0 k i e s 和c a c h e 的 底层实现。 ( 1 ) 同步访问模块:主要完成提供文件下载、上传以及临时文件的创建或删除 等简单的同步访问功能。这是一种阻塞调用方式。当下载网络上的数据,在数据没有 完全加载之前,当前进程将会被阻塞。数据流完全加载之后,网页才可以再次渲染或刷 新。 c 2 ) 异步访问予模块:实现网页访问这样的异步工作的,一旦某个j o b 被启动 之后,它将运行在后台,并且不会阻塞父进程。h t t p 、f t p 等协议是由一些独立的进 程来实现的。 ( 3 ) c a c h e 实现:当加载页面的时候,对于样式单、脚本和图形的对象,如果在 缓冲区中就不必从w e b 上重新获取。包括检查是否存在c a c h e 、写入c a c h e 、读取 c a c h e 、更新日期、清除等操作。每个需要c a c h e 的页面包含该页面中的所有的c a c h e 文件,其数据有: l o n gi d ;,用唯一的i d 标志该页面中的c a c h e 文件 q i n t d i c td i c t ;,将所有的c a c h e 文件名以网址开头命名,并以字典序进行排列 并归类,便于查找q “s td e l i v e r y ;,被读取的c a c h e 文件链表 q l i s te x p i r e q u e u e ;,c a c h e 文件的过期链表,在每次读取c a c h e 后更新一定时 候自动删除 b o o ld e l i v e r y a c t i v e ;当前c a c h e 项是否正在被读取 塑垩查堂堡主兰堡垒奎 堂垒;羁l | 蕈妻萋:霹囊霎i 蓄;妻喜| i g 目藿j 目雾! 墓羹;垂g 主蓁i 萋萎翼囊 耋霆冀矍惶娈;霉圳影霎i i f 鎏薰篓;垡萤蠢落玲豁型孺m 馏! 蕊鋈篓雾篇黼茹裂 冬益谍毖为雾;竺虹划勾= 鳓舞; 薹暮弱毗篓裔s 誊始怕中每个? 娶篓,引,整龠 滴h 囊崩越咭潜懿霞菰喾; 薹截 地被采用,高效解析沮。文档也变得越来越重要,尤其 是对于那些要处理大量数据的应用程序。不正确的解析会导致过度的内存消耗和过 长的处理时间,从而有损于应用程序的可伸缩性,因此,选择正确的v 几解析方 法至关重要。 目前有三种用于j a v a 的流行咀。解析技术: 文档对象模型( d o c u m e n to b j e c tm o d e l ,d o m ) ,这是一个来自w 3 c 的成熟 标准; 用于x m l 的简单ap i ( s i m p l ea p if o rx m l ,s a x ) ,是第一个被广泛采用的 用j a v a 编写的x m la p i ,是一个事实上的标准; 用于订l 的数据流a p i ( s t r e 锄i n g a p i f o r 儿,s 认x ) ,是j s r 一1 7 3 中采 用的一个很有前途的新解析模型。 当应用程序需要不断地导航、修改文档或随机地一次访问整个文档时,使用 d o m 解析。 d o m 是一种基于树型的解析技术,它在内存中构建起一棵完整的解析树,借此 实现对整个x m l 文档的全面、动态访问。 图4 1显示了d o m 解析模型的树型结构。文档是所有d o m 树的根,这个根有 至少一个子节点,即根元素,另一个节点是文档类型( d o c u m e n t t y p e ) ,用于d t d 说 明。根元节点,其子节点还有自己的子节点。子节点可以是元素、文本、注1 4 x 塑垩查兰堡主堂垡堡塞壁垒苎型鉴堡董王茎壁垫查堕塑生兰壅里查】! 些兰! 旦 释、处理指令及其他类似信息。 图4 1 d o m 树 d o m 的使用非常简单。可以随机地访问m ,文档,由于整个树都构建在内存 中,因此可以通过d o ma p l 修改这些节点,例如增加一个子节点或修改、删除一 个节点。 不过,虽然内存树结构提供了很好的导航支持,但仍有一些解析策略问题需要 仔细考虑。首先,整个m 。文档必须一次解析完成,不可能只做部分解析;其次, 在内存中加载整个文档和构建完整树结构的成本很高,尤其当文档非常大的时候。 典型地,d o m 树的容量比文档容量要大一个数量级,所以它要消耗大量内存:第 三,一般的d o m 节点类型在互操作性上有优势,但对于对象类型绑定也许不是最 好的。 某些类型的应用程序要比其他类型的应用程序更适合采用d o m 解析。例如, 当应用程序需要随机访问x m l 文档时就很适合采用d o m 解析,另一个比较好的 例子是在处理模板时需要重复查找整个文件的x s l 处理器。此外,由于d o m 使你 能够更新文档,因此对于需要修改数据的应用程序,如x m l 编辑器来说,d o m 解 析也很方便。 塑翌查兰堡主堂垡堕奎堂垒塞型堕墨董王羞壁茎查塑堡生量壅墨 室! ! ! 塑竺! 星 4 2 d o m 核心模块 d o m 嘎m p l e m 蛐h 6 0 n : i n t e f f a c ed o m m p l e m e n 纽t i o n b o o l e 觚h 懿f 蚀t l i r i nd o m s t r i n gf e a t u r e ,i nd o m s t r i n gv e r s i o n ) ; d o c u m t t y p ec r t e d o c u m e n t t l m e ( i nd o m s t r i n gq u a l i 6 c d n a m e ,i n d o m s t r i n gp u b l i c i d ,i nd o m s m n gs y s t e m i d ) r a j s e s ( d o m e x c e p t i o n ) ; d o c u m e n t 删旅m m 蛐t ( i nd o m 鼬i n gn 锄e s p a c e u r j ,i nd o m 鼬i n g q u a l i f i e d n 锄e ,i nd o c 啪e n t t y p ed o c t y p c ) r a i s e s ( d o m e x c 印t i o n ) ; ) h a s f e a t u r e 用来测试所使用的d o m 实现是否实现了某个模块。c 溉n e d o c u m e n t 方法以指定的文档类型创建一个x m l 文档,因此,只支持h t m l 的d o m 实现 不需实现这个方法。c r e a t e d o c u m e n t 聊e 方法创建一个空的d o c 啪e n t l 卯e 结点。 n o d e :d o m 规范中的一个基本数据类型,它是d o m 森林中所有结点对象的 超类。 n u m 蛐t :是n o d e 的派生类,它是d o m 树的根结点,代表了整个 x m l h t m l 文档,提供了访问文档数据的入口。因为e l e m c n t 、t e x t 等结点都要 位于某个d o c u m e n t 的上下文中,因此,d o c u m e n t 提供了创建这些d o m 树子结 点的方法。这些被创建的子结点的o w n e r d o c u m e n t 成员变量就指向创建它们的 d 0 c u m e n t 。 d o c u m e n t f n g m 蛐t :是一个轻量级的d o c u m e n t 对象。它代表了h t m l l 文档的一个或若干个片断。当想修改、剪切h t m l m l 文档的一部分时,这个接 口就比较有用。 n o d e l i s t :表示一个n o d e 结点的有序集合。通过下标可以访问所有n o d e l i s t 包含的所有元素。 n a m e d n o d e m 叩:表示一个可以通过按名访问的n o d e 结点的集合。 塑望查堂堡主兰竺笙茎壁垒苎型堕壁董王茎堡垫查箜堡生兰塞塑鲞! ! ! 竺笙! 旦 c h a h c t e 曲岫t 曩:提供了访问d o m 中字符数据的方法。 e i 哪e n t :表示h t m l x m l 文档中的一个元素。 a n r :表示元素的一个属性。对于h t m l 文档来说,可以通过属性名称直接来 检索元素的某个属性值,而对于l 文档,元素属性值可能包含实体引用,因此 需要首先通过属性名称获得相应a t t r 对象, 之后再操纵这个对象获得属性值。 t e x t :继承了c h a r a c t e r d a t a ,表示h t m l m l 文档中元素或属性的字符内容。 扩展接口是专门用来处理l 文档的。因此,只处理h t m l 文档的系统可 以不必实现这部分接口。c d a l a s e c t i o n 是t 瓠t 的派生类,它包含一串以】结束 的字符。在c d a l a s e c t i o n 内部,任何其它h t m 巴) ( m l 的标签字符都当作普通 字符处理。每个x m l 文档都对应一个d 0 c u m t t 如e 对象,它为d o c u m e n t 对象 提供了访问为改文档定义的实体的接口。n o t a t i o n 表示在d t i ) 中定义的一个符 号。e n t i t y 表示一个实体。e n t i t y r e f e r e n c e 表示一个实体引用。 4 4 d o m c s s 规范 c s s 是一种声明语法,用于定义格式化和描述w 曲文档的表达规则、属性和辅 助结构。通过文档接口可以存取其上引用或内嵌的所有样式表的集合。 c s s s t y l e s h e e t 接口表示一个c s s 样式表的具体接口,即表示了内容类型为”t e x 讹s s ” 的样式表:c s s r u l e “s t 接口抽象了c s s 规则的有序集合,可以通过从o 开始的整 数索引来存取c s s r u l e l i s t 中的项目;c s s r u l e 接口表示任何类型的c s s 语句的抽 象基接口;c s s v a i u e 接口表示一个简单或复杂的c s s 值,一个c s s v a l u e 对象只出 现在c s s 属性的上下文中;c s s p r o p e n i e s 接口方便地提供了在一个 c s s s t y l e d e c l a r a t i o n 中读取和设置属性的机制。 塑垩查兰堡主堂堡笙奎堂垒垄型些量董王薹壁茎查盟堡生兰塞翌壅31 1 1 1 生! 旦 4 5 d o m h - i 酬儿规范 d o mh t 仉规范扩展了d o m 核心模块,提供了访问h t m l 文档特有元素、 属性的功能。h t m l d o m i m p i e m e n t a t i o n 接口扩展了d o m i m p l e m e n t a i o n 接口, 提供了一个创建h 刑l 文档的方法。h 刑l c o l l e c t i o n 表示结点集合 h t m l d o c u m e n 扩展了d o c u m e n t 接口,代表整个h t m l 文档,提供了一些访问 h t m l 文档全局属性的方法。h t m l e l e m e n t 扩展了e l e m 锄t 接口,是所有h t m l 元素对象的超类。其它具体h t m l 元素类这里省略。这一部分规范的实现体现在 h 刑l 解释器中。 塑坚查兰堡主堂竺堡奎壁垒茎型鉴矍董王差堡垫查竺堡兰兰壅翌盎王! ! 塑生! 旦 5 1 h 聊l 解析概述 h t m l 文档的解释过程可分为词法分析、语法分析、语义处理等几个步骤。 首先,h t m l 解析器初始化,然后调用词法分析器对h t m l 文件进行分析。词 法分析完成后,语法分析器根据语法规则从词法分析器取得单词,并检查语法的正 确性,然后调用语义分析器来进行语义分析。 词法分析器位于传输模块与语法处理器之间,对h t m l 文档进行单词、实体识 别和实体转换。实体是h t m l 文档中可被引用的信息集合,如一段s 州p t 程序、图像 和声音数据以及一些特殊字符。词法分析器还负责分解t a g 和属性,并进行有效性验 证、容错处理、内容过滤、代码转换等处理,词法分析可以包含语法分析,也可以 形成中间数据结构。词法分析是浏览器实现的基础环节之一,也是整个实现过程中 重要的前端过程,其数据结构的设计与接下来的语法分析和布局算法密切相关,词 法分析的效率与准确性、容错性也关系到浏览器设计的质量。词法分析实现以下功 能:标签处理功能,其中包括非法的标签嵌套、未定义的标签处理、属性解析功能 等。按照性能要求采用动态分配内存的方法,词法分析器边解析边分配和释放,解 析完毕,所占用内存将被全部释放。 词法分析过程有两种方式。一种是边进行词法分析,同时进行语法分析;另一 种是词法分析完成,然后再进行语法分析。在本文的解析器中用的是第一种方法。 语法分析器采用层次化的结构,各层之间的语法分析器通过语法分析表来通信。 语法分析表包括实体转换表、状态转换表、动作表和当前状态。实体转换表描述了 h t m l 文档中引用的实体;状态转换表描述了对h t m l 语法分析时的状态转换图: 动作表则定义了在指定状态对输入单词应采用的动作;语法分析完成后,根据单词 的语义来调用语义处理函数,实现从h t m l 文档到中间结果的翻译。 塑坚查兰堡主兰竺笙苎壁垒塞型些壁董王茎堡垫查塑堡堡兰壅翌室王! 唑兰! 旦 语法分析器的接口主要有两类,基于对象的和基于事件的接口。基于对象的接 口,需要建立d o m 树,语法分析器遍历d o m 树,根据语义分析生成排版显示的数 据结构。这种方法比较简单好用,但是要求先生成完整的d o m 树,不适合边下载边 显示。另外一类基于事件的接口,语法分析器提供一套回调接口,通过事件触发的 方式主动通知语法分析器,完成语法分析。这种方法避免了建立d o m 树,提高了效 率,节约了内存使用。回调接口主要包括t a g _ o p e n ( 开始标签) 、t a g _ c l o s e ( 结束标签) 、 s p a c e ( 空格处理) 、w o r d ( w o r d 处理) 等。当词法分析器解析到标签、内容时,会调用 相应的回调函数。如果某些标签不支持,则直接跳过,不做任何处理。本文采用第 一种接口,建立d o m 树的方法。 5 2 h 1 m l 语法树 h t m l 网页从逻辑上来看是单元化的体系结构,这些处于同一个页面上的单元 并不处于同一级别,而是处于不同层次上的,如图5 1 所示。 一个h t m l 网页的结构就好像是一棵树。通常,采用语法树和r e n d e r 树来表示 一个h t m l 网页。 正常的情况下,h t m l 文件的语法结构应当用普通的树形结构,树的结点是可 以包含两个以上子女的。但我们在实现的过程中h t m l 的语法树采用二叉树。树的 存储采用的是左子女右兄弟的表示法,这样可以节约出很多的存储空间。 f f 图5 1h t m l 语法树 塑垩查兰堡主堂垡堡兰堂垒塞型堕矍董王茎壁垫查竺堡生量塞翌查立! ! 塑生! 旦 语法树就是一个将所有h t m l 页面对象连接起来的二叉树。h t m l 浏览器是根 据h t m l 的规范和各自对h t m l 语言的认识,来确定合适的语义包含关系的。 r c n d e r 树和语法树结构基本相同,它提供给上层的排版、显示模块用的。但r c n d e r 树上的结点只包含那些可以显示的。当后面排版( 1 a y o u t ) 时,堆放的顺序就是按照先 子对象,后兄弟对象的方法遍历树的顺序。 语法树的构建,是在p a r s e r 过程中完成的,后面会具体介绍p a r s e r 部分的工作。 各类节点的定义在各个类中完成,其中包括h e a d ,l i s t ,l i n e ,i m a g e ,f o m ,b l o c k 等各类标签和属性,相应的都有各自存储的的数据结构定义和接口。 5 3 h 田 l 标签、属性解析 根据h 州l 语法,系统生成h n 他节点链。h t m l 节点链与具体元素无关,而是 几种抽象的数据类型:a 节点、b r 节点、f o r i l lf i e l d 节点、i m g 节点、l i n e 节点、p 节点、t a b l e 节点、t e x t 节点、t d 子节点和t r 子节点。h 眦。词法分析模块处理生 成的h t m l 节点链,在适当的时候( 如一个段落解析完毕) 调用h 1 m l 排版模块进 行排版处理。 h t m l 解析处理流程如下图所示: 图5 2h t m l 解析流程图 塑坚查兰堡主兰垡笙苎堂垒蔓塑篓塑堇三茎堡垫查竺塑生皇塞翌室】! ! 塑竺! 旦 t o k e n i z e r 部分进行预处理,并完成分词过程。分词过程完成后,它会调用p a r s e r 部分对t o k e n 进行分析、处理,形成语法树、r e n d e r 树。 数据结构: ( 1 ) t o l e n 类:是一个主要的类,用来存放数据流中分词出来的t o k e n ,它的定 义如下: c l a s st o k e n p u b l i c : t o k e n o i d = 0 : c o m p l e x t e 蔗t2f a l s e ; a t t r s = o : t e x t = o : q d e b u g ( ”n e wt o k e n ,c r e a t i n g 0 8 l x ”,a t t r s ) ; ) t o k e n 0 i f 【a t t r s ) a t t r s - d e r e f ( ) ; i f ( t e x t ) t e x t d e r e f ( ) ; ) v o i di n s e m t t r ( a m i m p l + a ) i f ( ! a 缸s ) a n r s = n e wd o m :n 锄e d a t t r m 印i m p l ( o ) ; 黼s r c f ( ) ; a t t r s 一 i n s e r t a n “a ) ; v o i dr e s e t ( ) 塑垩查兰堡主兰垡笙塞壁垒苎型堕墨董王羞壁垫查堕堡生兰塞望室! ! ! 竺兰! 旦 p a r s e t e x t ( ) ,p a r s e t a g ( ) ,p a r s e e n t i t y ( ) 等:对输入的h t m l 文本的 字符流,进行分词处理。根据不同的标志,可知道将要处理的t o k e n 的类型 调用响应的处理函数,分解出t o k e n 。 c u n t o k e n 是一个t o k e n 类型的变量,表明正在处理的t o k e n 。 t a g :枚举变量,说明h 刑l 中的标记。类似的枚举类型还有e n t i t y 等。 工作流程: t o k e n i z e r 部分的主要工作是分词,以及调用p a r s e r 部分,工作流程图如下所示: 5 4 2p a r 趾r 吉b 分 图5 4t o k e n i z e r 工作流程图 p a r s e r 部分是语法语义解释中较为繁复的部分。它把t o k e o i z e r 部分分出的t o k e n 根据相互之间的关系,加入到语法树的相应位置( 其实现过程,要借助堆栈) 。 数据结构: 塑坚查兰堡主兰堡垒塞堂垒茎型鉴矍董王茎壁垫查塑垦生兰窭墨查! ! ! 塑竺! 旦 这部分最主要的类是h n 礼p a r s e r ,它包含了以下主要方法和成员: p a r s e t o k e n ( ) :被t o k e n i z e r 调用,是主要的功能函数,它调用其他的所需 函数对传递来的t o k e n 进行分析; p m c e s s c l o s e t a g ( ) :被p a r s e t o k e n ( ) 调用,处理结束符; i n s e r t n o d e ( ) :被p a r s e t o k e n ( ) 调用,将t o k e n 插入语法树,它的返回值 是布尔类型的,用来判断插入是否成功; p u s h b l o c k ( ) ,p o p b l o c k ( ) :完成进出栈操作。它操作有一个自定义的 类h t m l s t a c l ( e l e m 来完成。这个类通过一个链表组成了一个栈; b l o c k s t a c k :指向类h t m l s t a c l 【e l 钿的指针。主要协助完成堆栈操作。 工作流程: 当t o k e n i z e r 部分分出一个t o k e n 时,会调用p a r s e r 部分将这个t o k e n 加入到语法树 中,然后返回t o k c n i z e r 部分,继续分词。 p a r s e r 部分的工作流程图如下: 图5 5p a r s e r 工作流程图 嵌入式浏览器若干关键技术的设计与实现宋飞2 0 0 6 年5 月 5 5 x h t m l 解析 和h t m l 相比,x h t m l 只是对大多数h t m l 标签提供了更严格但也更清晰 的语法实现,因此x h t m l 文档的解析和h t m l 文档的解析也类似。同时x h t m l 采用x m l 语言的语法规范,而本嵌入式浏览器的h t m l 引擎采用d o m 技术,因 此也同样适用于v l l 文档的解析,本文根据x m l 规范在h t m l 解析器的基础上, 对x h t m l 的解析器做了一定程度的修改,如x h m l 的文件头,规范标签、属性 解析等。并且解析过程也可以针对x h t m l 的特点做些优化,减少执行不必要的容 错代码,从而提高效率。 塑垩查兰堡主堂焦笙奎堂垒全登型墨霎至:耋冀墨至塑塞茎量塞望苤! ;鑫霎! 羹 菁纛霎登善囊差答鋈鬻攀 ;删 ;蒴蓉矫赫蕃富羹爨囊海滔商忙叁竖j 掣轰型赠澎强覆贰ii 川i 荔 西弱都酾耋司雕i ;l 吾囊驯鬻臻渺笨渤,通名嵫睡雌。要鸶鞭措付l 耵;i 二jr 甄 葭巨盾羽i 谫坼酽墓誉昭墓掣型甄到蟊量羹羹鋈;蘸冀j 薹菱蓁翼霎薹委萎霎雾雾薷; 括两个过程:分词过程和分析处理过程。分 词过程是将网络部分接收到的待处理的数据流分解成独立的可处理的单元,称为 t o k e n 。把h t m l 文字看作字符流,对它进行扫描,分出一个个t o k e n 。t o k e n 是程 序中的基本单元,如标签( ,r a g )。分析处理过程是对分出的t o k e n ,根据它们的属 性等信息,进行相应的处理,再对to k e n 进行分析,调用不同的分析程序( p a r s e r ) , 并根据它们之间的层次关系,加入到语法树和r e n d e r 树中。处理完的h n 他文档产 生了一个树型结构,经过排版处理后,就可由显示模块显示出来了。 语法语义解释是一个很复杂的过程,实现过程主要分为t o k e n i z e r 部分和p a r s e r 部分。 s 仃i n g 度 生成语法树 7 生成托n d e r 树 图5 3 语法语义解释过程 一块一 、 1 一标择一 , 一王处一 一根相一 一一预一 益一当塞;| _ 崮 刍 塑垩查兰堡主兰竺笙苎堂垒垄型堕墨董王茎堡垫查箜堡生量壅翌室】! ! ! ! ! ! 旦 对象( a r r a y o b j e c t ) 可以在j s 引擎中创建和操作数组结构,日期对象( d a t e o b j e c t ) 提供 了对日期操作的统一接口,字符串对象( s m n g o b j e c t ) 提供了对字符串的高级操作等。 j s 引擎在初始化的时候,首先初始化运行空间及所有核心引擎对象的基类,为后面 对象的创建、继承以及运行做准备,然后初始化j s 的页面对象解释引擎,这也是浏 览器对j s 的扩展部分,才真正涉及到浏览器相关的对象,如w i n d a w ,d o c u m e n t ,s c r e e n , i m a g e 等,这一部分的初始化有一个重要的概念,就是全局对象,对于网页来讲,全 局对象就好像浏览器,其它各个对象都是它的子对象,将w i n d o w 对象设置为全局对 象,d o c u m e n t 对象是 x 塑垩查兰堕主兰堡垒苎堂垒茎型苎堡董三茎壁茎查堕堡生量窒墨 室王! ! 堕竺! 旦 第七章j a v a a p p l e t 实现 本浏览器中j a v aa p p l e t 模块是一个独立的子模块,负责h t m l 页面中的j a v a a p p l e t 显示和交互功能。通过一个独立的进程处理j a v a a p p l e t ,有几个优点: 1 不用考虑线程问题 2 容易处理j a v a 虚拟机的崩溃问题 3 j a v a 虚拟机的装载过程不会影响u i 显示 4 可以方便的卸载j a v a 虚拟机 可见使用j a v aa p p l e ts e r v e r 可以加强a p p l e t 的稳定性和灵活性,而其缺点是需要 考虑浏览器和a p p l e t 的通信( j a v a a p p l e t 运行的窗口需要嵌入到h t m l 页面中) 。 j a v aa p p l e ts e r v c r 分两部分,一部分用c + + 编写,完成装载j a v a 虚拟机,在页面 中嵌入j a v a a p p l e t 等功能;另一部分用纯j a v a 编写,完成j a v a a p p l e t 的类下载,j a v a a p p l e t 的生成、启动、显示等交互功能。 7 1 启动删、启动j 钾叠a l p l e t 进程 7 1 1 模块涉及到的类以及关系 如下图,其中实线箭头表示继承关系,虚线箭头表示组合关系( 一个类的对象 为另一个类的成员) 。 翌垩查兰堡主兰竺丝奎堂垒茎型堕墨董王茎壁茎查塑堡生兰塞翌盎! ! ! 丝兰! 星 图7 1j a v a a p p l c ts e r v e r 第一部分类关系图 先简单介绍各个类的功能,h 1 m l a p p l e t e l e m e n t 和r e n d e r a p p l e t 是与该模块相 衔接的两个类,因此也简单介绍一下。 ( 1 ) h 盯咀a p p l e 岖i e m 蛆t : h t m l a p p l e t e l e m e n t 是d o m 树中的一个结点,代表h t m l 中的 元素, 解释器首先分析h n 也文本,读取每一个字符,当读到 元素时,就n e w 出 该结点对象,并继续读取该元素的所有属性。d o m 树
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全培训十大方法课件
- 安全培训到位的标准课件
- 老旧小区居民意见征集处理方案
- 《2025年办公空间租赁合同》
- 智能建筑系统集成技术方案
- 毕业论文致谢9篇
- 2025年寄生虫学寄生虫病病原体鉴定模拟测试卷答案及解析
- 6-2《五石之瓠》(教学设计) 高二语文同步高效课堂(统编版 选择性必修上册)
- 地基基础工程分部分项验收方案
- 施工废弃物分类处理方案
- 发酵饲料培训课件
- 电信营业员的理论考试题及答案
- 2025年河北大学版(2024)小学信息科技三年级(全一册)教学设计(附目录 P179)
- 安保技能活动方案
- 殡仪服务站可行性研究报告
- 普通鱼缸买卖协议书
- T/CECS 10360-2024活毒污水处理装置
- 2026届高职单招考试大纲英语词汇(音标版)
- 临床护理文书书写规范课件
- 非法宗教班会课件
- 《电子商务基础(第二版)》课件 第六章 电子商务客户服务
评论
0/150
提交评论