为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

学位论文—浏览器的设计与实现

2018-11-11 4页 doc 1MB 10阅读

用户头像 个人认证

mumumum

暂无简介

举报
学位论文—浏览器的设计与实现二〇〇八年六月摘要随着网络的不断发展,网页浏览器作为上网的所必需的软件之一,已经得到了广泛地应用。在IE独霸一方的背景下,国内外各式各样的浏览器软件都如雨后春笋般孕育而生。网页浏览器的开发与应用更是成为了计算机领域近年来的一大热点。本文围绕着浏览器的编程与开发,讲述了在JDK5.0中进行浏览器开发的一些技术和笔者的一些心得,着重讲解了笔者在毕业设计中所实现的一个浏览器程序——MiniBrower。本文用软件工程的开发过程,详细论述了浏览器的分析、设计及代码实现,最终实现一个具有能同时浏览多个网页,可查询...
学位论文—浏览器的设计与实现
二〇〇八年六月摘要随着网络的不断发展,网页浏览器作为上网的所必需的软件之一,已经得到了广泛地应用。在IE独霸一方的背景下,国内外各式各样的浏览器软件都如雨后春笋般孕育而生。网页浏览器的开发与应用更是成为了计算机领域近年来的一大热点。本文围绕着浏览器的编程与开发,讲述了在JDK5.0中进行浏览器开发的一些技术和笔者的一些心得,着重讲解了笔者在毕业设计中所实现的一个浏览器程序——MiniBrower。本文用软件工程的开发过程,详细论述了浏览器的、设计及代码实现,最终实现一个具有能同时浏览多个网页,可查询历史浏览记录,可以实现打开和保存网页,超链接监听并响应,和对非法网站的过滤等基本功能的浏览器。本文以一个实际运作的浏览器MiniBrowser为主轴介绍浏览器的设计理念与,同时讲述浏览器中各个模块如何互相协同运作,来完成一个呈现网页的工作。HTML词法分析是本文着重讨论的技术问题,给出了详尽的数据结构,程序流程,并且还介绍了一些基于Java的HTML解析器。另外,JavaSwing技术也是本文介绍的浏览器所使用的一种主要的技术,通过使用各个组件,并增加监听器和事件处理等操作,最终形成一个具有一定事物处理能力的浏览器的界面部分。关键字:浏览器;JavaSwing;HTML词法分析;事件AbstractWiththeunceasingdevelopmentofnetwork,theHomepageBrowser,whichbecomesoneoftheessentialsoftwareforsurfonline,hasalreadyobtainedwidelyapplication.UndertheleadingpositionofIE,allkindsofdomesticandforeignbrowsersoftwarehaveappearedlikemushroomgrowthbreedinglives.Thehomepagebrowser'sdevelopmentandtheapplicationhavebecomeacomputerdomainbighotspotinrecentyears.ThisarticlerevolvesBrowser'sprogramminganddevelopment,narratedsometechnologiesandauthor'sattainmentsofcarryingthebrowserinJDK5.0development,explainedbrowserprocedure—MiniBrowerwhichemphaticallyintheachievementofgraduationproject.Thisarticleusessoftwareengineering'sperformanceprocedure,elaboratedBrowser'sanalysis,designandcodeachievement,finallyachievedtheBrowserwhichhassimultaneouslyglancesovermanyhomepages.Itcaninquirethehistorytoglanceovertherecord,realizeopensandpreservesthehomepage,theultraconnectionmonitorsandresponds,withtoillegalwebsitefiltrationandsoon.Thisarticletakeactualoperation'sbrowser—MiniBrowserasthemainaxle,introducedbrowser'sdesignideaandmethod,simultaneouslynarratedhoweachmoduledoescoordinatetheoperationmutuallyinthebrowser,completesonetopresentthehomepagethework.TheHTMLlexicalanalysisisthetechnicalquestionwhichdiscussesemphatically,hasgiventheexhaustiveconstructionofdata,theprocedureflow,andalsointroducedsomebasedontheJavaHTMLrevolver.Onekindofmaintechnologywhichmoreover,thisarticleisalsointroducestheSwingtechnologyofJAVA,throughuseseachmodule,andincreasesoperationsandsoonmonitorandeventprocessing,finalhadcertainthinghandlingabilitybrowser'scontactsurfaceparttoform.Keywords:Browser;JavaSwing;HTMLlexicalanalysis;Event目录引言1第一章绪论21.1目前浏览器产品的发展现状21.2MiniBrowser浏览器的组成和各部份功能说明31.2.1词法分析31.2.2语法分析31.2.3GUI及软件界面41.2.4布局算法41.3开发的前期策划61.3.1平台的选取61.3.2确定要实现的基本功能6第二章开发工具及开发技术82.1面向对象软件工程概述82.2Eclipse简介92.3JavaSwing概述103.1HTML概述133.2HTML词法分析器BitToken的组成及其功能133.3数据结构143.4算法153.4.1基本算法153.4.2词法分析的结果163.5布局183.6几种基于JAVA的HTMLParser18第四章系统分析204.1需求分析204.1.1功能需求204.1.2其他需求214.1.3其他说明214.2总体设计224.2.1设计目的224.2.2环境说明224.2.3子系统224.2.4实现功能的设计244.2.5使用Tomcat访问本地文件264.3详细设计274.3.1设计目的274.3.2功能模块的实现274.3.3系统模型284.3.4开发环境304.3.5关于JEditorPane的使用说明304.4编码314.5测试314.5.1测试目的314.5.2测试环境324.5.3测试用例32结论36参考文献38谢辞40引言当前,信息化浪潮正在全球范围内兴起,一个以计算机网络为核心的信息时代正向我们走来。在Internet飞速发展的今天,互联网成为人们快速获取、发布和传递信息的重要渠道,从而倍受人们的重视,而互联网上信息的查找又要通过浏览器的浏览来实现,所以本文通过对当下流行的浏览器的模拟设计和实现来让大家对网络及网络资源的认识,以及浏览器的各个功能的实现有一个大概的认识。浏览器是一个基于C/S架构的应用软件,其最基本的功能,就是能够将因特网上的众多资源,例如网页上的内容与信息或是在线服务等,呈现给使用者并让使用者得以使用存在于因特网上的各项服务。因此透过网络传输数据对浏览器来说,是相当重要且必备的一项能力。浏览器作为重要的系统应用软件是不可或缺的。但目前,浏览器产品的市场被少数国外大公司垄断,众多的小型浏览器也尚处于发展期,而国内的自主技术的浏览器更屈指可数,刚刚进入实用阶段。迫切需要更多的人来关注浏览器技术,开发中国自主知识产权的浏览器产品。为了支持跨平台访问网页的需求,本课题完成跨平台的浏览器开发,实现个人能同时浏览多个网页,可查询历史浏览记录,对非法网站的过滤等功能的浏览器。本文阐述了浏览器开发的关键技术,并详细说明MiniBrowser的实际开发过程,和技术细节。第一章绪论1.1目前浏览器产品的发展现状常见的桌面浏览器有微软的InternetExplorer,网景的Netscape,开放源码的MozillaFireFox,以及opera,mosaic,Hotjava,字符模式的lynx等。其中IE,Opera已有嵌入式版本,以上的大多数浏览器均有跨多平台的版本。这些桌面型浏览器功能参差不齐,但大多都能实现基本的浏览功能。其中IE与Netscape对HTML页面的显示效果均堪称完美(对于XML,WML等标准的网页浏览,本文不予讨论)。与完美的浏览效果,功能丰富,支持多种媒体格式和视音频插件等优点形成对立的是,这些浏览器庞大的体积和对机器配置的高要求;这也是桌面浏览器和嵌入式浏览器最大的区别。另外,桌面型浏览器通常是基于通用的操作系统,用于桌面电脑如PC机、MAC机等;而嵌入式浏览器通常基于专用系统。需要指出的是,在网上常看到的一些浏览器,如Netcaptor,魔装网神,腾讯,飓风,Fantasia,金山WPSoffice的浏览器等等,均为使用IE内核的浏览器,使用了多页面多线程的方式,降低了系统资源的耗费,方便了浏览,但软件本身没有使用多少技术,可以用Delphi,VB等工具轻易开发出来(如果不要求完善的功能,只需简单到拖一个IE控件过去就行了),这也体现了微软的COM+及ActiveX技术的强大。1.2MiniBrowser浏览器的组成和各部份功能说明1.2.1词法分析HTML(HyperTextMarkupLanguage,超文本标记语言)词法分析是浏览器设计的基础环节之一,也是整个设计过程中重要的前端工作,其数据结构的拟定与接下来的语法分析和布局算法密切相关,词法分析的效率与准确性、容错性也关系到整个浏览器设计的质量。MiniBrowser采用了JDK(JavaDevelopmentKit,Java开发包)附带的HTML解析器解析从服务器返回的HTML数据。1.2.2语法分析在大型的浏览器中,语法分析通常是独立的模块,但在某些小型的浏览器中,语法分析通常是与布局混合在一起的,即一边进行语法分析,一边布局,不设立相应的数据结构来存储语法分析的结果。本文所讲述的MiniBrowser也是采用这种设计思想。另外,语法分析对布局的算法有直接的指导意义。1.2.3GUI及软件界面浏览器无疑是一个图形界面的大需求者,选择好的GUI(GraphicsUserInterface,图形用户界面)环境实属不易,为了能够实现专有的功能,浏览器开发者往往还要对基础的GUI库进行包装、改写,甚至写自己的控件。所有这些,是需要有专业的GUI库开发经验的专职人员来完成。GUI的功劳第一在于软件的操作界面,如窗口、菜单、工具条、滚动条等。第二在于主浏览窗体中的图形元素的输出(通常以自画控件的方式)。前者通常直接使用GUI库中的已有控件,编程难度很小,后者主要利用基本的点线函数,编程难度比较大。在MiniBrower中使用JavaSwing技术编写浏览器的图形界面,而做图形界面首先要考虑的就是选择一个合适的布局管理器。与VB不同,JDK没有表单设计器,需要通过代码来定制布局管理器来放置用户界面组件所在的位置。1.2.4布局算法本文中的布局应理解为界面输出前的预演和处理位置等信息的算法,而不是具体的画图和界面输出。布局算法的好坏直接关系到界面的输出效果,但布局算法也是要根据GUI所能实现的输出效果来设计的,所以,GUI往往成为系统的瓶颈,如果GUI提供的支持有限,即使有再好的布局算法,也是纸上谈兵,无用武之地。在Swing中有以下几种简单的布局管理器:(1)FlowLayout流式布局管理器FlowLayout是最简单的布局管理器,按照组件的添加次序将它们从左到右地放置在容器中。当到达容器边界时,组件将放置在下一行中。(2)BorderLayout边界布局管理器BorderLayout为在容器中放置组件提供了一个稍微复杂的布局。BorderLayout把容器分为五个区域:东、南、西、北和中。东占据容器的右侧,南占据容器的下侧,以此类推。(3)GridLayout网格布局管理器GridLayout将容器分割成许多列和行,组件被填充到每个网格中。添加到容器中的组件首先放置在左上角的网格中,然后从左到右放置其他组件,直至占满该行的所有网格,接着继续在下一行中从左到右放置组件。(4)CardLayout卡片式布局管理器CardLayout将界面看作一系列的卡片,在任何时候只有其中一张卡片是可见的,这张卡片占据容器的整个区域。当某个容器被创建后,就会有一个默认的布局管理器。Window、Frame和Dialog的默认布局管理器是BorderLayout,Panel和Applet的默认布局管理器是FlowLayout。可以调用容器的setLayout()方法来设置容器的布局管理器。[1]1.3开发的前期策划以下的工作均是建立在大量的调查基础上的,是浏览器开发前期准备工作所解决的问题。1.3.1平台的选取目前的商业化嵌入式操作系统功能完善,但使用费用高昂,使用Linux内核的嵌入式操作系统不仅功能强大,便于开发移植,而且费用低廉,基于Linux的软件系统已日渐成熟,也有相应的窗口系统可以使用,使用PC上的Linux来进行浏览器开发,是再好不过的了,软件从一台PC移植到另外一台设备只需更改配置信息,重新编译一下就可以了(前提是使用的函数库、开发包具有JDK1.5或更高的版本)。1.3.2确定要实现的基本功能鉴于对浏览器开发难度的充分考虑,以及现有人员的水平,拟定实现以下功能,以及需要考虑但暂不予实现的功能。需要实现的包括:(1)界面:包括窗口,菜单,输入框,工具条,滚动条等的支持。(2)实现简单网页的布局:实现对简单网页的查看。(3)支持基本IO(Input/Output,输入/输出)。(4)支持对非法网站的过滤。需要考虑的功能:(1)JSP(JavaServerPage,Java服务页面)支持(2)汉字支持(3)JavaScript的支持(4)表单支持(5)页面元素的消息响应第二章开发工具及开发技术2.1面向对象软件工程概述软件工程是一门研究如何用系统化、规范化、产业化等工程原则和方法实施软件开发和维护的学科。1968年秋季,NATO的科技委员会召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机”的对策。在那次会议上第一次提出了软件工程(SoftwareEngineering)这个概念。到今年,软件工程整整走过了33年的历程。软件研究人员不断探索新的软件开发方法,至今已形成八类软件开发方法,例如最早的Parnas方法。但这一方法不能独立使用,只能作为其它方法的补充。软件开发的面向对象方法于20世纪60年代后期提出,到20世纪90年代前半期,面向对象软件工程成为开发人员的首选范型。面向对象方法是一种自底向上和自顶向下相结合的方法,它以对象建模为基础,不仅考虑了输入、输出数据结构,实际上也包含了所有对象的数据结构。OO技术在需求分析、可维护性和可靠性这三个软件开发的关键环节和质量指标上有了实质性的突破。[2]面向对象方法的特点有:(1)自底向上的归纳(2)自顶向下的分解(3)基础是对象模型(4)需求分析彻底(5)可维护性大大改善2.2Eclipse简介Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件和组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。虽然大多数用户很乐于将Eclipse当作JavaIDE来使用,但Eclipse的目标不仅限于此。Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于Java开发工具。尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;例如,支持诸如C/C++、COBOL和Eiffel等编程语言的插件已经可用,或预计会推出。Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。基于Eclipse的应用程序的突出例子是IBM的WebSphereStudioWorkbench,它构成了IBMJava开发工具系列的基础。例如,WebSphereStudioApplicationDeveloper添加了对JSP、servlet、EJB、XML、Web服务和数据库访问的支持。Eclipse采用的技术是IBM公司开发的(SWT),这是一种基于Java的窗口组件,类似Java本身提供的AWT和Swing窗口组件;不过IBM声称SWT比其他Java窗口组件更有效率。Eclipse的用户界面还使用了GUI中间层JFace,从而简化了基于SWT的应用程序的构建。Eclipse的插件机制是轻型软件组件化架构。在富客户机平台上,Eclipse使用插件来提供所有的附加功能,例如支持Java以外的其他语言。已有的分离的插件已经能够支持C/C++(CDT)、Perl、Ruby,Python、telnet和数据库开发。插件架构能够支持将任意的扩展加入到现有环境中,例如配置管理,而决不仅仅限于支持各种编程语言。[3]2.3JavaSwing概述在java1.0刚刚出现的时候,包含了一个用于基本GUI程序设计的类库,Sun将它成为抽象窗口工具箱(AbstractWindowToolkit,AWT)。基本AWT库采用将处理用户界面元素的任务委派给每个目标平台(Windows、Solaris等等)的本地GUI工具箱的方式,由本地GUI工具箱负责用户界面的元素的创建和动作。例如,如果使用最初的AWT在Java窗口中放置一个文本框,就会有一个底层的“对等体”文本框,用它来实际地处理文本输入。从理论上说,结果程序可以运行在任何平台上,但观感(lookandfeel)的效果却依赖于目标平台。对于简单的应用程序来说,基于对等体方法的效果还是不错的,但是,要想编写依赖于本地用户界面元素的高质量、可移植的图形库就会显现出缺陷了。例如,菜单、滚动条和文本域这些用户界面元素,在不同的平台上,操作行为存在着一些微妙的差别。因此,要想给予用户一致的、可预见性的界面操作方式是相当困难的。而且,有些图形环境并没有像Windows或Macintosh这样丰富的用户界面组件集合。这也就将基于对等体的可移植库限制在了一定的范围内。其结果是使AWT构建的GUI应用程序看起来没有Windows或其他应用程序显示的那么漂亮,也没有提供那些平台用户所认知的功能。更加糟糕的是,在不同平台上的AWT用户界面库中存在着不同的Bug。1996年,Netscape创建了一种称为IFC(InternetFoundationClass)的GUI库,它采用了AWT完全不同的工作方式。它将按钮、菜单这样的用户界面元素绘制到空白窗口上,而对等体只需要创建和绘制窗口。因此,Netscape的IFC部件在程序运行的所有平台上的外观和动作都一样。Sun和Netscape合作完善了这种方式,创建了一个名为Swing的用户界面库。Swing可作为Java1.1的扩展部分使用,现已成为JDK1.2标准库的一部分。现在,Swing是不对等基于GUI工具箱的正式名字。它已是Java基础类库(JavaFoundationClass,JFC)的一部分。完整的JFC十分庞大,其中包含的内容远远大于SwingGUI工具箱。JFC特性不仅仅包含了Swing组件,而且还包含了一个可访问的API、一个2DAPI和一个可拖拽的API。当然,在用户屏幕上显示基于Swing用户界面的元素要比显示AWT的基于对等体组件的速度慢一些。但对于任何一台现代的计算机来说,微小的速度差别无妨大碍。另外,由于下列几点无法抗拒的原因,驱使人们选择Swing:(1)Swing拥有一个丰富、便捷的用户界面元素集合。(2)Swing对底层平台依赖的很少,因此与平台相关的bug很少。(3)Swing给予不同平台的用户一致的感官效果。[4]第三章HTML的分析3.1HTML概述超文本标记语言(HyperTextMarkupLanguage,HTML)是一种用于文档布局和超文本链接规范的语言。它定义了特殊的、嵌入式指令的语法和放置方法,浏览器中不会显示这些指令,但是HTML可以告诉浏览器该如何显示文档的内容,如文本、图像及其他支持的媒体等,还有如何通过特殊的超文本链接来制作交互式的文档,这些链接可以把这些文档和其他因特网资源链接起来。HTML词法分析是浏览器设计的基础环节之一,也是整个设计过程中重要的前端工作,其数据结构的拟定与接下来的语法分析和布局算法密切相关,词法分析的效率与准确性、容错性也关系到整个浏览器设计的质量。[5]3.2HTML词法分析器BitToken的组成及其功能BitToken是NetbitBrowser的HTML词法分析器,使用标准C编程,NetbitBrowser是基于Linux/Gtk的浏览器,也是一个开放源码项目。BitToken作为NetbitBrowser的词法分析部份,负责对接收的HTML代码进行词法分析,主要的目的是提取网页中元素的名称及其属性,并以恰当的形式(即按一定的数据结构)加以保存,也就是完成了将数据流离散化、结构化的过程。BitToken主要由以下几个部分组成:(1)初始化:完成对数据结构的初始化,主要是分配内存,变量赋初值。(2)主体的数据流分析:逐字符的进行判断,确定数据的归属类型。(3)元素的分析:提取元素的名称、属性和值域。(4)释放:主要是对内存的释放。3.3数据结构typedefstructBitTokenContext{char*strBuffer;//当前正在处理的HTML代码intbufferLength;intcurPosition;char*global_strBuffer;//全局HTML代码intglobal_bufferLength;intglobal_curPosition;BitTokenList*tokenList;//元素节点链表BitTokenList*tokenList_tail;BitPTagListpTagList;//元素名称表,指向静态数据}BitTokenContext,*BitPTokenContext;BitTokenContext是用于存储当前待分析网页全局属性的数据结构,其中TokenList是核心的元素节点链表。词法分析的目的就是生成这样一个链表。下面给出该链表的数据结构,是很简单的双向链表。typedefstructTokenList{BitToken*token;//元素节点structTokenList*priou;structTokenList*next;}BitTokenList,*BitPTokenList;以下是元素节点的数据结构:typedefstructBitToken{inttype;//节点类型,如定义的HTML_BODY,HTML_TXT等。char*pData;//如果是HTML_TXT型元素,则为其内容,否则为空BOOLend;//是否是结束元素,如</body>BitTokenAttrList*attrList;//元素属性链表,因为可能有多个属性,所以使用链表存储BitTokenAttrList*attrList_tail;}BitToken,*BitPToken;请注意,以上出现tail标记的指针变量,如BitTokenList*tokenList_tail等,其作用是用于保存链表结尾节点指针,便于在释放内存时,直接找到链尾,提高了算法的效率。[6]3.4算法3.4.1基本算法首先介绍基本的算法:(1)从存储网页的字符串中,顺序读入一个字符。(2)如果遇到<,认为遇到TAG(元素),处理该元素,使用函数Token_ConsumTag(),处理完毕后,指针移到该元素尾。(3)如果遇到回车、空格,则跳过。(4)如果遇到>,则跳过(不应该出现此情况,为了容错)。(5)如果非以上情况,则认为遇到文字,处理这段文字,使用函数Token_Consum_PlainText()。处理完毕,指针指向下一个元素首。(6)循环以上操作,直到该网页分析完毕。由此看来,主算法十分简单而清晰,主要是Token_ConsumTag()和Token_Consum_PlainText()这两个函数起关键作用,由于其中涉及到许多细节问题,此处不予详述。3.4.2词法分析的结果下面是一段很简单的HTML代码。<html><imgsrc=“go.gif”width=200height=100><aHREF="http://www.263.net">首都在线</a></html>分析后,数据存储结构如下:图3-1HTML词法分析的结果可以看到,词法分析的结果是一个元素节点链表,每个节点的属性也形成了一个链表,元素节点是有先后顺序的,元素属性的先后顺序是无所谓的。词法分析将网页的文本数据流以清晰的结构表现出来,这样,在后面的应用中就可以很容易的遍历各节点,并轻松地获得各元素节点的属性。HTML词法分析程序通常应用于浏览器设计、网页制作和软件设计等领域。正如前面所述,HTML词法分析是浏览器设计的基础环节之一,但并非最重要和最具难度的环节,若想开发出效果较好的浏览器产品,还要在布局和GUI设计上多下功夫。3.5布局在对HTML脚本语法分析结束后,要对页面进行布局。在整个浏览器中,Layout属于关键技术之一。Mozilla提供了强大的布局功能,在系统自带的测试用例中,有非常复杂的页面(如:CSSstyles,DeeplyNestedTables,Frames,DHTML等),MozillaV14可以对这些页面进行出色的布局;而RedHatLinux6.2自带的Netscape4.7x在显示这些页面时,错误比较多,甚至不能显示。3.6几种基于JAVA的HTMLParser(1)HTMLParserHTMLParser实现即时HTML语法分析程序,提供了一组Tag对象,这些对象可以深入解析一棵可搜索的结构树。(2)JerichoHTMLParserJerichoHTMLParser是一个简单而功能强大的JavaHTML解析器库,可以分析和处理HTML文档的一部分,包括一些通用的服务器端标签,同时也可以重新生成无法识别的或无效的HTML。它也提供了一个有用的HTML表单分析器。(3)NekoHTMLNekoHTML是一个简单的HTML扫描器和标签补偿器(tagbalancer),使得程序能解析HTML文档并用标准的XML接口来访问其中的信息。这个解析器能扫描HTML文件并“修正”许多作者(人或机器)在编写HTML文档过程中常犯的错误。NekoHTML能增补缺失的父元素、自动用结束标签关闭相应的元素,以及不匹配的内嵌元素标签。NekoHTML的开发使用了XercesNativeInterface(XNI),后者是Xerces2的实现基础。(4)HtmlCleanerHtmlCleaner是一个开源的Html文档解析器。HtmlCleaner能够重新排序每个元素然后生成结构良好(Well-Formed)的XML文档。默认情况下它遵循的是类似于大部份web浏览器为创建文档对象模型所使用的规则。然而,用户可以提供自定义tag和规则组来进行过滤和匹配。第四章系统分析4.1需求分析4.1.1功能需求(1)用户在URL框中输入网址,敲回车键后,在地址栏中显示网页。(2)用户点击地址栏中的超链接,则显示目标页面,并在URL框中显示当前网页地址。(3)用户点击刷新按钮时,重新显示当前页面。(4)当用户点击后退按钮时,显示上一个页面,并在URL框中显示上一个网页的地址。(5)当用户点击前进按钮时,显示下一个页面,并在URL框中显示下一个网页地址。(6)用户点击打开菜单项,则打开本地文件,在显示框中显示网页,并在地址栏中显示当前网址。(7)用户点击保存菜单项,则将当前显示页面保存到本地磁盘。4.1.2其他需求(1)要求前进和后退可进行多步。(2)要求网页显示时内容要快一点显示,不能让用户等待长时间而窗口无任何显示。(3)要求能查看所获取网页的源代码。(4)要求能实现对非法网站的过滤。4.1.3其他说明(1)因开发时间的限制,对需求的优先级进行说明如下:1)浏览功能为第一优先级,必须完成,即功能需求的1~6必须完成。2)其他需求中的功能为第二优先级,尽量完成,如时间紧迫,则可暂时放弃。即可放弃功能需求的7。(2)统一资源定位符URLURL=http://+Host字段+/+ScriptName字段+/+PathInfo字段+Query字段Host字段标识Web服务器和Web服务器应用程序的主机名ScriptName字段指定Web服务器应用程序PathInfo字段指出报文在Web服务器应用程序内的目标Query字段部分包含一组命名的数据。例如:http://www.Tsite.com/art/gallery.dll/mammals?animal=dog&color=black~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~HostScriptNamePathInfoQuery4.2总体设计4.2.1设计目的以需求分析说明书为依据,参照开发环境和使用环境的特点,划分出子系统,并确定出类。描述子系统间的协作关系,以及类间的协作关系。4.2.2环境说明(1)使用环境SUSELinux操作系统。此操作系统界面友好,且有较成熟的消息传递机制可供利用。(2)开发环境MyEclipse5.0+TomCat5.0.28。MyEclipse编译器提供了大量的插件,可以方便的进行开发。4.2.3子系统(1)子系统的划分依据需求分析说明书和环境特点,将本系统划分为5个子系统:1)用户界面子系统用于输入控制2)控制子系统系统控制,以及消息传递3)网页显示子系统显示网页4)网页获取子系统从远端Web服务器获取文件,以及文件信息5)数据管理子系统包括保存打开本地文件(2)子系统间的协作关系子系统间的协作关系为:用户在浏览器界面进行操作,控制子系统回根据用户做出的动作去执行相应的功能,例如,用户在地址栏输入URL地址点击“GO”按钮或直接按回车,控制子系统检测到了用户的行为,调用网页显示子系统,网页显示子系统完成把从服务器获取的HTML流解析并显示给用户,见图4-1。图4-1子系统协作图4.2.4实现功能的设计(1)GUI的划分在用户界面子系统中,MiniBrowser采用了容器嵌套容器,在不同的容器上添加不同的布局管理器的布局策略,这样就可以在一个拥有简单布局管理器的JFrame上加入其他子容器如:JPanel,将之放入BorderLayout的某个区域,这样就可以在子容器上继续添加组件或容器了。根据这种设计方法可以设计出美观的界面。考虑到JavaSwing提供的控件,划分出八类,如表4-1所示:表4-1组件复用表功能所复用的组件主菜单复用JMenu组件菜单项复用JMenuItem组件工具栏复用JPanel组件按钮复用JButton组件URL标签复用JLabel组件URL输入框复用JTextField组件状态栏复用JPanel组件文件打开及保存复用JFileChooser组件(2)在控制子系统中,充分利用操作系统的消息传递机制,并考虑到JAVA程序消息传递特点,得到事件响应模块(复用各种事件监听器组件),其负责在监听器中协调系统的运行。消息的传递交由浏览器所在的操作系统完成,这个模块主要由程序中的各个事件响应方法组成,如actionGo()方法就是实现用户点击GO按钮或是在地址栏按下回车的事件响应方法。(3)在网页获取子系统中实现HTML资源的获取,包括获取远程资源和本地资源。在系统中的实现就是获取HTML资源的URL。(4)在网页显示子系统中,划分出两个模块:1)远程网页显示,负责显示万维网上的网页,并接受获取网页的请求。具体实现就是通过网页获取子系统中得到的URL进行打开连接并显示。2)本地HTML资源的显示。具体实现是通过把本地的资源拷贝到Tomcat下的临时文件夹,再用“http://localhost:8080+文件名”的字符窜构建的URL来打开连接并显示。(5)在数据管理子系统中,负责实现网页的保存。具体实现就是把浏览器当前显示的页面保存到本地硬盘的某个路径中。4.2.5使用Tomcat访问本地文件访问本地文件时使用虚拟本机地址LocalHost来代表本地的主机地址,Tomcat服务器的端口设为8080。手动地把文件部署到Tomcat服务器上,也就是把HTML文件放到%TOMCAT_HOME%/webapps/ROOT目录中,访问这个文件时,在URL地址栏输入:http://localhost:8080/+要访问的html文件名即可。在程序中如果需要打开某个本地文件,则通过程序把该文件拷贝到了%TOMCAT_HOME%/webapps/ROOT/temp目录中,然后才访问,退出程序后这些文件自动删除。[7]4.3详细设计4.3.1设计目的以总体设计说明书为依据,进一步对系统的设计进行细化,并给出主要类的详细规格说明。4.3.2功能模块的实现(1)用户界面的实现:采用JavaSwing技术编写图形界面。(2)网页获取功能模块的实现:1)获取Internet上的资源:首先通过文本工具栏获取要请求的URL地址,检查这个URL的合法性(可在这个阶段实现对非法网站的屏蔽),然后再调用网页显示模块显示网页。2)获取本地HTML资源:首先通过文件选择器选择要打开的文件,然后通过程序将其虚拟的部署到Tomcat服务器上,然后调用网页显示模块显示网页。(3)网页显示模块的实现:使用JAVA提供的JEditorPane类,创建其对象,并调用方法setContentType设置显示内容为“text/html”,然后根据网页获取模块得到的URL调用JEditorPane对象的setPage方法显示该URL的信息。(4)打开及保存的实现:新建文件选择器类JFileChooser,通过设置该组件对象的showOpenDialog和showSaveDialog方法来确定实现打开或是保存的功能,只有在点击文件选择器对象的“确定”按钮后才执行具体的操作,如点击“取消”按钮,则返回到打开或保存之前的操作状态。4.3.3系统模型时序图如图4-2所示,在用户向浏览器发送请求后,浏览器会向由URL所指定的Web服务器请求一次或多次网页信息,Web服务器返回的HTML页面交给浏览器,由浏览器显示给用户,完成了用户上网的动作。图4-2浏览器的时序图浏览器MiniBrowser初始化后的主界面如图4-3所示:图4-3浏览器主界面4.3.4开发环境CPU:Inter(R)Celeron(R)CPU2.80GHz内存:1GB硬盘:40GB操作系统:SUSELinuxEnterpriseDesktop10(i586)使用工具:MyEclipse5.5+Tomcat5.0.284.3.5关于JEditorPane的使用说明javax.swing.JEditorPane类可编辑各种内容的文本组件。此组件使用EditorKit的实现来完成其操作。对于给予它的各种内容,它能有效地将其形态变换为适当的文本编辑器种类。该编辑器在任意给定时间的内容类型都由当前已安装的EditorKit确定。如果将内容设置为新的URL,则使用其类型来确定加载该内容所应使用的EditorKit。默认情况下,已知下列内容类型:text/plain纯文本,即无法识别给定的类型时所使用的默认值。在此情况下使用的工具包是DefaultEditorKit的扩展,可生成有换行的纯文本视图。text/htmlHTML文本。在此情况下使用的工具包是类javax.swing.text.html.HTMLEditorKit,支持HTML3.2。text/rtfRTF文本。在此情况下使用的工具包是类javax.swing.text.rtf.RTFEditorKit,它提供了对多样化文本格式(RichTextFormat)的有限支持。有多种方式可将内容加载到此组件中。可使用setPage方法来初始化URL组件。在这种情况下,将根据该URL来确定内容类型,并且设置为该内容类型所注册的EditorKit。通过调用setContentType方法来设置显示内容类型。如果通过setPage方法加载内容,则其内容类型已根据URL的规范进行了设置。如果直接加载文件,则期望在加载前就已设置内容类型。[8]4.4编码这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。并且仔细测试编写出的每一个模块[9]。在本阶段,以设计文档为依据,充分利用操作系统和JAVA提供的便利进行编码。大量的类复用了编译器提供的组件,节省了编码时间。而对于控制类和起基础作用的几个位于底层的类,严格按照详细说明书的说明进行编码。各单元编码结束后,将进行单元测试。因为条件有限,本系统采用的方法是每编写一个模块或增加一个组件就进行测试,要求做到代码覆盖。单元测试结束后,进行系统组装,得到了一个完整的软件——MiniBrowser。4.5测试4.5.1测试目的依据用户需求,设计测试用例,对软件进行系统级测试。并根据测试结果填写测试的测试结果栏。4.5.2测试环境测试环境:CPU:Inter(R)Celeron(R)CPU2.80GHz内存:1GB硬盘:40GB操作系统:SUSELinuxEnterpriseDesktop10(i586)使用工具:MyEclipse5.5+Tomcat5.0.28浏览器首要的任务是浏览网页,所以本次测试的重点是浏览功能与保存功能,在这些测试的基础上再进行其他功能的测试。4.5.3测试用例表4-2测试用例表测试用例预期结果实际结果输入网址http://192.168.1.218/briupsh/index.htm看到杰普网站首页看到杰普网站首页,如图4-4所示点击网页上的超链转到该网页转到该网页点击刷新按钮重新显示该页重新显示该页点击后退按钮显示上一网页及相应网址显示上一网页及相应网址点击前进按钮显示下一网页及相应网址显示下一网页及相应网址点击后退按钮多次多个网页及相应网址成功显示多个网页及相应网址成功显示点击前进按钮多次多个网页及相应网址成功显示多个网页及相应网址成功显示打开本地文件显示该文件及相应文件路径显示该文件及相应文件路径输入http://abc显示找不到文件对话框显示找不到文件对话框,如图4-5所示点击保存菜单项显示保存对话框,成功保存网页显示保存对话框,成功保存网页点击关于菜单项显示浏览器对应的版本对话框显示浏览器对应的版本对话框点击退出菜单项退出浏览器退出浏览器图4-4浏览器进入指定网址图4-5载入网页出错结论MiniBrowser在分析阶段,从信息域、功能域、行为域多角度分析了用户需求,建立了系统结构图、这使设计者比较正确、全面的理解与表述了用户需求。设计依据分析说明书,编码依据设计说明书,每个阶段均经过严格的复审,因此做出的软件满足用户提出的需求。划分的子系统功能明确。子系统中的类基本上只与同一子系统中的其他类传递信息,子系统间的信息通过控制子系统传递。设计的各个类功能简单,属性数和方法数少。类的接口少,独立性非常强,除控制类外,每个类均可被其他的系统复用。继承类主要继承JAVA提供的Swing组件,而Swing提供的组件库是经典控件库,保证了本系统有着良好的继承关系。本系统在设计时,以用户需求为根本,同时考虑到了实现环境,因此设计较有针对性。设计出来的系统在编码时可以大量复用已有组件,大大节省了编码时间,而且降低了错误发生的几率,也考虑了以后的扩充,在整体结构设计时都为以后的扩充做了准备。因此,本次设计为软件的进一步开发提供了一个比较好的基础。但是本系统仍然存在着不少的缺点,例如:本系统只能对静态的HTML页面进行解析,对JavaScript、JSP和XML等不支持,而且对书签、字体、字符编码等功能也没有实现。在未来,读者可以在此基础上对MiniBrowser进行扩展。如果读者对本系统的HTML解析和显示效果不满意,可以编写自己的HTML词法分析器来解析HTML。想要实现保存书签的功能,只需在Swing和IO上下点功夫就可以实现。对JavaScript的支持可以在JavaScript插件与浏览器的结合方面找一些资料来解决这个问题。总体上来说,本系统的很多地方都可以进行扩展。本课题所涉及的相关技术包含了一个广泛的技术集合,三个多月的研究与设计工作只是管中窥豹。未来,随着技术的不断发展,相信后人会有更出色的表现。也希望本次毕业设计能给对浏览器感兴趣的同学带来一定的参考价值。参考文献[1]CayS.Horstmann,GaryCornell.CoreJava2,VolumeI-Fundamentals北京:机械工业出版社2004[2]张海潘.软件工程导论.北京:清华大学出版社.2003[3]刘亚滨.精通Eclipse.北京:电子工业出版社.2004[4]BruceEckel.ThinkinginJava(FourthEdition).Prentice-Hall.2002[5]usciano,Kennedy.HTML和XML权威指南.北京:清华大学出版社.2004[6]jamky,嵌入式浏览器的发展,CSDN下载频道http://download.csdn.net/source/129742[7]孙卫琴,李洪成.Tomcat与JavaWeb开发技术详解.北京:电子工业出版社.2007[8]CayS.Horstmann,GaryCornell.CoreJava2,VolumeⅡ-Fundamentals北京:机械工业出版社2004[9]王少锋.面向对象技术UML教程.北京:清华大学出版社.2004[10]殷兆麟周智仁等.Java网络应用编程.北京:高等教育出版社.2004[11]CbuckMusciano,Billkennedy.Tomcat与JavaWeb开发技术详解.北京:清华大学出版社.2004[12]RobertEckstein.CreatingWizardDialogswithJavaSwing.OReilly2005[13]Cays.Horstmann.CayCornell.CoreJava2VolumeI-Fundamentals.SeventhEdition.PrenticeHallPTR.2004[14]StephenR.SoftwareEngineeringwithJava.北京:机械工业出版社.1999[15]郑人杰.实用软件工程.北京:清华大学出版社.1997谢辞在本课题的研究设计的过程中,得到了许多老师和同学的帮助,借此机会向他们表示诚挚的谢意。首先要感谢我的指导老师赵志燕老师。在整个课题的设计过程中,赵老师对我热心指导、严格要求,在课题的各方面都给予我宝贵的建议,帮助我建立了正确的设计思想,保证了课题的研究和开发工作的顺利完成。同时还要感谢我的同学和朋友对我的关心和帮助,感谢寇志峰、纪永等同学在前期的分析和最后的测试中所做的大量工作,为课题的开发与设计建立了良好的基础。最后还要感谢培育我四年的内蒙古工业大学,感谢学校给我提供了实习和这次毕业设计的机会。学校给我提供了很好的学习和生活环境,让我在这四年里学习到了很多计算机方面的相关知识,为了方便我们的学习,学校还专门为我们设立了计算机系专用机房,方便了我们课余时间的上机实验,这使我们可以把所学到的知识付诸于实践。另外在毕业设计的这段时间,我得到了信息工程学院计算机系的很多老师的帮助,在此也对他们表示感谢。<img>src<img>widthheightgo.gif200100hrefhttp://www.263.comtexthref首都在线</a>本科毕业设计说明书�学校代码:10128学号:040201123题目:浏览器的设计与实现学生姓名:任飞学院:信息工程学院系别:计算机系专业:计算机科学与技术班级:计算机04-1指导教师:赵志燕讲师年金波工程师
/
本文档为【学位论文—浏览器的设计与实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索