嵌入式浏览器的设计与实现设计本科学位论文.docx
- 文档编号:9449232
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:53
- 大小:1.50MB
嵌入式浏览器的设计与实现设计本科学位论文.docx
《嵌入式浏览器的设计与实现设计本科学位论文.docx》由会员分享,可在线阅读,更多相关《嵌入式浏览器的设计与实现设计本科学位论文.docx(53页珍藏版)》请在冰豆网上搜索。
嵌入式浏览器的设计与实现设计本科学位论文
嵌入式浏览器的设计与实现
摘要
随着计算机技术的发展,嵌入式系统已成为计算机领域的一个重要组成部分。
嵌入式计算机中的应用数量远远超过了各种通用计算机,制造工业,过程控制,通讯,设备,仪器仪表,汽车,船舶,航空,航空航天,军事装备,消费类产品都是嵌入式计算机的应用领域。
本文主要论述了嵌入式浏览器开发所涉及到的技术,对HTML词法分析、C++编程等做了详细的分析和介绍,并对C++嵌入式浏览器的开发进行了介绍,分析了主要的模块的功能和组成,并给出了主要代码。
还对典型的嵌入式浏览器进行了分析,包括Gzilla,Mozilla,Thunder和zen,总结了浏览器设计的技术要点和开发策略。
另外,在论文开头,介绍了目前嵌入式浏览器产品的发展现状,嵌入式浏览器的组成和各部份功能说明。
HTML词法分析是着重讨论的技术问题,给出了详尽的数据结构,程序流程。
嵌入式浏览器的开发,是本论文的重点,分模块进行了分析,提出了需要改进的地方,并给出了改进措施。
关键词:
嵌入式浏览器;HTML词法分析;C++
DesignandImplementationofEmbeddedBrowser
Abstract
Withthedevelopmentofcomputertechnology,embeddedsystemhasbecomeanimportantpartofthecomputerfield.Embeddedcomputerfarexceedsavarietyofgeneral-purposecomputersinthenumberoftheapplications,manufacturingindustry,processcontrol,communications,equipment,instruments,automobiles,ships,aviation,aerospace,militaryequipment,andconsumerproductsarealltheapplicationfieldoftheembeddedcomputer.
Thispaperdiscussesthedevelopmentofembeddedbrowserinvolvedintechnology,lexicalanalysisofHTML,C++programming,andsodoadetailedanalysisandpresentation,andC++embeddedbrowserdevelopmentwereintroducedtoanalyzethemainfunctionandcompositionofthemoduleandgivesthemaincode.Alsotypicalembeddedbrowseranalyzed,includingGzilla,Mozilla,Thunderandzen,summedupthetechnicalpointsandtodevelopstrategiesbrowserdesign.
Inaddition,atthebeginningofthepaper,describesthecurrentstatusofthedevelopmentofembeddedbrowserproduct,embeddedbrowsercompositionandfunctionofeachpartofthedescription.
HTMLlexicalanalysisisfocusedontechnicalissues,givesdetaileddatastructures,programflow.Embeddedbrowserdevelopment,isthefocusofthispaper,sub-moduleswereanalyzed,andareasforimprovement,andgivesimprovements.
Keywords:
embeddedbrowser;HTMLlexicalanalysis;C++
绪论
随着计算机、网络技术的迅猛发展,新型的高科技含量的电子产品层出不穷,遍及家电、生产、军事等各个领域。
嵌入式系统因其体积小,速度快而受到重视。
在掌上电脑、PDA、手机、导航设备、信息家电领域嵌入式系统被广泛采用,这也是近期产品研发的热点。
嵌入式浏览器作为重要的嵌入式系统应用软件,是不可或缺的。
但目前,嵌入式浏览器产品的市场被少数国外大公司垄断,众多的小型嵌入式浏览器也尚处于发展期,而国内的自主技术的嵌入式浏览器更屈指可数,刚刚进入实用阶段。
迫切需要更多的人来关注嵌入式浏览器技术,开发中国自主知识产权的浏览器产品。
嵌入式浏览器cpu能力弱、功耗低,内存等资源可用的十分有限,所需要支持的web特性不需要pc版的那么丰富,一般最基本的html即可,javascript一般都不需要全部支持。
它的功能十分优秀、前途非常广大,本文对它的进行了简单的开发,希望对它有更深的了解,增加自己的开发经验。
一、嵌入式浏览器设计概述
(一)目前嵌入式浏览器产品的发展现状
1.国内外发展现状:
常见的桌面浏览器有微软的InternetExplorer,网景的Netscape,开放源码的Mozilla,以及opera,mosaic,Hotjava,字符模式的lynx等。
其中IE,Opera已有嵌入式版本,以上的大多数浏览器均有跨多平台的版本。
这些桌面型浏览器功能参差不齐,但大多能实现基本的浏览功能。
其中IE与Netscape对HTML页面的显示效果均堪称完美(对于XML,WML等标准的网页浏览,本文不予讨论)。
对立的是,这些浏览器庞大的体积和对机器配置的高要求。
这也是桌面浏览器和嵌入式浏览器最大的区别。
另外,桌面型浏览器通常是基于通用的操作系统,用于桌面电脑如PC机、MAC机等。
而嵌入式浏览器通常基于专用系统。
需要指出的是,我们在网上常看到的一些所谓的优秀浏览器,如Netcaptor,魔装网神,腾讯,飓风,Fantasia,金山WPSoffice的浏览器等等,均为使用IE内核的浏览器,使用了多页面多线程的方式,降低了系统资源的耗费,方便了浏览,但软件本身没有多少技术可言,可以用Delphi,VB等工具轻易开发出来(如果不要求完善的功能,只需简单到拖一个IE控件过去就行了),这也体现了微软的COM+及ActiveX技术的强大。
2.常见嵌入式浏览器
InternetExplorerforWinCE,是IE的WindowsCE版,这也意味着用户为了使用它,必须选用基于WinCE平台的产品,随着微软势力在掌上终端领域的蔓延,WinCE版的IE必将大行其道。
AccessNetfront,Access是日本的浏览器大厂,占据了大部份的日本浏览器市场,其产品广泛应用于手持设备、机顶盒、游戏机等产品。
其新推出的NetfrontLinux版本可以免费下载,网址是:
http:
//www.access.co.jp/product/develop。
经试用,发现Netfront浏览效果非常好,对中文的支持和表格的显示效果,甚至超过Netscape4.6forLinux。
而且支持键盘操作。
可以使用箭头键来选择网址进行跳转。
但显然为了简化设计,Netfront使用了一定的权宜手段。
比如它不支持使用标记来设置字体,也不支持样式表,所有字体的大小是固定的,但一般情况不易发现,不过由于Linux版本不是商业性版本,无法就此推断其他版本的特性。
NetfrontLinux版大小为1.9M,如再加以简化(比如去掉一些图片按钮)可以做的更小。
Gzilla,现名Dillo,是基于Linux,使用JAVA作为GUI平台开发的浏览器,其开发目的也包含嵌入式的应用。
是开放源码项目。
我们在设计JAVA嵌入式Browser时主要参考了该浏览器的界面设计。
该浏览器的缺点是不支持表格,布局过于简单,不支持中文,浏览效果比较差,优点是网络功能完善,支持cache缓冲,能够支持多种图片格式。
网址是:
。
Viewml,使用FLTK作为GUI平台开发的浏览器,主要面向嵌入式的应用。
是开放源码项目。
使用C++面向对象的设计。
因为使用FLTK,所以可以在嵌入式的MicroWindow平台运行,该浏览器支持简单的表格,界面还没有做(只有一个主窗口),不支持中文,由于FLTK的BUG比较多,我们在实际编译时经常出错,即使编译通过,也常常是还没运行就coredump了,但曾经由某人编译成功,基本可用,网址是:
。
ZEN,一个并不知名的嵌入式浏览器,但却十分优秀,开放源码项目,不仅支持表格,支持多种图像格式,而且在设计上很有特色,将涉及到GUI平台的部分独立出来,用户可以指定不同的GUI平台运行,内置了对字符,SVGA和JAVA的支持,开发这只需按照相应规范编写该软件的涉及GUI的部份,就可以将其移植到其它GUI平台,而无须对整个软件进行修改。
缺点是网络功能比较弱,不支持多线程,另外其必须等到所有图片下载完毕才开始布局,若某文件传输失败则会导致死锁,需用户中断。
网址是:
http:
//www.nocrew.org/software/zen/。
以上主要介绍了开放源码的嵌入式浏览器,因为其对本项目具有实际的参考价值。
3.嵌入式浏览器的应用领域
嵌入式浏览器主要应用于手持终端和信息家电,例如掌上电脑、3G手机、网络机顶盒、具有网络功能的其它家电,如可上网的电冰箱等,另外,在军事等领域也有一定的应用需求。
(二)嵌入式浏览器的设计功能
下面简介主要的组成部份,其设计原理后面将进行专门论述。
1.词法分析
主要是针对HTML进行词法分析,该词法分析器实际是通用的,还可用于XML、WML的词法分析,只需替换元素名称即可。
HTML词法分析是浏览器设计的基础环节之一,也是整个设计过程中重要的前端工作,其数据结构的拟定与接下来的语法分析和布局算法密切相关,词法分析的效率与准确性、容错性也关系到整个浏览器设计的质量。
2.语法分析
在大型的浏览器中,语法分析通常是独立的模块,但在嵌入式浏览器中,语法分析通常是与布局混合在一起的,即一边进行语法分析,一边布局,不设立相应的数据结构来存储语法分析的结果。
语法分析对布局的算法有直接的指导意义。
3.布局
本文中的布局应理解为界面输出前的预演和处理位置等信息的算法,而不是具体的画图和界面输出。
布局算法的好坏直接关系到界面的输出效果,但布局算法也是要根据GUI所能实现的输出效果来设计的,所以,GUI往往成为系统的瓶颈,如果GUI提供的支持有限,即使有再好的布局算法,也是纸上谈兵,无用武之地。
4.GUI及软件界面
GUI是指图形用户界面,浏览器无疑是一个图形函数库的大需求者,选择好的GUI环境实属不易,为了能够实现专有的功能,浏览器开发者往往还要对基础的GUI库进行包装、改写,甚至写自己的控件。
所有这些,是需要有专业的GUI库开发经验的专职人员来完成。
GUI的功劳第一在于软件的操作界面,如窗口、菜单、工具条、滚动条等。
第二在于主浏览窗体中的图形元素的输出(通常以自画控件的方式)。
前者通常直接使用GUI库中的已有控件,编程难度很小,后者主要利用基本的点线函数,编程难度比较大。
(三)C++简介
C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“Cplusplus”,“CPP”。
它是一种使用非常广泛的计算机编程语言。
C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。
它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。
C++由美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普博士在20世纪80年代初期发明并实现(最初这种语言被称作“CwithClasses”带类的C)。
开始,C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。
虚函数(virtualfunction)、运算符重载(operatoroverloading)、多重继承(multipleinheritance)、模板(template)、异常(exception)、RTTI、命名空间(namespace)逐渐被加入标准。
优点:
C++代码·C++设计成静态类型、和C同样高效且可移植的多用途程序设计语言。
C++设计成直接的和广泛的支持多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。
C++设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。
C++设计成尽可能与C兼容,借此提供一个从C到C++的平滑过渡。
C++避免平台限定或没有普遍用途的特性。
C++不使用会带来额外开销的特性。
C++设计成无需复杂的程序设计环境。
出于保证语言的简洁和运行高效等方面的考虑,C++的很多特性都是以库(如STL)或其他的形式提供的,而没有直接添加到语言本身里。
关于此类话题,BjarneStroustrup的《C++语言的设计和演化》(1994)里做了详尽的陈述。
C++在一定程度上可以和C语言很好的结合,甚至目前大多数C语言程序是在C++的集成开发环境中完成的。
C++相对众多的面向对象的语言,具有相当高的性能。
C++引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。
很多优秀的程序框架包括MFC、QT、wxWidgets就是使用的C++。
(四)QT简介
Qt(官方发音同cute发音为/kju:
t/,虽然也俗称为Q.T.发音为/kju:
tiː/")是一个跨平台的C++应用程序开发框架。
广泛用于开发GUI程序,这种情况下又被称为部件工具箱。
也可用于开发非GUI程序,比如控制台工具和服务器。
Qt是一个跨平台的C++图形用户界面库,由挪威TrollTech公司于1995年底出品。
Trolltech公司在1994年成立,但是在1992年,成立Trolltech公司的那批程序员就已经开始设计Qt了,Qt的第一个商业版本于1995年推出。
2008年1月31日,Nokia公司宣布通过公开竞购的方式收购TrollTech公司,旗下包括Qt在内的技术都归入Nokia旗下。
并且Nokia针对自己的移动设备平台规划的需要,将Qt按不同的版本发行:
Qt商业版:
提供给商业软件开发。
它们提供传统商业软件发行版并且提供在协议有效期内的免费升级和技术支持服务。
Qt开源版:
仅仅为了开发自由和开放源码软件,提供了和商业版本同样的功能。
GNU通用公共许可证下,它是免费的。
2009年3月发布的Qt4.5起,诺基亚为Qt增添开源LGPL授权选择。
2009年5月11日起,诺基亚QtSoftware宣布Qt源代码库面向公众开放,Qt开发人员可通过为Qt以及与Qt相关的项目贡献代码、翻译、示例以及其他内容,协助引导和塑造Qt未来的发展。
为了便于这些内容的管理,QtSoftware启用了基于Git和Gitorious开源项目的Web源代码管理系统。
Qt专业版和企业版是Qt的商业版本。
只有你购买了专业版或企业版,你才能够编写商业的,私人的或收费的软件。
如果你购买了这些商业版本,你也可以获得技术支持和升级服务。
Qt为微软公司的Windows操作系统只提供了专业版和企业版。
二、嵌入式浏览器分析
(一)总体结构
Konqueror/embedded是由底层网络连接、图形化用户界面和处理HTML绘制的引擎(KHTML)构成的。
底层网络连接的实现是基于I/OSlave机制来实现的;图形化用户界面采用Kparts组件技术和Qt的基本部件;而作为Konqueror/embedded的核心(KHTML)则运用了文档对象模型(DOM)所提供的API接口,并在DOM树上挂接JavaScript引擎,CSS解析器以及渲染引擎等。
嵌入式浏览器Konqueror/embedded的核心功能模块包括:
语法语义解析模块、DOM模块、脚本引擎模块、布局引擎模块和显示模块。
模块之间的关系如图2-1所示。
图2-1核心功能模块间关系
1.语法语义解析模块
语法语义解析模块的解析功能分为两部分:
①对接收到的字节流进行分词,解析为关键字:
②调用解析器检验关键字是否合法,若是合法的HTML关键字,则按照规则插入到DOM树中。
HTML的标记(tag)和属性(attribute)统称为HTML关键字。
基本上所有HTML4.0规范的标记都在此功能模块中获得支持,但一些在DHTML中使用到的属性缺少支持。
2.DOM模块
DOM模块对经过解析的标记进行文法检查,并把属性看作节点,按照标记的语义包含关系以及先后顺序组织成DOM树。
它给HTML文档定义了一个与平台无关的程序接口,使用该接口可以控制文档的内容、接口和样式。
3.脚本引擎模块
在Konqueror/embedded浏览器中,脚本的编写完全按照ECMA262标准,该模块按照ECMA262标准,对HTML对象进行登记,使之成为对象,可以被脚本引擎访问。
4.布局引擎模块
布局引擎负责把DOM模块形成的DOM树进行排版、布局。
5.显示模块
显示模块利用Kparts组件技术和Qt基本构件,负责显示经过布局引擎排版的内容。
以上部分在实现的时候,非常灵活,不但可以把联系紧密的模块合并起来成为大的模块,还可以细分为很多小的模块,来完成具体的功能。
(2)浏览器总体流程
Konqueror/embedded的总体流程图2-2如下所示:
图2-2浏览器总流程图
1.执行I/O模块
浏览器加载有关的i/o文件,对HTTP等协议进行解析。
2.执行语法语义解析模块
从I/0模块中接收字节流并进行分词,输出标记,再对标记进行判断,如
果是HTML规范中合法的标记,则把标记看作一个节点,并组织成一棵语法树。
对属性标记的解析首先在标记处理类中执行,如果解析不成功,则交由基类的
属性解析器进行解析。
3.执行DOM功能模块
在此过程中,浏览器将所有从语法语义解析模块中获得标记和属性按照一
定的层次结构组织成DOM树。
完成构建DOM树的功能后,DOM模块会同时把标记
和属性以对象的形式传给脚本引擎模块。
4.执行脚本引擎模块
该模块将对从DOM模块传递来的对象进行属性绑定,使脚本引擎可以访问。
5.布局引擎模块
布局引擎模块将在CSS解析器的辅助下,对HTML文件进行排版、布局。
6.执行显示模块
显示模块按照在布局引擎中的对HTML文档的布局,显示相应的HTML文档。
(三)图形用户界面GUI和排版显示
这是和用户交流的接口,可以根据用户的需求进行适当的配置。
包括主窗口、菜单、工具栏、地址栏、状态栏等。
在MainWindowBase的基础上进行了图形用户界面的设计和实现。
浏览器用户界面结构如图2-3所示。
图2-3浏览器用户界面结构图
三、其它浏览器分析
(一)Dillo(Gzilla)浏览器分析
Gzilla的最新版本改名为Dillo,其模块划分也受了Dillo很大的影响,Dillo浏览器是学习JAVA程序开发的优秀范例,下面就其主要的模块加以说明。
1.主函数流程分析
主要是对main函数进行分析。
java_true();
java_init(&argc,&argv);/* java初始化的一般方式 */
a_Prefs_init();/*初始化 preference,preference包括:
http_proxy,no_proxy,home,link_color,bg_color,text_color,allow_white_bg,force_my_colors。
函数a_Prefs_init()调用Pref_load()分析文件dillorc,并初始化全局变量。
*/
a_Dns_init();/* 初始化DNS模块。
此模块具体工作过程请参阅下文*/
a_Url_init();/* 该函数首先初始化全局变量http_proxy,和no_proxy;*/
a_Mime_init();/*从网络(a_Http_get)或本地(a_File_get)取得文件后,不同的文件需要不同的方法打开。
该函数定义了如下几种打开文件的方法:
*/
a_Dicache_init();/*Dicache用于图形文件的处理。
*/
a_Interface_init();/* 初始化几个有关界面的全局变量 */
a_Dw_image_init();/* 图形信息的初始化 (没有分析)*/
bw=a_Interface_new_browser_window();/* 生成一个browserwindow(bw),初始化用户图形界面。
这些代码是基于java开发的。
主要的回调函数都是在这里定义*/
a_Bookmarks_init();/* 初始化书签功能。
这是比较独立的一个模块 */
……………
java_main();/* java消息循环 */
/* 以下为内存释放 */
a_Cache_freeall();
a_Dicache_freeall();
a_Http_freeall();
a_Dns_freeall();
a_Prefs_freeall();
2.文件的取得
当用户发出一个Url请求时,Dillo首先要取得Url所指向的文件;然后根据文件类型,选择相应的解释器。
一个Url所指向的文件可能在本地,也可能在网络上。
这节将主要介绍Dillo如何从网上取得文件。
模块interface定义了Dillo的图形用户界面。
当用户发出一个Url请求时(例如open一个网页),相应的回调函数将调用函数a_Nav_push()。
模块Nav中的函数主要是维护每一个bw中的Url堆栈(bw是BrowserWindow的简写,是浏览器窗口的数据结构)。
函数a_Nav_push()的主要功能是将当前的请求记录到bw中的expecting域:
bw->nav_expect.url=g_strdup(url);
bw->nav_expect.title=NULL;
bw->nav_expecting=TRUE;
随后,调用函数Nav_open_url()。
该函数首先判断请求是否就在当前页中(如anchor就在当前页中),如果是,则直接跳到当前页中指定位置;如果否,调用函数a_Cache_open_url()并修改用户界面(状态条和一些buttons)。
模块Cache是Dillo中的关键模块。
模块HTTP和模块File负责取得文件,模块Cache负责将取得的各种文件送到不同的解释器;同时模块Cache负责管理缓冲区,缓冲区中存在的文件不需要再通过网络下载。
函数a_Cache_open_url()首先搜索缓冲区,判断请求的文件数据是否已经存在;如果存在,调用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 浏览器 设计 实现 本科 学位 论文