




已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
內(nèi)蒙古工業(yè)大學(xué)本科畢業(yè)設(shè)計說明書學(xué)校代碼: 10128學(xué) 號: 本科畢業(yè)設(shè)計說明書題 目:瀏覽器的設(shè)計與實現(xiàn)學(xué)生姓名:學(xué) 院:信息工程學(xué)院系 別:計算機系專 業(yè):計算機科學(xué)與技術(shù)班 級:摘 要隨著網(wǎng)絡(luò)的不斷發(fā)展,網(wǎng)頁瀏覽器作為上網(wǎng)的所必需的軟件之一,已經(jīng)得到了廣泛地應(yīng)用。在IE獨霸一方的背景下,國內(nèi)外各式各樣的瀏覽器軟件都如雨后春筍般孕育而生。網(wǎng)頁瀏覽器的開發(fā)與應(yīng)用更是成為了計算機領(lǐng)域近年來的一大熱點。本文圍繞著瀏覽器的編程與開發(fā),講述了在JDK5.0中進行瀏覽器開發(fā)的一些技術(shù)和筆者的一些心得,著重講解了筆者在畢業(yè)設(shè)計中所實現(xiàn)的一個瀏覽器程序MiniBrower。本文用軟件工程的開發(fā)過程,詳細論述了瀏覽器的分析、設(shè)計及代碼實現(xiàn),最終實現(xiàn)一個具有能同時瀏覽多個網(wǎng)頁,可查詢歷史瀏覽記錄,可以實現(xiàn)打開和保存網(wǎng)頁,超鏈接監(jiān)聽并響應(yīng),和對非法網(wǎng)站的過濾等基本功能的瀏覽器。 本文以一個實際運作的瀏覽器 MiniBrowser 為主軸介紹瀏覽器的設(shè)計理念與方法,同時講述瀏覽器中各個模塊如何互相協(xié)同運作,來完成一個呈現(xiàn)網(wǎng)頁的工作。HTML詞法分析是本文著重討論的技術(shù)問題,給出了詳盡的數(shù)據(jù)結(jié)構(gòu),程序流程,并且還介紹了一些基于Java的HTML解析器。另外,Java Swing技術(shù)也是本文介紹的瀏覽器所使用的一種主要的技術(shù),通過使用各個組件,并增加監(jiān)聽器和事件處理等操作,最終形成一個具有一定事物處理能力的瀏覽器的界面部分。關(guān)鍵字:瀏覽器;Java Swing;HTML詞法分析;事件 AbstractWith the unceasing development of network, the Homepage Browser, which becomes one of the essential software for surf online, has already obtained widely application. Under the leading position of IE, all kinds of domestic and foreign browser software have appeared like mushroom growth breeding lives. The homepage browsers development and the application have become a computer domain big hot spot in recent years.This article revolves Browsers programming and development, narrated some technologies and authors attainments of carrying the browser in JDK5.0 development, explained browser procedureMiniBrower which emphatically in the achievement of graduation project.This article uses software engineerings performance procedure, elaborated Browsers analysis, design and code achievement, finally achieved the Browser which has simultaneously glances over many homepages. It can inquire the history to glance over the record, realize opens and preserves the homepage, the ultra connection monitors and responds, with to illegal website filtration and so on. This article take actual operations browserMiniBrowser as the main axle,introduced browsers design idea and method, simultaneously narrated how each module does coordinate the operation mutually in the browser, completes one to present the homepage the work. The HTML lexical analysis is the technical question which discusses emphatically, has given the exhaustive construction of data, the procedure flow, and also introduced some based on the Java HTML revolver. One kind of main technology which moreover, this article is also introduces the Swing technology of JAVA, through uses each module, and increases operations and so on monitor and event processing, final had certain thing handling ability browsers contact surface part to form. Key words: Browser;Java Swing; HTML lexical analysis; Event目 錄引 言1第一章 緒 論21.1目前瀏覽器產(chǎn)品的發(fā)展現(xiàn)狀21.2MiniBrowser瀏覽器的組成和各部份功能說明31.2.1 詞法分析31.2.2語法分析31.2.3 GUI及軟件界面41.2.4布局算法41.3開發(fā)的前期策劃61.3.1平臺的選取61.3.2確定要實現(xiàn)的基本功能6第二章 開發(fā)工具及開發(fā)技術(shù)82.1面向?qū)ο筌浖こ谈攀?2.2 Eclipse簡介92.3 Java Swing概述103.1 HTML概述133.2 HTML詞法分析器Bit Token的組成及其功能133.3數(shù)據(jù)結(jié)構(gòu)143.4算法153.4.1 基本算法153.4.2詞法分析的結(jié)果163.5布局183.6幾種基于JAVA的HTML Parser18第四章 系統(tǒng)分析204.1需求分析204.1.1 功能需求204.1.2其他需求214.1.3其他說明214.2 總體設(shè)計224.2.1設(shè)計目的224.2.2環(huán)境說明224.2.3子系統(tǒng)224.2.4實現(xiàn)功能的設(shè)計244.2.5使用Tomcat訪問本地文件264.3詳細設(shè)計274.3.1設(shè)計目的274.3.2功能模塊的實現(xiàn)274.3.3系統(tǒng)模型284.3.4開發(fā)環(huán)境304.3.5關(guān)于JEditorPane的使用說明304.4編碼314.5測試314.5.1測試目的314.5.2測試環(huán)境324.5.3 測試用例32結(jié) 論36參考文獻38謝 辭40內(nèi)蒙古工業(yè)大學(xué)本科畢業(yè)設(shè)計說明書引 言當(dāng)前,信息化浪潮正在全球范圍內(nèi)興起,一個以計算機網(wǎng)絡(luò)為核心的信息時代正向我們走來。在Internet飛速發(fā)展的今天,互聯(lián)網(wǎng)成為人們快速獲取、發(fā)布和傳遞信息的重要渠道,從而倍受人們的重視,而互聯(lián)網(wǎng)上信息的查找又要通過瀏覽器的瀏覽來實現(xiàn),所以本文通過對當(dāng)下流行的瀏覽器的模擬設(shè)計和實現(xiàn)來讓大家對網(wǎng)絡(luò)及網(wǎng)絡(luò)資源的認識,以及瀏覽器的各個功能的實現(xiàn)有一個大概的認識。瀏覽器是一個基于C/S架構(gòu)的應(yīng)用軟件,其最基本的功能,就是能夠?qū)⒁蛱鼐W(wǎng)上的眾多資源,例如網(wǎng)頁上的內(nèi)容與信息或是在線服務(wù)等,呈現(xiàn)給使用者并讓使用者得以使用存在于因特網(wǎng)上的各項服務(wù)。因此透過網(wǎng)絡(luò)傳輸數(shù)據(jù)對瀏覽器來說,是相當(dāng)重要且必備的一項能力。瀏覽器作為重要的系統(tǒng)應(yīng)用軟件是不可或缺的。但目前,瀏覽器產(chǎn)品的市場被少數(shù)國外大公司壟斷,眾多的小型瀏覽器也尚處于發(fā)展期,而國內(nèi)的自主技術(shù)的瀏覽器更屈指可數(shù),剛剛進入實用階段。迫切需要更多的人來關(guān)注瀏覽器技術(shù),開發(fā)中國自主知識產(chǎn)權(quán)的瀏覽器產(chǎn)品。為了支持跨平臺訪問網(wǎng)頁的需求,本課題完成跨平臺的瀏覽器開發(fā),實現(xiàn)個人能同時瀏覽多個網(wǎng)頁,可查詢歷史瀏覽記錄,對非法網(wǎng)站的過濾等功能的瀏覽器。本文闡述了瀏覽器開發(fā)的關(guān)鍵技術(shù),并詳細說明MiniBrowser的實際開發(fā)過程,和技術(shù)細節(jié)。第一章 緒 論1.1目前瀏覽器產(chǎn)品的發(fā)展現(xiàn)狀 常見的桌面瀏覽器有微軟的Internet Explorer,網(wǎng)景的Netscape,開放源碼的Mozilla FireFox,以及opera,mosaic,Hotjava,字符模式的lynx等。其中IE,Opera已有嵌入式版本,以上的大多數(shù)瀏覽器均有跨多平臺的版本。這些桌面型瀏覽器功能參差不齊,但大多都能實現(xiàn)基本的瀏覽功能。其中IE與Netscape對HTML頁面的顯示效果均堪稱完美(對于XML,WML等標準的網(wǎng)頁瀏覽,本文不予討論)。與完美的瀏覽效果,功能豐富,支持多種媒體格式和視音頻插件等優(yōu)點形成對立的是,這些瀏覽器龐大的體積和對機器配置的高要求;這也是桌面瀏覽器和嵌入式瀏覽器最大的區(qū)別。另外,桌面型瀏覽器通常是基于通用的操作系統(tǒng),用于桌面電腦如PC機、MAC機等;而嵌入式瀏覽器通?;趯S孟到y(tǒng)。需要指出的是,在網(wǎng)上常看到的一些瀏覽器,如Netcaptor,魔裝網(wǎng)神,騰訊,颶風(fēng),F(xiàn)antasia,金山WPS office的瀏覽器等等,均為使用IE內(nèi)核的瀏覽器,使用了多頁面多線程的方式,降低了系統(tǒng)資源的耗費,方便了瀏覽,但軟件本身沒有使用多少技術(shù),可以用Delphi,VB等工具輕易開發(fā)出來(如果不要求完善的功能,只需簡單到拖一個IE控件過去就行了),這也體現(xiàn)了微軟的COM+及ActiveX技術(shù)的強大。1.2MiniBrowser瀏覽器的組成和各部份功能說明1.2.1 詞法分析HTML(HyperText Markup Language,超文本標記語言)詞法分析是瀏覽器設(shè)計的基礎(chǔ)環(huán)節(jié)之一,也是整個設(shè)計過程中重要的前端工作,其數(shù)據(jù)結(jié)構(gòu)的擬定與接下來的語法分析和布局算法密切相關(guān),詞法分析的效率與準確性、容錯性也關(guān)系到整個瀏覽器設(shè)計的質(zhì)量。MiniBrowser采用了JDK(Java Development Kit,Java開發(fā)包)附帶的HTML解析器解析從服務(wù)器返回的HTML數(shù)據(jù)。1.2.2語法分析在大型的瀏覽器中,語法分析通常是獨立的模塊,但在某些小型的瀏覽器中,語法分析通常是與布局混合在一起的,即一邊進行語法分析,一邊布局,不設(shè)立相應(yīng)的數(shù)據(jù)結(jié)構(gòu)來存儲語法分析的結(jié)果。本文所講述的MiniBrowser也是采用這種設(shè)計思想。另外,語法分析對布局的算法有直接的指導(dǎo)意義。1.2.3 GUI及軟件界面瀏覽器無疑是一個圖形界面的大需求者,選擇好的GUI(Graphics User Interface,圖形用戶界面)環(huán)境實屬不易,為了能夠?qū)崿F(xiàn)專有的功能,瀏覽器開發(fā)者往往還要對基礎(chǔ)的GUI庫進行包裝、改寫,甚至寫自己的控件。所有這些,是需要有專業(yè)的GUI庫開發(fā)經(jīng)驗的專職人員來完成。GUI的功勞第一在于軟件的操作界面,如窗口、菜單、工具條、滾動條等。第二在于主瀏覽窗體中的圖形元素的輸出(通常以自畫控件的方式)。前者通常直接使用GUI庫中的已有控件,編程難度很小,后者主要利用基本的點線函數(shù),編程難度比較大。在MiniBrower中使用Java Swing技術(shù)編寫瀏覽器的圖形界面,而做圖形界面首先要考慮的就是選擇一個合適的布局管理器。與VB不同,JDK沒有表單設(shè)計器,需要通過代碼來定制布局管理器來放置用戶界面組件所在的位置。1.2.4布局算法本文中的布局應(yīng)理解為界面輸出前的預(yù)演和處理位置等信息的算法,而不是具體的畫圖和界面輸出。布局算法的好壞直接關(guān)系到界面的輸出效果,但布局算法也是要根據(jù)GUI所能實現(xiàn)的輸出效果來設(shè)計的,所以,GUI往往成為系統(tǒng)的瓶頸,如果GUI提供的支持有限,即使有再好的布局算法,也是紙上談兵,無用武之地。在Swing中有以下幾種簡單的布局管理器:(1)FlowLayout流式布局管理器FlowLayout是最簡單的布局管理器,按照組件的添加次序?qū)⑺鼈儚淖蟮接业胤胖迷谌萜髦?。?dāng)?shù)竭_容器邊界時,組件將放置在下一行中。(2)BorderLayout邊界布局管理器BorderLayout為在容器中放置組件提供了一個稍微復(fù)雜的布局方案。BorderLayout把容器分為五個區(qū)域:東、南、西、北和中。東占據(jù)容器的右側(cè),南占據(jù)容器的下側(cè),以此類推。(3)GridLayout網(wǎng)格布局管理器GridLayout將容器分割成許多列和行,組件被填充到每個網(wǎng)格中。添加到容器中的組件首先放置在左上角的網(wǎng)格中,然后從左到右放置其他組件,直至占滿該行的所有網(wǎng)格,接著繼續(xù)在下一行中從左到右放置組件。(4)CardLayout卡片式布局管理器CardLayout將界面看作一系列的卡片,在任何時候只有其中一張卡片是可見的,這張卡片占據(jù)容器的整個區(qū)域。當(dāng)某個容器被創(chuàng)建后,就會有一個默認的布局管理器。Window、Frame和Dialog的默認布局管理器是BorderLayout,Panel和Applet的默認布局管理器是FlowLayout??梢哉{(diào)用容器的setLayout()方法來設(shè)置容器的布局管理器。11.3開發(fā)的前期策劃以下的工作均是建立在大量的調(diào)查基礎(chǔ)上的,是瀏覽器開發(fā)前期準備工作所解決的問題。1.3.1平臺的選取目前的商業(yè)化嵌入式操作系統(tǒng)功能完善,但使用費用高昂,使用Linux內(nèi)核的嵌入式操作系統(tǒng)不僅功能強大,便于開發(fā)移植,而且費用低廉,基于Linux的軟件系統(tǒng)已日漸成熟,也有相應(yīng)的窗口系統(tǒng)可以使用,使用PC上的Linux來進行瀏覽器開發(fā),是再好不過的了,軟件從一臺PC移植到另外一臺設(shè)備只需更改配置信息,重新編譯一下就可以了(前提是使用的函數(shù)庫、開發(fā)包具有JDK1.5或更高的版本)。1.3.2確定要實現(xiàn)的基本功能鑒于對瀏覽器開發(fā)難度的充分考慮,以及現(xiàn)有人員的水平,擬定實現(xiàn)以下功能,以及需要考慮但暫不予實現(xiàn)的功能。需要實現(xiàn)的包括:(1) 界面:包括窗口,菜單,輸入框,工具條,滾動條等的支持。(2) 實現(xiàn)簡單網(wǎng)頁的布局:實現(xiàn)對簡單網(wǎng)頁的查看。(3) 支持基本IO(Input/Output,輸入/輸出)。(4) 支持對非法網(wǎng)站的過濾。需要考慮的功能:(1) JSP(Java Server Page,Java服務(wù)頁面)支持(2) 漢字支持(3) Java Script的支持(4) 表單支持(5) 頁面元素的消息響應(yīng)第二章 開發(fā)工具及開發(fā)技術(shù)2.1面向?qū)ο筌浖こ谈攀?軟件工程是一門研究如何用系統(tǒng)化、規(guī)范化、產(chǎn)業(yè)化等工程原則和方法實施軟件開發(fā)和維護的學(xué)科。1968年秋季,NATO的科技委員會召集了近50名一流的編程人員、計算機科學(xué)家和工業(yè)界巨頭,討論和制定擺脫“軟件危機”的對策。在那次會議上第一次提出了軟件工程(Software Engineering)這個概念。到今年,軟件工程整整走過了33年的歷程。軟件研究人員不斷探索新的軟件開發(fā)方法,至今已形成八類軟件開發(fā)方法,例如最早的Parnas方法。但這一方法不能獨立使用,只能作為其它方法的補充。 軟件開發(fā)的面向?qū)ο蠓椒ㄓ?0世紀60年代后期提出,到20世紀90年代前半期,面向?qū)ο筌浖こ坛蔀殚_發(fā)人員的首選范型。 面向?qū)ο蠓椒ㄊ且环N自底向上和自頂向下相結(jié)合的方法,它以對象建模為基礎(chǔ),不僅考慮了輸入、輸出數(shù)據(jù)結(jié)構(gòu),實際上也包含了所有對象的數(shù)據(jù)結(jié)構(gòu)。OO技術(shù)在需求分析、可維護性和可靠性這三個軟件開發(fā)的關(guān)鍵環(huán)節(jié)和質(zhì)量指標上有了實質(zhì)性的突破。2面向?qū)ο蠓椒ǖ奶攸c有:(1)自底向上的歸納(2)自頂向下的分解(3)基礎(chǔ)是對象模型(4)需求分析徹底(5)可維護性大大改善2.2 Eclipse簡介Eclipse 是一個開放源代碼的、基于 Java 的可擴展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務(wù),用于通過插件和組件構(gòu)建開發(fā)環(huán)境。幸運的是,Eclipse 附帶了一個標準的插件集,包括 Java 開發(fā)工具(Java Development Tools,JDT)。雖然大多數(shù)用戶很樂于將 Eclipse 當(dāng)作 Java IDE 來使用,但 Eclipse 的目標不僅限于此。Eclipse 還包括插件開發(fā)環(huán)境(Plug-in Development Environment,PDE),這個組件主要針對希望擴展 Eclipse 的軟件開發(fā)人員,因為它允許他們構(gòu)建與 Eclipse 環(huán)境無縫集成的工具。由于 Eclipse 中的每樣?xùn)|西都是插件,對于給 Eclipse 提供插件,以及給用戶提供一致和統(tǒng)一的集成開發(fā)環(huán)境而言,所有工具開發(fā)人員都具有同等的發(fā)揮場所。這種平等和一致性并不僅限于 Java 開發(fā)工具。盡管 Eclipse 是使用 Java 語言開發(fā)的,但它的用途并不限于 Java 語言;例如,支持諸如 C/C+、COBOL 和 Eiffel 等編程語言的插件已經(jīng)可用,或預(yù)計會推出。Eclipse 框架還可用來作為與軟件開發(fā)無關(guān)的其他應(yīng)用程序類型的基礎(chǔ),比如內(nèi)容管理系統(tǒng)?;?Eclipse 的應(yīng)用程序的突出例子是 IBM 的 WebSphere Studio Workbench,它構(gòu)成了 IBM Java 開發(fā)工具系列的基礎(chǔ)。例如,WebSphere Studio Application Developer 添加了對 JSP、servlet、EJB、XML、Web 服務(wù)和數(shù)據(jù)庫訪問的支持。Eclipse采用的技術(shù)是IBM公司開發(fā)的(SWT),這是一種基于Java的窗口組件,類似Java本身提供的AWT和Swing窗口組件;不過IBM聲稱SWT比其他Java窗口組件更有效率。Eclipse的用戶界面還使用了GUI中間層JFace,從而簡化了基于SWT的應(yīng)用程序的構(gòu)建。 Eclipse的插件機制是輕型軟件組件化架構(gòu)。在富客戶機平臺上,Eclipse使用插件來提供所有的附加功能,例如支持Java以外的其他語言。 已有的分離的插件已經(jīng)能夠支持C/C+(CDT)、Perl、Ruby,Python、telnet和數(shù)據(jù)庫開發(fā)。插件架構(gòu)能夠支持將任意的擴展加入到 現(xiàn)有環(huán)境中,例如配置管理,而決不僅僅限于支持各種編程語言。32.3 Java Swing概述在java 1.0剛剛出現(xiàn)的時候,包含了一個用于基本GUI程序設(shè)計的類庫,Sun將它成為抽象窗口工具箱(Abstract Window Toolkit,AWT)?;続WT庫采用將處理用戶界面元素的任務(wù)委派給每個目標平臺(Windows、Solaris等等)的本地GUI工具箱的方式,由本地GUI工具箱負責(zé)用戶界面的元素的創(chuàng)建和動作。例如,如果使用最初的AWT在Java窗口中放置一個文本框,就會有一個底層的“對等體”文本框,用它來實際地處理文本輸入。從理論上說,結(jié)果程序可以運行在任何平臺上,但觀感(look and feel)的效果卻依賴于目標平臺。 對于簡單的應(yīng)用程序來說,基于對等體方法的效果還是不錯的,但是,要想編寫依賴于本地用戶界面元素的高質(zhì)量、可移植的圖形庫就會顯現(xiàn)出缺陷了。例如,菜單、滾動條和文本域這些用戶界面元素,在不同的平臺上,操作行為存在著一些微妙的差別。因此,要想給予用戶一致的、可預(yù)見性的界面操作方式是相當(dāng)困難的。而且,有些圖形環(huán)境并沒有像Windows或Macintosh這樣豐富的用戶界面組件集合。這也就將基于對等體的可移植庫限制在了一定的范圍內(nèi)。其結(jié)果是使AWT構(gòu)建的GUI應(yīng)用程序看起來沒有Windows或其他應(yīng)用程序顯示的那么漂亮,也沒有提供那些平臺用戶所認知的功能。更加糟糕的是,在不同平臺上的AWT用戶界面庫中存在著不同的Bug。 1996年,Netscape創(chuàng)建了一種稱為IFC(Internet Foundation Class)的GUI庫,它采用了AWT完全不同的工作方式。它將按鈕、菜單這樣的用戶界面元素繪制到空白窗口上,而對等體只需要創(chuàng)建和繪制窗口。因此,Netscape的IFC部件在程序運行的所有平臺上的外觀和動作都一樣。Sun和Netscape合作完善了這種方式,創(chuàng)建了一個名為Swing的用戶界面庫。Swing可作為Java 1.1的擴展部分使用,現(xiàn)已成為JDK 1.2標準庫的一部分。 現(xiàn)在,Swing是不對等基于GUI工具箱的正式名字。它已是Java基礎(chǔ)類庫(Java Foundation Class,JFC)的一部分。完整的JFC十分龐大,其中包含的內(nèi)容遠遠大于Swing GUI工具箱。JFC特性不僅僅包含了Swing組件,而且還包含了一個可訪問的API、一個2D API和一個可拖拽的API。當(dāng)然,在用戶屏幕上顯示基于Swing用戶界面的元素要比顯示AWT的基于對等體組件的速度慢一些。但對于任何一臺現(xiàn)代的計算機來說,微小的速度差別無妨大礙。另外,由于下列幾點無法抗拒的原因,驅(qū)使人們選擇Swing:(1)Swing擁有一個豐富、便捷的用戶界面元素集合。(2)Swing對底層平臺依賴的很少,因此與平臺相關(guān)的bug很少。(3)Swing給予不同平臺的用戶一致的感官效果。4第三章 HTML的分析3.1 HTML概述超文本標記語言(HyperText Markup Language,HTML)是一種用于文檔布局和超文本鏈接規(guī)范的語言。它定義了特殊的、嵌入式指令的語法和放置方法,瀏覽器中不會顯示這些指令,但是HTML可以告訴瀏覽器該如何顯示文檔的內(nèi)容,如文本、圖像及其他支持的媒體等,還有如何通過特殊的超文本鏈接來制作交互式的文檔,這些鏈接可以把這些文檔和其他因特網(wǎng)資源鏈接起來。HTML詞法分析是瀏覽器設(shè)計的基礎(chǔ)環(huán)節(jié)之一,也是整個設(shè)計過程中重要的前端工作,其數(shù)據(jù)結(jié)構(gòu)的擬定與接下來的語法分析和布局算法密切相關(guān),詞法分析的效率與準確性、容錯性也關(guān)系到整個瀏覽器設(shè)計的質(zhì)量。53.2 HTML詞法分析器Bit Token的組成及其功能Bit Token是Netbit Browser的HTML詞法分析器,使用標準C編程,Netbit Browser是基于Linux/Gtk的瀏覽器,也是一個開放源碼項目。Bit Token作為Netbit Browser的詞法分析部份,負責(zé)對接收的HTML代碼進行詞法分析,主要的目的是提取網(wǎng)頁中元素的名稱及其屬性,并以恰當(dāng)?shù)男问剑窗匆欢ǖ臄?shù)據(jù)結(jié)構(gòu))加以保存,也就是完成了將數(shù)據(jù)流離散化、結(jié)構(gòu)化的過程。Bit Token主要由以下幾個部分組成:(1)初始化:完成對數(shù)據(jù)結(jié)構(gòu)的初始化,主要是分配內(nèi)存,變量賦初值。(2)主體的數(shù)據(jù)流分析:逐字符的進行判斷,確定數(shù)據(jù)的歸屬類型。(3)元素的分析:提取元素的名稱、屬性和值域。(4)釋放:主要是對內(nèi)存的釋放。3.3數(shù)據(jù)結(jié)構(gòu)typedef struct BitTokenContextchar * strBuffer; /當(dāng)前正在處理的HTML代碼int bufferLength;int curPosition;char * global_strBuffer; /全局HTML代碼int global_bufferLength;int global_curPosition;BitTokenList *tokenList; /元素節(jié)點鏈表BitTokenList *tokenList_tail;BitPTagListpTagList;/元素名稱表,指向靜態(tài)數(shù)據(jù)BitTokenContext,*BitPTokenContext;BitTokenContext是用于存儲當(dāng)前待分析網(wǎng)頁全局屬性的數(shù)據(jù)結(jié)構(gòu),其中TokenList是核心的元素節(jié)點鏈表。詞法分析的目的就是生成這樣一個鏈表。下面給出該鏈表的數(shù)據(jù)結(jié)構(gòu),是很簡單的雙向鏈表。typedef struct TokenList BitToken *token; /元素節(jié)點 struct TokenList *priou; struct TokenList *next;BitTokenList,*BitPTokenList;以下是元素節(jié)點的數(shù)據(jù)結(jié)構(gòu):typedef struct BitTokenint type; /節(jié)點類型,如定義的HTML_BODY,HTML_TXT等。char *pData; /如果是HTML_TXT型元素,則為其內(nèi)容,否則為空BOOL end; /是否是結(jié)束元素,如BitTokenAttrList *attrList; /元素屬性鏈表,因為可能有多個屬性,所以使用鏈表存儲BitTokenAttrList *attrList_tail;BitToken,*BitPToken; 請注意,以上出現(xiàn)tail標記的指針變量,如BitTokenList * tokenList_tail等,其作用是用于保存鏈表結(jié)尾節(jié)點指針,便于在釋放內(nèi)存時,直接找到鏈尾,提高了算法的效率。63.4算法3.4.1 基本算法首先介紹基本的算法:(1) 從存儲網(wǎng)頁的字符串中,順序讀入一個字符。(2) 如果遇到 ,則跳過(不應(yīng)該出現(xiàn)此情況,為了容錯)。(5) 如果非以上情況,則認為遇到文字,處理這段文字,使用函數(shù)Token_Consum_PlainText()。處理完畢,指針指向下一個元素首。(6) 循環(huán)以上操作,直到該網(wǎng)頁分析完畢。由此看來,主算法十分簡單而清晰,主要是Token_ConsumTag()和Token_Consum_PlainText()這兩個函數(shù)起關(guān)鍵作用,由于其中涉及到許多細節(jié)問題,此處不予詳述。3.4.2詞法分析的結(jié)果下面是一段很簡單的HTML代碼。首都在線分析后,數(shù)據(jù)存儲結(jié)構(gòu)如下:srcwidthheightgo.gif200100hreftexthref首都在線圖3-1 HTML詞法分析的結(jié)果可以看到,詞法分析的結(jié)果是一個元素節(jié)點鏈表,每個節(jié)點的屬性也形成了一個鏈表,元素節(jié)點是有先后順序的,元素屬性的先后順序是無所謂的。詞法分析將網(wǎng)頁的文本數(shù)據(jù)流以清晰的結(jié)構(gòu)表現(xiàn)出來,這樣,在后面的應(yīng)用中就可以很容易的遍歷各節(jié)點,并輕松地獲得各元素節(jié)點的屬性。HTML詞法分析程序通常應(yīng)用于瀏覽器設(shè)計、網(wǎng)頁制作和軟件設(shè)計等領(lǐng)域。正如前面所述,HTML詞法分析是瀏覽器設(shè)計的基礎(chǔ)環(huán)節(jié)之一,但并非最重要和最具難度的環(huán)節(jié),若想開發(fā)出效果較好的瀏覽器產(chǎn)品,還要在布局和GUI設(shè)計上多下功夫。3.5布局 在對HTML腳本語法分析結(jié)束后,要對頁面進行布局。在整個瀏覽器中,Layout屬于關(guān)鍵技術(shù)之一。Mozilla提供了強大的布局功能,在系統(tǒng)自帶的測試用例中,有非常復(fù)雜的頁面(如:CSS styles, Deeply Nested Tables, Frames, DHTML等),MozillaV14可以對這些頁面進行出色的布局;而RedHat Linux6.2自帶的Netscape4.7x在顯示這些頁面時,錯誤比較多,甚至不能顯示。3.6幾種基于JAVA的HTML Parser(1)HTML ParserHTML Parser實現(xiàn)即時HTML語法分析程序,提供了一組Tag對象,這些對象可以深入解析一棵可搜索的結(jié)構(gòu)樹。(2)Jericho HTML ParserJericho HTML Parser是一個簡單而功能強大的Java HTML解析器庫,可以分析和處理HTML文檔的一部分,包括一些通用的服務(wù)器端標簽,同時也可以重新生成無法識別的或無效的HTML。它也提供了一個有用的HTML表單分析器。(3)NekoHTMLNekoHTML是一個簡單的HTML掃描器和標簽補償器(tag balancer) ,使得程序能解析HTML文檔并用標準的XML接口來訪問其中的信息。這個解析器能掃描HTML文件并“修正”許多作者(人或機器)在編寫HTML文檔過程中常犯的錯誤。NekoHTML能增補缺失的父元素、自動用結(jié)束標簽關(guān)閉相應(yīng)的元素,以及不匹配的內(nèi)嵌元素標簽。NekoHTML的開發(fā)使用了 Xerces Native Interface (XNI),后者是Xerces2的實現(xiàn)基礎(chǔ)。(4)HtmlCleanerHtmlCleaner是一個開源的Html文檔解析器。HtmlCleaner能夠重新排序每個元素然后生成結(jié)構(gòu)良好(Well-Formed)的 XML文檔。默認情況下它遵循的規(guī)則是類似于大部份web瀏覽器為創(chuàng)建文檔對象模型所使用的規(guī)則。然而,用戶可以提供自定義tag和規(guī)則組來進行過濾和匹配。第四章 系統(tǒng)分析4.1需求分析4.1.1 功能需求(1)用戶在URL框中輸入網(wǎng)址,敲回車鍵后,在地址欄中顯示網(wǎng)頁。(2)用戶點擊地址欄中的超鏈接,則顯示目標頁面,并在URL框中顯示當(dāng)前網(wǎng)頁地址。(3)用戶點擊刷新按鈕時,重新顯示當(dāng)前頁面。(4)當(dāng)用戶點擊后退按鈕時,顯示上一個頁面,并在URL框中顯示上一個網(wǎng)頁的地址。(5)當(dāng)用戶點擊前進按鈕時,顯示下一個頁面,并在URL框中顯示下一個網(wǎng)頁地址。(6)用戶點擊打開菜單項,則打開本地文件,在顯示框中顯示網(wǎng)頁,并在地址欄中顯示當(dāng)前網(wǎng)址。(7)用戶點擊保存菜單項,則將當(dāng)前顯示頁面保存到本地磁盤。4.1.2其他需求(1)要求前進和后退可進行多步。(2)要求網(wǎng)頁顯示時內(nèi)容要快一點顯示,不能讓用戶等待長時間而窗口無任何顯示。(3)要求能查看所獲取網(wǎng)頁的源代碼。(4)要求能實現(xiàn)對非法網(wǎng)站的過濾。4.1.3其他說明(1)因開發(fā)時間的限制,對需求的優(yōu)先級進行說明如下:1)瀏覽功能為第一優(yōu)先級,必須完成,即功能需求的16必須完成。2)其他需求中的功能為第二優(yōu)先級,盡量完成,如時間緊迫,則可暫時放棄。即可放棄功能需求的7。(2)統(tǒng)一資源定位符URLURL = http:/ + Host字段 + / + ScriptName字段 + / + PathInfo字段 + Query字段Host字段標識Web服務(wù)器和Web服務(wù)器應(yīng)用程序的主機名ScriptName字段指定Web服務(wù)器應(yīng)用程序PathInfo字段指出報文在Web服務(wù)器應(yīng)用程序內(nèi)的目標Query字段部分包含一組命名的數(shù)據(jù)。例如: http:/www.T/art/gallery.dll/mammals?animal=dog&color=black Host ScriptName PathInfo Query4.2 總體設(shè)計4.2.1設(shè)計目的 以需求分析說明書為依據(jù),參照開發(fā)環(huán)境和使用環(huán)境的特點,劃分出子系統(tǒng),并確定出類。描述子系統(tǒng)間的協(xié)作關(guān)系,以及類間的協(xié)作關(guān)系。4.2.2環(huán)境說明(1)使用環(huán)境SUSE Linux操作系統(tǒng)。此操作系統(tǒng)界面友好,且有較成熟的消息傳遞機制可供利用。(2)開發(fā)環(huán)境MyEclipse5.0+TomCat 5.0.28。MyEclipse編譯器提供了大量的插件,可以方便的進行開發(fā)。4.2.3子系統(tǒng)(1)子系統(tǒng)的劃分依據(jù)需求分析說明書和環(huán)境特點,將本系統(tǒng)劃分為5個子系統(tǒng):1)用戶界面子系統(tǒng) 用于輸入控制2)控制子系統(tǒng) 系統(tǒng)控制,以及消息傳遞3)網(wǎng)頁顯示子系統(tǒng) 顯示網(wǎng)頁4)網(wǎng)頁獲取子系統(tǒng) 從遠端Web服務(wù)器獲取文件,以及文件信息5)數(shù)據(jù)管理子系統(tǒng) 包括保存打開本地文件(2)子系統(tǒng)間的協(xié)作關(guān)系子系統(tǒng)間的協(xié)作關(guān)系為:用戶在瀏覽器界面進行操作,控制子系統(tǒng)回根據(jù)用戶做出的動作去執(zhí)行相應(yīng)的功能,例如,用戶在地址欄輸入URL地址點擊“GO”按鈕或直接按回車,控制子系統(tǒng)檢測到了用戶的行為,調(diào)用網(wǎng)頁顯示子系統(tǒng),網(wǎng)頁顯示子系統(tǒng)完成把從服務(wù)器獲取的HTML流解析并顯示給用戶,見圖4-1。圖4-1 子系統(tǒng)協(xié)作圖4.2.4實現(xiàn)功能的設(shè)計(1)GUI的劃分在用戶界面子系統(tǒng)中,MiniBrowser采用了容器嵌套容器,在不同的容器上添加不同的布局管理器的布局策略,這樣就可以在一個擁有簡單布局管理器的JFrame上加入其他子容器如:JPanel,將之放入BorderLayout的某個區(qū)域,這樣就可以在子容器上繼續(xù)添加組件或容器了。根據(jù)這種設(shè)計方法可以設(shè)計出美觀的界面。考慮到Java Swing提供的控件,劃分出八類,如表4-1所示:表4-1 組件復(fù)用表 功能所復(fù)用的組件主菜單 復(fù)用JMenu組件菜單項 復(fù)用JMenuItem組件工具欄 復(fù)用JPanel組件按鈕 復(fù)用JButton組件URL標簽 復(fù)用JLabel組件URL輸入框 復(fù)用JTextField組件狀態(tài)欄 復(fù)用JPanel組件文件打開及保存 復(fù)用JFileChooser組件(2)在控制子系統(tǒng)中,充分利用操作系統(tǒng)的消息傳遞機制,并考慮到JAVA程序消息傳遞特點,得到事件響應(yīng)模塊(復(fù)用各種事件監(jiān)聽器組件),其負責(zé)在監(jiān)聽器中協(xié)調(diào)系統(tǒng)的運行。消息的傳遞交由瀏覽器所在的操作系統(tǒng)完成,這個模塊主要由程序中的各個事件響應(yīng)方法組成,如actionGo()方法就是實現(xiàn)用戶點擊GO按鈕或是在地址欄按下回車的事件響應(yīng)方法。(3)在網(wǎng)頁獲取子系統(tǒng)中實現(xiàn)HTML資源的獲取,包括獲取遠程資源和本地資源。在 系統(tǒng)中的實現(xiàn)就是獲取HTML資源的URL。(4)在網(wǎng)頁顯示子系統(tǒng)中,劃分出兩個模塊:1)遠程網(wǎng)頁顯示,負責(zé)顯示萬維網(wǎng)上的網(wǎng)頁,并接受獲取網(wǎng)頁的請求。具體實現(xiàn)就是通過網(wǎng)頁獲取子系統(tǒng)中得到的URL進行打開連接并顯示。2)本地HTML資源的顯示。具體實現(xiàn)是通過把本地的資源拷貝到Tomcat下的臨時文件夾,再用“http:/localhost:8080+文件名”的字符竄構(gòu)建的URL來打開連接并顯示。(5)在數(shù)據(jù)管理子系統(tǒng)中,負責(zé)實現(xiàn)網(wǎng)頁的保存。具體實現(xiàn)就是把瀏覽器當(dāng)前顯示的頁面保存到本地硬盤的某個路徑中。4.2.5使用Tomcat訪問本地文件 訪問本地文件時使用虛擬本機地址LocalHost來代表本地的主機地址,Tomcat服務(wù)器的端口設(shè)為8080。手動地把文件部署到Tomcat服務(wù)器上,也就是把HTML文件放到%TOMCAT_HOME%/webapps/ROOT目錄中,訪問這個文件時,在URL地址欄輸入:http:/localhost:8080/+要訪問的html文件名即可。在程序中如果需要打開某個本地文件,則通過程序把該文件拷貝到了%TOMCAT_HOME%/webapps/ROOT/temp目錄中,然后才訪問,退出程序后這些文件自動刪除。74.3詳細設(shè)計4.3.1設(shè)計目的 以總體設(shè)計說明書為依據(jù),進一步對系統(tǒng)的設(shè)計進行細化,并給出主要類的詳細規(guī)格說明。4.3.2功能模塊的實現(xiàn)(1) 用戶界面的實現(xiàn):采用Java Swing技術(shù)編寫圖形界面。(2) 網(wǎng)頁獲取功能模塊的實現(xiàn):1)獲取Internet上的資源:首先通過文本工具欄獲取要請求的URL地址,檢查這個URL的合法性(可在這個階段實現(xiàn)對非法網(wǎng)站的屏蔽),然后再調(diào)用網(wǎng)頁顯示模塊顯示網(wǎng)頁。2)獲取本地HTML資源:首先通過文件選擇器選擇要打開的文件,然后通過程序?qū)⑵涮摂M的部署到Tomcat服務(wù)器上,然后調(diào)用網(wǎng)頁顯示模塊顯示網(wǎng)頁。(3) 網(wǎng)頁顯示模塊的實現(xiàn):使用JAVA提供的JEditorPane類,創(chuàng)建其對象,并調(diào)用方法setContentType設(shè)置顯示內(nèi)容為“text/html”,然后根據(jù)網(wǎng)頁獲取模塊得到的URL調(diào)用JEditorPane對象的setPage方法顯示該URL的信息。(4) 打開及保存的實現(xiàn):新建文件選擇器類JFileChooser,通過設(shè)置該組件對象的showOpenDialog和showSaveDialog方法來確定實現(xiàn)打開或是保存的功能,只有在點擊文件選擇器對象的“確定”按鈕后才執(zhí)行具體的操作,如點擊“取消”按鈕,則返回到打開或保存之前的操作狀態(tài)。4.3.3系統(tǒng)模型時序圖如圖4-2所示,在用戶向瀏覽器發(fā)送請求后,瀏覽器會向由URL所指定的Web服務(wù)器請求一次或多次網(wǎng)頁信息,Web服務(wù)器返回的HTML頁面交給瀏覽器,由瀏覽器顯示給用戶,完成了用戶上網(wǎng)的動作。圖4-2 瀏覽器的時序圖瀏覽器MiniBrowser初始化后的主界面如圖4-3所示: 圖4-3 瀏覽器主界面4.3.4開發(fā)環(huán)境CPU: Inter(R) Celeron(R) CPU 2.80GHz內(nèi)存:1GB硬盤:40GB操作系統(tǒng):SUSE Linux Enterprise Desktop 10(i586)使用工具:MyEclipse 5.5+Tomcat 5.0.284.3.5關(guān)于JEditorPane的使用說明javax.swing.JEditorPane類可編輯各種內(nèi)容的文本組件。此組件使用 EditorKit 的實現(xiàn)來完成其操作。對于給予它的各種內(nèi)容,它能有效地將其形態(tài)變換為適當(dāng)?shù)奈谋揪庉嬈鞣N類。該編輯器在任意給定時間的內(nèi)容類型都由當(dāng)前已安裝的 EditorKit 確定。如果將內(nèi)容設(shè)置為新的 URL,則使用其類型來確定加載該內(nèi)容所應(yīng)使用的 EditorKit。默認情況下,已知下列內(nèi)容類型: text/plain 純文本,即無法識別給定的類型時所使用的默認值。在此情況下使用的工具包是 DefaultEditorKit 的擴展,可生成有換行的純文本視圖。 text/html HTML 文本。在此情況下使用的工具包是類 javax.swing.text.html.HTMLEditorKit,支持 HTML 3.2。 text/rtf RTF 文本。在此情況下使用的工具包是類 javax.swing.text.rtf.RTFEditorKit,它提供了對多樣化文本格式 (Rich Text Format) 的有限支持。 有多種方式可將內(nèi)容加載到此組件中??墒褂?setPage 方法來初始化 URL 組件。在這種情況下,將根據(jù)該 URL 來確定內(nèi)容類型,并且設(shè)置為該內(nèi)容類型所注冊的 EditorKit。通過調(diào)用 setContentType 方法來設(shè)置顯示內(nèi)容類型。如果通過 setPage 方法加載內(nèi)容,則其內(nèi)容類型已根據(jù) URL 的規(guī)范進行了設(shè)置。如果直接加載文件,則期望在加載前就已設(shè)置內(nèi)容類型。 84.4編碼 這個階段的關(guān)鍵任務(wù)是寫出正確的容易理解、容易維護的程序模塊。并且仔細測試編寫出的每一個模塊9。在本階段,以設(shè)計文檔為依據(jù),充分利用操作系統(tǒng)和JAVA提供的便利進行編碼。大量的類復(fù)用了編譯器提供的組件,節(jié)省了編碼時間。而對于控制類和起基礎(chǔ)作用的幾個位于底層的類,嚴格按照詳細說明書的說明進行編碼。 各單元編碼結(jié)束后,將進行單元測試。因為條件有限,本系統(tǒng)采用的方法是每編寫一個模塊或增加一個組件就進行測試,要求做到代碼覆蓋。單元測試結(jié)束后,進行系統(tǒng)組裝,得到了一個完整的軟件MiniBrowser。4.5測試4.5.1測試目的 依據(jù)用戶需求,設(shè)計測試用例,對軟件進行系統(tǒng)級測試。并根據(jù)測試結(jié)果填寫測試表格的測試結(jié)果欄。4.5.2測試環(huán)境測試環(huán)境:CPU: Inter(R) Celeron(R) CPU 2.80GHz內(nèi)存:1GB 硬盤:40GB 操作系統(tǒng):SUSE Linux Enterprise Desktop 10(i586) 使用工具:MyEclipse 5.5+Tomcat 5.0.28 瀏覽器首要的任務(wù)是瀏覽網(wǎng)頁,所以本次測試的重點是瀏覽功能與保存功能,在這些測試的基礎(chǔ)上再進行其他功能的測試。4.5.3 測試用例表4-2 測試用例表測試用例預(yù)期結(jié)果實際結(jié)果輸入網(wǎng)址18/briupsh/index.htm看到杰普網(wǎng)站首頁看到杰普網(wǎng)站首頁,如圖4-4所示點擊網(wǎng)頁上的超鏈轉(zhuǎn)到
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國房產(chǎn)規(guī)劃行業(yè)市場現(xiàn)狀供需分析及重點企業(yè)投資評估規(guī)劃分析研究報告
- 紅河一中數(shù)學(xué)試卷
- 國際高中英文數(shù)學(xué)試卷
- 買車簽合同寫訂金協(xié)議
- 專營店承包協(xié)議合同書
- 財物丟失理賠協(xié)議書模板
- 蔬菜收購承包協(xié)議合同書
- 遵義農(nóng)村自建房合同范本
- 車輛免責(zé)協(xié)議書范本模板
- 認購協(xié)議不屬于格式合同
- 2025年校長職級考試題及答案
- 統(tǒng)借統(tǒng)還資金管理辦法
- 國家能源集團采購管理規(guī)定及實施辦法知識試卷
- 2023-2024學(xué)年四川省成都市高新區(qū)八年級(下)期末數(shù)學(xué)試卷
- 2025年廣西繼續(xù)教育公需科目考試試題和答案
- 2024年廣州市南沙區(qū)社區(qū)專職招聘考試真題
- 心理健康科普常識課件
- 山東醫(yī)藥技師學(xué)院招聘筆試真題2024
- (高清版)DB13(J)∕T 8556-2023 建設(shè)工程消耗量標準及計算規(guī)則(園林綠化工程)
- GB/T 1094.1-2013電力變壓器第1部分:總則
- 經(jīng)濟責(zé)任審計報告
評論
0/150
提交評論