基于Java的瀏覽器的設(shè)計(jì)與實(shí)現(xiàn)后臺(tái)功能子系統(tǒng)_第1頁
基于Java的瀏覽器的設(shè)計(jì)與實(shí)現(xiàn)后臺(tái)功能子系統(tǒng)_第2頁
基于Java的瀏覽器的設(shè)計(jì)與實(shí)現(xiàn)后臺(tái)功能子系統(tǒng)_第3頁
基于Java的瀏覽器的設(shè)計(jì)與實(shí)現(xiàn)后臺(tái)功能子系統(tǒng)_第4頁
基于Java的瀏覽器的設(shè)計(jì)與實(shí)現(xiàn)后臺(tái)功能子系統(tǒng)_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第頁共29頁1前言在Internet飛速發(fā)展的今天,互聯(lián)網(wǎng)成為人們快速獲取、發(fā)布和傳遞信息的重要渠道,從而倍受人們的重視,而互聯(lián)網(wǎng)上信息的查找又要通過瀏覽器的瀏覽來實(shí)現(xiàn),所以本文通過對(duì)當(dāng)下流行的瀏覽器的模擬設(shè)計(jì)和實(shí)現(xiàn)來讓大家對(duì)網(wǎng)絡(luò)及網(wǎng)絡(luò)資源的認(rèn)識(shí),以及瀏覽器的各個(gè)功能的實(shí)現(xiàn)有一個(gè)大概的認(rèn)識(shí)。瀏覽器是一個(gè)基于C/S架構(gòu)的應(yīng)用軟件,其最基本的功能,就是能夠?qū)⒁蛱鼐W(wǎng)上的眾多資源,例如網(wǎng)頁上的內(nèi)容與信息或是在線服務(wù)等,呈現(xiàn)給使用者并讓使用者得以使用存在于因特網(wǎng)上的各項(xiàng)服務(wù)。因此透過網(wǎng)絡(luò)傳輸數(shù)據(jù)對(duì)瀏覽器來說,是相當(dāng)重要且必備的一項(xiàng)能力。瀏覽器作為重要的系統(tǒng)應(yīng)用軟件是不可或缺的。但目前,瀏覽器產(chǎn)品的市場(chǎng)被少數(shù)國外大公司壟斷,眾多的小型瀏覽器也尚處于發(fā)展期,而國內(nèi)的自主技術(shù)的瀏覽器更屈指可數(shù),剛剛進(jìn)入實(shí)用階段。迫切需要更多的人來關(guān)注瀏覽器技術(shù),開發(fā)中國自主知識(shí)產(chǎn)權(quán)的瀏覽器產(chǎn)品。為了進(jìn)一步了解瀏覽器的工作原理,本課題完成模擬瀏覽器的開發(fā),實(shí)現(xiàn)瀏覽互聯(lián)網(wǎng)上的資源以及本地資源,可查詢歷史瀏覽記錄等功能的瀏覽器。本文闡述了瀏覽器開發(fā)的關(guān)鍵技術(shù),并詳細(xì)說明本課題Browser的實(shí)際開發(fā)過程,和技術(shù)細(xì)節(jié)。1.1系統(tǒng)概述蒂姆·伯納斯·李(TimBerners-Lee)是第一個(gè)使用超文本來分享資訊的人,他于1990年發(fā)明了首個(gè)網(wǎng)頁瀏覽器WorldWideWeb。在1991年3月,瀏覽器的發(fā)展就和網(wǎng)絡(luò)的發(fā)展聯(lián)系在一起了。當(dāng)時(shí),網(wǎng)頁瀏覽器被視為能夠處理CERN龐大電話簿的實(shí)用工具。在與用戶互動(dòng)的前提下,網(wǎng)頁瀏覽器根據(jù)gopher和telnet協(xié)議,允許所有用戶能輕易地瀏覽別人所編寫的網(wǎng)站??墒牵浜笤跒g覽器中加插圖像的舉動(dòng),使之成為了互聯(lián)網(wǎng)的“殺手級(jí)應(yīng)用”。NCSAMosaic使互聯(lián)網(wǎng)得以迅速發(fā)展。它最初是一個(gè)只在Unix運(yùn)行的圖像瀏覽器;很快便發(fā)展到在AppleMacintosh和MicrosoftWindows亦能運(yùn)行。1993年9月發(fā)表了1.0版本。網(wǎng)景公司在1994年10月發(fā)布了他們的旗艦產(chǎn)品網(wǎng)景導(dǎo)航者。但第二年Netscape的優(yōu)勢(shì)就被削弱了。錯(cuò)失了互聯(lián)網(wǎng)浪潮的微軟在這個(gè)時(shí)候匆促的購入了Spyglass公司的技術(shù),改成InternetExplorer。1998年,網(wǎng)景公司創(chuàng)造了Mozilla,至2002年,它已發(fā)展成一個(gè)穩(wěn)定而強(qiáng)大的互聯(lián)網(wǎng)套件。Mozilla1.0的出現(xiàn)被視為其里程碑。同年,衍生出Phoenix(后改名Firebird,最后又改為Firefox)。Firefox1.0于2004年發(fā)表。及至2008年,Mozilla及其衍生產(chǎn)品約占20%網(wǎng)絡(luò)交通量。Opera是一個(gè)靈巧的瀏覽器。它發(fā)布于1996年。目前它在手持電腦上十分流行。它在個(gè)人電腦網(wǎng)絡(luò)瀏覽器市場(chǎng)上的占有率則稍微較小。2003年,微軟宣布不會(huì)再推出的獨(dú)立的InternetExplorer,但會(huì)變成視窗平臺(tái)的一部分;同時(shí)也不會(huì)再推出任何Macintosh版本的InternetExplorer。不過,于2005年初,微軟卻改變了計(jì)劃,并宣布將會(huì)為WindowsXP、WindowsServer2003和WindowsVista操作系統(tǒng)推出InternetExplorer7。2011年3月15日,微軟推出了InternetExplorer9的正式版,2011年4月11日,InternetExplorer9才推出1個(gè)月,微軟又推出了InternetExplorer10的首個(gè)預(yù)覽版本。本系統(tǒng)模擬現(xiàn)有的瀏覽器,實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)頁瀏覽,包括本地網(wǎng)頁和遠(yuǎn)程網(wǎng)絡(luò)網(wǎng)頁,添加收藏夾等功能,目的在于使我們了解并掌握瀏覽器的工作原理,充分利用已經(jīng)學(xué)到的知識(shí)實(shí)現(xiàn)功能!1.2Browser瀏覽器的組成和各部分功能說明1.2.1詞法分析HTML(HyperTextMarkupLanguage,超文本標(biāo)記語言)詞法分析是瀏覽器設(shè)計(jì)的基礎(chǔ)環(huán)節(jié)之一,也是整個(gè)設(shè)計(jì)過程中重要的前端工作,其數(shù)據(jù)結(jié)構(gòu)的擬定與接下來的語法分析和布局算法密切相關(guān),詞法分析的效率與準(zhǔn)確性、容錯(cuò)性也關(guān)系到整個(gè)瀏覽器設(shè)計(jì)的質(zhì)量。Browser采用了JDK(JavaDevelopmentKit,Java開發(fā)包)附帶的HTML解析器解析從服務(wù)器返回的HTML數(shù)據(jù)。1.2.2語法分析在大型的瀏覽器中,語法分析通常是獨(dú)立的模塊,但在某些小型的瀏覽器中,語法分析通常是與布局混合在一起的,即一邊進(jìn)行語法分析,一邊布局,不設(shè)立相應(yīng)的數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)語法分析的結(jié)果。本文所講述的Browser也是采用這種設(shè)計(jì)思想。另外,語法分析對(duì)布局的算法有直接的指導(dǎo)意義。1.2.3GUI及軟件界面圖形用戶界面(GraphicalUserInterface,簡(jiǎn)稱GUI)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶接口。與早期計(jì)算機(jī)使用的命令行界面相比,圖形界面對(duì)于用戶來說在視覺上更易于接受。瀏覽器無疑是一個(gè)圖形界面的大需求者,選擇好的GUI環(huán)境非常重要,為了能夠?qū)崿F(xiàn)專有的功能,瀏覽器開發(fā)者往往還要對(duì)基礎(chǔ)的GUI庫進(jìn)行包裝、改寫,甚至寫自己的控件。所有這些,是需要有專業(yè)的GUI庫開發(fā)經(jīng)驗(yàn)的專職人員來完成。GUI的功勞第一在于軟件的操作界面,如窗口、菜單、工具條、滾動(dòng)條等。第二在于主瀏覽窗體中的圖形元素的輸出(通常以自畫控件的方式)。前者通常直接使用GUI庫中的已有控件,編程難度很小,后者主要利用基本的點(diǎn)線函數(shù),編程難度比較大。在JavaWebBrower中使用JavaSwing技術(shù)編寫瀏覽器的圖形界面,而做圖形界面首先要考慮的就是選擇一個(gè)合適的布局管理器。JDK沒有表單設(shè)計(jì)器,需要通過代碼來定制布局管理器來放置用戶界面組件所在的位置。GUI的廣泛應(yīng)用是當(dāng)今計(jì)算機(jī)發(fā)展的重大成就之一,他極大地方便了非專業(yè)用戶的使用。人們從此不再需要死記硬背大量的命令,取而代之的是可以通過窗口、菜單、按鍵等方式來方便地進(jìn)行操作。而嵌入式GUI具有下面幾個(gè)方面的基本要求:輕型、占用資源少、高性能、高可靠性、便于移植、可配置等特點(diǎn)。1.2.4布局算法布局算法的好壞直接關(guān)系到界面的輸出效果,但布局算法也是要根據(jù)GUI所能實(shí)現(xiàn)的輸出效果來設(shè)計(jì)的,所以,GUI往往成為系統(tǒng)的關(guān)鍵,如果GUI提供的支持有限,即使有再好的布局算法,也是很難實(shí)現(xiàn)預(yù)想功能的。在JavaSwing中有以下幾種簡(jiǎn)單的布局管理器:(1)BorderLayout邊界布局管理器BorderLayout為在容器中放置組件提供了一個(gè)稍微復(fù)雜的布局方案。BorderLayout把容器分為五個(gè)區(qū)域:東、南、西、北和中。東占據(jù)容器的右側(cè),南占據(jù)容器的下側(cè),以此類推。(2)FlowLayout流式布局管理器FlowLayout是最簡(jiǎn)單的布局管理器,按照組件的添加次序?qū)⑺鼈儚淖蟮接业胤胖迷谌萜髦?。?dāng)?shù)竭_(dá)容器邊界時(shí),組件將放置在下一行中。(3)GridLayout網(wǎng)格布局管理器GridLayout將容器分割成許多列和行,組件被填充到每個(gè)網(wǎng)格中。添加到容器中的組件首先放置在左上角的網(wǎng)格中,然后從左到右放置其他組件,直至占滿該行的所有網(wǎng)格,接著繼續(xù)在下一行中從左到右放置組件。(4)CardLayout卡片式布局管理器CardLayout將界面看作一系列的卡片,在任何時(shí)候只有其中一張卡片是可見的,這張卡片占據(jù)容器的整個(gè)區(qū)域。當(dāng)某個(gè)容器被創(chuàng)建后,就會(huì)有一個(gè)默認(rèn)的布局管理器。Window、Frame和Dialog的默認(rèn)布局管理器是BorderLayout,Panel和Applet的默認(rèn)布局管理器是FlowLayout??梢哉{(diào)用容器的setLayout()方法來設(shè)置容器的布局管理器。1.3開發(fā)的前期策劃1.3.1平臺(tái)的選取Microsoft開發(fā)的Windows是目前世界上用戶最多,且兼容性最強(qiáng)的操作系統(tǒng)。最早的Windows操作系統(tǒng)從1985年就推出了,當(dāng)時(shí)推出的操作系統(tǒng)windows1.0是基于DOS內(nèi)核的操作系統(tǒng)。windows1.0改進(jìn)了微軟以往的命令、代碼系統(tǒng)MicrosoftDiskOperatingSysterm(簡(jiǎn)稱MS-DOS)。MicrosoftWindows是彩色界面的操作系統(tǒng),支持鍵鼠功能。Windows操作系統(tǒng)已被廣大用戶接受,并且在Windows平臺(tái)上的開發(fā)業(yè)較為簡(jiǎn)便,所以本課題選用Windows操作平臺(tái)。1.3.2確定要實(shí)現(xiàn)的基本功能(1)界面:設(shè)計(jì)對(duì)包括窗口、菜單、輸入框、工具條、滾動(dòng)條等的支持的界面(2)實(shí)現(xiàn)簡(jiǎn)單網(wǎng)頁的布局、對(duì)簡(jiǎn)單網(wǎng)頁的查看;(3)具有超鏈接功能;(4)支持對(duì)非法網(wǎng)站的過濾;(5)支持中文漢字;(6)支持JSP、HTML:能夠解析JSP文件和HTML文件;(7)支持JavaScript腳本;(8)支持表單;(9)收藏夾功能;2系統(tǒng)需求分析2.1需求分析2.1.1設(shè)計(jì)目的以需求分析說明書為依據(jù),參照開發(fā)環(huán)境和使用環(huán)境的特點(diǎn),劃分出子系統(tǒng),并確定出類。描述子系統(tǒng)間的協(xié)作關(guān)系,以及類間的協(xié)作關(guān)系。2.1.2功能需求本項(xiàng)目要實(shí)現(xiàn)的功能模塊包括:菜單欄模塊,工具欄模塊,地址欄模塊,瀏覽器選項(xiàng)卡模塊以及收藏夾模塊。1.菜單欄模塊內(nèi)容包括文件菜單,轉(zhuǎn)到菜單,調(diào)整菜單和收藏夾菜單。主要是通過菜單欄的操作實(shí)現(xiàn)網(wǎng)頁的前進(jìn),后退,停止,刷新和轉(zhuǎn)到功能,還包括收藏夾的新建與整理。2.工具欄的功能則是實(shí)現(xiàn)常用的操作,通過點(diǎn)擊工具圖標(biāo)來實(shí)現(xiàn)菜單欄中所有的操作。3.地址欄模塊則用來接收用戶輸入的網(wǎng)站地址,然后將該地址傳給瀏覽器組件,呈現(xiàn)指定的網(wǎng)頁。4.瀏覽器選項(xiàng)卡模塊實(shí)現(xiàn)在同一個(gè)窗體中顯示多個(gè)頁面。5.收藏夾模塊是本設(shè)計(jì)中最重要的一部分,包括整理收藏夾菜單和添加收藏夾菜單,可在程序運(yùn)行的過程中根據(jù)用戶保存的內(nèi)容,填充收藏夾的內(nèi)容,且在網(wǎng)頁瀏覽器重新啟動(dòng)的情況下依舊保留有上次保存的網(wǎng)頁。2.1.3其他需求(1)要求前進(jìn)和后退可進(jìn)行多步。(2)要求網(wǎng)頁顯示時(shí)內(nèi)容要快一點(diǎn)顯示,不能讓用戶等待長時(shí)間而窗口無任何顯示。(3)要求能實(shí)現(xiàn)對(duì)非法網(wǎng)站的過濾。(4)要求支持JavaScript2.1.4其他說明(1)因開發(fā)時(shí)間的限制,對(duì)需求的優(yōu)先級(jí)進(jìn)行說明如下:1)瀏覽功能為第一優(yōu)先級(jí),必須完成,即2.1.2功能需求必須完成。2)其他需求中的功能為第二優(yōu)先級(jí),盡量完成。(2)統(tǒng)一資源定位符URL1)URL=http://+Host字段+/+ScriptName字段+/+PathInfo2)字段+Query字段2)Host字段標(biāo)識(shí)Web服務(wù)器和Web服務(wù)器應(yīng)用程序的主機(jī)名3)ScriptName字段指定Web服務(wù)器應(yīng)用程序4)PathInfo字段指出報(bào)文在Web服務(wù)器應(yīng)用程序內(nèi)的目標(biāo)5)Query字段部分包含一組命名的數(shù)據(jù)。3系統(tǒng)概要設(shè)計(jì)3.1功能結(jié)構(gòu)圖網(wǎng)頁瀏覽器網(wǎng)頁瀏覽器網(wǎng)頁瀏覽器收藏夾主頁前進(jìn)后退停止刷新轉(zhuǎn)到添加收藏夾添加收藏夾創(chuàng)建文件夾選擇收藏夾添加收藏夾新建文件夾重命名移動(dòng)到刪除圖3.1功能結(jié)構(gòu)圖3.2開發(fā)環(huán)境(1)使用環(huán)境Windows操作系統(tǒng)。此操作系統(tǒng)界面友好,使用簡(jiǎn)便,且有較成熟的消息傳遞機(jī)制可供利用。(2)開發(fā)環(huán)境MyEclipse+TomCat6.0.26。MyEclipse編譯器提供了大量的插件,可以方便的進(jìn)行開發(fā)。TomCat用來提供訪問本地文件的虛擬路徑3.3系統(tǒng)時(shí)序圖時(shí)序圖如圖3.2所示,在用戶向?yàn)g覽器發(fā)送請(qǐng)求后,瀏覽器會(huì)向由URL所指定的Web服務(wù)器請(qǐng)求一次或多次網(wǎng)頁信息,Web服務(wù)器返回的HTML頁面交給瀏覽器,由瀏覽器顯示給用戶,完成了用戶上網(wǎng)的動(dòng)作。用戶用戶要求瀏覽網(wǎng)絡(luò)網(wǎng)頁請(qǐng)求網(wǎng)頁信息瀏覽器Web服務(wù)器返回網(wǎng)頁信息顯示網(wǎng)頁圖3.2瀏覽器的時(shí)序圖3.3開發(fā)技術(shù)和開發(fā)工具簡(jiǎn)介3.3.1開發(fā)技術(shù)(1)面向?qū)ο筌浖こ谈攀鲕浖こ淌且婚T研究如何用系統(tǒng)化、規(guī)范化、產(chǎn)業(yè)化等工程原則和方法實(shí)施軟件開發(fā)和維護(hù)的學(xué)科。1968年秋季,NATO的科技委員會(huì)召集了近50名一流的編程人員、計(jì)算機(jī)科學(xué)家和工業(yè)界巨頭,討論和制定擺脫“軟件危機(jī)”的對(duì)策。在此次會(huì)議上第一次提出了軟件工程(SoftwareEngineering)這個(gè)概念。到今天,軟件工程整整走過了46年的歷程。軟件研究人員不斷探索新的軟件開發(fā)方法,至今已形成八類軟件開發(fā)方法,例如最早的Parnas方法。但這一方法不能獨(dú)立使用,只能作為其他方法的補(bǔ)充。軟件開發(fā)的面向?qū)ο蠓椒ㄓ?0世紀(jì)60年代后期提出,到20世紀(jì)90年代前半期,面向?qū)ο筌浖こ桃殉蔀殚_發(fā)人員的首選范型。面向?qū)ο蠓椒ㄊ且环N自底向上和自頂向下相結(jié)合的方法,它以對(duì)象建模為基礎(chǔ),不僅考慮了輸入、輸出數(shù)據(jù)結(jié)構(gòu),實(shí)際上也包含了對(duì)所有對(duì)象的數(shù)據(jù)結(jié)構(gòu)。OO技術(shù)在需求分析、可維護(hù)性和可靠性這三個(gè)軟件開發(fā)的關(guān)鍵環(huán)節(jié)和質(zhì)量指標(biāo)上有了實(shí)質(zhì)性的突破。面向?qū)ο蟮奶攸c(diǎn)有:自底向上的歸納自頂向下的分解基礎(chǔ)是對(duì)象模型需求分析徹底可維護(hù)性大大改善封裝、繼承、多態(tài)、抽象(2)JavaSwing概述在java1.0剛剛出現(xiàn)的時(shí)候,包含了一個(gè)用于基本GUI程序設(shè)計(jì)的類庫,Sun將它成為抽象窗口工具箱(AbstractWindowToolkit,AWT)?;続WT庫采用將處理用戶界面元素的任務(wù)委派給每個(gè)目標(biāo)平臺(tái)(Windows、Solaris等等)的本地GUI工具箱的方式,由本地GUI工具箱負(fù)責(zé)用戶界面的元素的創(chuàng)建和動(dòng)作。例如,如果使用最初的AWT在Java窗口中放置一個(gè)文本框,就會(huì)有一個(gè)底層的“對(duì)等體”文本框,用它來實(shí)際地處理文本輸入。從理論上說,結(jié)果程序可以運(yùn)行在任何平臺(tái)上,但觀感(lookandfeel)的效果卻依賴于目標(biāo)平臺(tái)。對(duì)于簡(jiǎn)單的應(yīng)用程序來說,基于對(duì)等體方法的效果還是不錯(cuò)的,但是,要想編寫依賴于本地用戶界面元素的高質(zhì)量、可移植的圖形庫就會(huì)顯現(xiàn)出缺陷了。例如,菜單、滾動(dòng)條和文本域這些用戶界面元素,在不同的平臺(tái)上,操作行為存在著一些微妙的差別。因此,要想給予用戶一致的、可預(yù)見性的界面操作方式是相當(dāng)困難的。而且,有些圖形環(huán)境并沒有像Windows或Macintosh這樣豐富的用戶界面組件集合。這也就將基于對(duì)等體的可移植庫限制在了一定的范圍內(nèi)。其結(jié)果是使AWT構(gòu)建的GUI應(yīng)用程序看起來沒有Windows或其他應(yīng)用程序顯示的那么漂亮,也沒有提供那些平臺(tái)用戶所認(rèn)知的功能。更加糟糕的是,在不同平臺(tái)上的AWT用戶界面庫中存在著不同的Bug。1996年,Netscape創(chuàng)建了一種稱為IFC(InternetFoundationClass)的GUI庫,它采用了AWT完全不同的工作方式。它將按鈕、菜單這樣的用戶界面元素繪制到空白窗口上,而對(duì)等體只需要?jiǎng)?chuàng)建和繪制窗口。因此,Netscape的IFC部件在程序運(yùn)行的所有平臺(tái)上的外觀和動(dòng)作都一樣。Sun和Netscape合作完善了這種方式,創(chuàng)建了一個(gè)名為Swing的用戶界面庫。Swing可作為Java1.1的擴(kuò)展部分使用,現(xiàn)已成為JDK1.2標(biāo)準(zhǔn)庫的一部分?,F(xiàn)在,Swing是不對(duì)等基于GUI工具箱的正式名字。它已是Java基礎(chǔ)類庫(JavaFoundationClass,JFC)的一部分。完整的JFC十分龐大,其中包含的內(nèi)容遠(yuǎn)遠(yuǎn)大于SwingGUI工具箱。JFC特性不僅僅包含了Swing組件,而且還包含了一個(gè)可訪問的API、一個(gè)2DAPI和一個(gè)可拖拽的API。當(dāng)然,在用戶屏幕上顯示基于Swing用戶界面的元素要比顯示AWT的基于對(duì)等體組件的速度慢一些。但對(duì)于任何一臺(tái)現(xiàn)代的計(jì)算機(jī)來說,微小的速度差別無妨大礙。另外,由于下列幾點(diǎn)無法抗拒的原因,驅(qū)使人們選擇Swing:1)Swing擁有一個(gè)豐富、便捷的用戶界面元素集合。2)Swing對(duì)底層平臺(tái)依賴的很少,因此與平臺(tái)相關(guān)的bug很少。3)Swing給予不同平臺(tái)的用戶一致的感官效果。(3)關(guān)于JDIC的說明JDesktopIntegrationComponents(JDIC),是一個(gè)開源的項(xiàng)目,目的是構(gòu)建消除本機(jī)應(yīng)用程序和Java

等價(jià)物之間差距的組件。該項(xiàng)目是為了使用java建立桌面應(yīng)用程序而建立的。JDIC單一的JavaAPI允許應(yīng)用程序接進(jìn)本機(jī)操作系統(tǒng)特性,同時(shí)保持跨平臺(tái)支持。它目前提供了本機(jī)Web

瀏覽器(InternetExplorer或Mozilla)支持、系統(tǒng)托盤支持、文件擴(kuò)展集成、應(yīng)用程序啟動(dòng)與打印和其他桌面特性。JDIC分為五個(gè)部分和一個(gè)孵化中的項(xiàng)目:1)桌面:為了打開、編輯和用email郵寄文件來打開桌面程序;2)文件類型:設(shè)置桌面文件類型關(guān)聯(lián);3)瀏覽器:在AWT畫布上嵌入本地瀏覽器(InternetExplorer或者M(jìn)ozilla);4)包裝器:把JavaWebStart程序轉(zhuǎn)換成本地安裝程序的命令行工具;5)托盤API:支持系統(tǒng)托盤圖標(biāo)和彈出式菜單;6)lSaverBeans:Java中的系統(tǒng)屏幕保護(hù);本項(xiàng)目使用JDIC實(shí)現(xiàn)瀏覽器組件,瀏覽器組件API可以實(shí)現(xiàn)訪問幾個(gè)瀏覽器事件以及在歷史記錄上的控制(向前,后退,刷新)。以下面的例子說明在本項(xiàng)目中如何使用瀏覽器組件:importorg.jdesktop.jdic.browser.*;import.*;importjavax.swing.*;publicclassBrowserTest{publicstaticvoidmain(String[]args)throwsException{WebBrowserbrowser=newWebBrowser();browser.setURL(newURL(""));JFrameframe=newJFrame("BrowserTest");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().add(browser);frame.pack();frame.setSize(500,500);frame.setVisible(true);}}正如上面代碼所演示的那樣,WebBrowser對(duì)象僅僅是一個(gè)可以把它放入一個(gè)標(biāo)準(zhǔn)的Jframe中的AWT組件。Main方法的第一行創(chuàng)建了一個(gè)新的WebBrowser,第二行設(shè)置了想要顯示的URL。其他的代碼創(chuàng)建了一個(gè)frame,把瀏覽器加入其中,并使得frame可見,WebBrowser是個(gè)本地AWT組件,因此在與Swing結(jié)合的時(shí)候會(huì)有沖突。混合它們的兩個(gè)規(guī)則是1)不要讓Swing和AWT組件重疊和2)在菜單上調(diào)用setLightWeightPopupEnabled(false)否則它們將消失在瀏覽器組件后邊。(4)HTML概述超文本標(biāo)記語言(HyperTextMarkupLanguage,HTML)是一種用于文檔布局和超文本鏈接規(guī)范的語言。它定義了特殊的、嵌入式指令的語法和放置方法,瀏覽器中不會(huì)顯示這些指令,但是HTML可以告訴瀏覽器該如何顯示文檔的內(nèi)容,如文本、圖像及其他支持的媒體等,還有如何通過特殊的超文本鏈接來制作交互式的文檔,這些鏈接可以把這些文檔和其他因特網(wǎng)資源鏈接起來。HTML詞法分析是瀏覽器設(shè)計(jì)的基礎(chǔ)環(huán)節(jié)之一,也是整個(gè)設(shè)計(jì)過程中重要的前端工作,其數(shù)據(jù)結(jié)構(gòu)的擬定與接下來的語法分析和布局算法密切相關(guān),詞法分析的效率與準(zhǔn)確性、容錯(cuò)性也關(guān)系到整個(gè)瀏覽器設(shè)計(jì)的質(zhì)量。(5)HTML詞法分析器BitToken的組成及其功能BitToken是NetbitBrowser的HTML詞法分析器,使用標(biāo)準(zhǔn)C編程,NetbitBrowser是基于Linux/Gtk的瀏覽器,也是一個(gè)開放源碼項(xiàng)目。BitToken作為NetbitBrowser的詞法分析部份,負(fù)責(zé)對(duì)接收的HTML代碼進(jìn)行詞法分析,主要的目的是提取網(wǎng)頁中元素的名稱及其屬性,并以恰當(dāng)?shù)男问剑窗匆欢ǖ臄?shù)據(jù)結(jié)構(gòu))加以保存,也就是完成了將數(shù)據(jù)流離散化、結(jié)構(gòu)化的過程。BitToken主要由以下幾個(gè)部分組成:1)初始化:完成對(duì)數(shù)據(jù)結(jié)構(gòu)的初始化,主要是分配內(nèi)存,變量賦初值。2)主體的數(shù)據(jù)流分析:逐字符的進(jìn)行判斷,確定數(shù)據(jù)的歸屬類型。3)元素的分析:提取元素的名稱、屬性和值域。4)釋放:主要是對(duì)內(nèi)存的釋放。在對(duì)HTML腳本語法分析結(jié)束后,要對(duì)頁面進(jìn)行布局。在整個(gè)瀏覽器中,Layout屬于關(guān)鍵技術(shù)之一。(6)幾種基于JAVA的HTMLParser1)HTMLParserHTMLParser實(shí)現(xiàn)即時(shí)HTML語法分析程序,提供了一組Tag對(duì)象,這些對(duì)象可以深入解析一棵可搜索的結(jié)構(gòu)樹。2)JerichoHTMLParserJerichoHTMLParser是一個(gè)簡(jiǎn)單而功能強(qiáng)大的JavaHTML解析器庫,可以分析和處理HTML文檔的一部分,包括一些通用的服務(wù)器端標(biāo)簽,同時(shí)也可以重新生成無法識(shí)別的或無效的HTML。它也提供了一個(gè)有用的HTML表單分析器。3)NekoHTMLNekoHTML是一個(gè)簡(jiǎn)單的HTML掃描器和標(biāo)簽補(bǔ)償器(tagbalancer),使得程序能解析HTML文檔并用標(biāo)準(zhǔn)的XML接口來訪問其中的信息。這個(gè)解析器能掃描HTML文件并“修正”許多作者(人或機(jī)器)在編寫HTML文檔過程中常犯的錯(cuò)誤。NekoHTML能增補(bǔ)缺失的父元素、自動(dòng)用結(jié)束標(biāo)簽關(guān)閉相應(yīng)的元素,以及不匹配的內(nèi)嵌元素標(biāo)簽。NekoHTML的開發(fā)使用了XercesNativeInterface(XNI),后者是Xerces2的實(shí)現(xiàn)基礎(chǔ)。4)HtmlCleanerHtmlCleaner是一個(gè)開源的Html文檔解析器。HtmlCleaner能夠重新排序每個(gè)元素然后生成結(jié)構(gòu)良好(Well-Formed)的XML文檔。默認(rèn)情況下它遵循的規(guī)則是類似于大部份web瀏覽器為創(chuàng)建文檔對(duì)象模型所使用的規(guī)則。然而,用戶可以提供自定義tag和規(guī)則組來進(jìn)行過濾和匹配。3.3.2開發(fā)工具簡(jiǎn)介MyEclipse是一個(gè)開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過插件和組件構(gòu)建開發(fā)環(huán)境。幸運(yùn)的是,MyEclipse附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括Java開發(fā)工具(JavaDevelopmentTools,JDT)。雖然大多數(shù)用戶很樂于將MyEclipse當(dāng)作JavaIDE來使用,但MyEclipse的目標(biāo)不僅限于此。MyEclipse還包括插件開發(fā)環(huán)境(Plug-inDevelopmentEnvironment,PDE),這個(gè)組件主要針對(duì)希望擴(kuò)展MyEclipse的軟件開發(fā)人員,因?yàn)樗试S他們構(gòu)建與MyEclipse環(huán)境無縫集成的工具。由于MyEclipse中的每樣?xùn)|西都是插件,對(duì)于給MyEclipse提供插件,以及給用戶提供一致和統(tǒng)一的集成開發(fā)環(huán)境而言,所有工具開發(fā)人員都具有同等的發(fā)揮場(chǎng)所。這種平等和一致性并不僅限于Java開發(fā)工具。盡管MyEclipse是使用Java語言開發(fā)的,但它的用途并不限于Java語言;例如,支持諸如C/C++、COBOL和Eiffel等編程語言的插件已經(jīng)可用,或預(yù)計(jì)會(huì)推出。MyEclipse框架還可用來作為與軟件開發(fā)無關(guān)的其他應(yīng)用程序類型的基礎(chǔ),比如內(nèi)容管理系統(tǒng)?;贛yEclipse的應(yīng)用程序的突出例子是IBM的WebSphereStudioWorkbench,它構(gòu)成了IBMJava開發(fā)工具系列的基礎(chǔ)。例如,WebSphereStudioApplicationDeveloper添加了對(duì)JSP、servlet、EJB、XML、Web服務(wù)和數(shù)據(jù)庫訪問的支持。MyEclipse采用的技術(shù)是IBM公司開發(fā)的(SWT),這是一種基于Java的窗口組件,類似Java本身提供的AWT和Swing窗口組件;不過IBM聲稱SWT比其他Java窗口組件更有效率。MyEclipse的用戶界面還使用了GUI中間層JFace,從而簡(jiǎn)化了基于SWT的應(yīng)用程序的構(gòu)建。MyEclipse的插件機(jī)制是輕型軟件組件化架構(gòu)。在富客戶機(jī)平臺(tái)上,MyEclipse使用插件來提供所有的附加功能,例如支持Java以外的其他語言。已有的分離的插件已經(jīng)能夠支持C/C++(CDT)、Perl、Ruby,Python、telnet和數(shù)據(jù)庫開發(fā)。插件架構(gòu)能夠支持將任意的擴(kuò)展加入到現(xiàn)有環(huán)境中,例如配置管理,而決不僅僅限于支持各種編程語言。4系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)瀏覽器的窗體是程序的主界面,它包括瀏覽指定的網(wǎng)站,收藏網(wǎng)站信息等業(yè)務(wù)。主要由菜單欄,工具欄,地址欄,瀏覽器選項(xiàng)卡和狀態(tài)欄組成。4.1子系統(tǒng)4.1.1子系統(tǒng)的劃分依據(jù)需求分析說明書和環(huán)境特點(diǎn),將本系統(tǒng)劃分為5個(gè)子系統(tǒng):1)用戶界面子系統(tǒng):用于輸入控制2)控制子系統(tǒng):系統(tǒng)控制,以及消息傳遞3)網(wǎng)頁顯示子系統(tǒng):顯示網(wǎng)頁4)網(wǎng)頁獲取子系統(tǒng):從遠(yuǎn)端Web服務(wù)器獲取文件,以及文件信息5)數(shù)據(jù)管理子系統(tǒng):包括將收藏夾的內(nèi)容保存到數(shù)據(jù)文件4.1.2子系統(tǒng)間的協(xié)作關(guān)系子系統(tǒng)間的協(xié)作關(guān)系為:用戶在瀏覽器界面進(jìn)行操作,控制子系統(tǒng)會(huì)根據(jù)用戶做出的動(dòng)作去執(zhí)行相應(yīng)的功能,例如,用戶在地址欄輸入U(xiǎn)RL地址點(diǎn)擊“轉(zhuǎn)到”按鈕或直接按回車,控制子系統(tǒng)檢測(cè)到了用戶的行為,調(diào)用網(wǎng)頁顯示子系統(tǒng),網(wǎng)頁顯示子系統(tǒng)完成把從服務(wù)器獲取的HTML流解析并顯示給用戶,見圖4.1。網(wǎng)頁獲取子系統(tǒng)網(wǎng)頁獲取子系統(tǒng)GUI子系統(tǒng)控制子系統(tǒng)網(wǎng)頁顯示子系統(tǒng)數(shù)據(jù)管理子系統(tǒng)請(qǐng)求顯示網(wǎng)頁請(qǐng)求網(wǎng)頁讀寫文件信息獲取遠(yuǎn)程網(wǎng)頁圖4.1子系統(tǒng)協(xié)作圖4.2各子系統(tǒng)功能的實(shí)現(xiàn)4.2.1GUI的實(shí)現(xiàn)采用JavaSwing技術(shù)編寫圖形界面。在用戶界面子系統(tǒng)中,Browser采用了容器嵌套容器,在不同的容器上添加不同的布局管理器的布局策略,這樣就可以在一個(gè)擁有簡(jiǎn)單布局管理器的JFrame上加入其他子容器如:JPanel,將之放入BorderLayout的某個(gè)區(qū)域,這樣就可以在子容器上繼續(xù)添加組件或容器了。根據(jù)這種設(shè)計(jì)方法可以設(shè)計(jì)出美觀的界面。考慮到JavaSwing提供的控件,劃分出八類,如表4.1所示:表4.1組件復(fù)用表功能所復(fù)用的組件主菜單復(fù)用JMenu組件菜單項(xiàng)復(fù)用JMenuItem組件工具欄復(fù)用JPanel組件按鈕復(fù)用JButton組件URL標(biāo)簽復(fù)用JLabel組件URL輸入框復(fù)用JTextField組件狀態(tài)欄復(fù)用JPanel組件文件打開及保存復(fù)用JFileChooser組件瀏覽器Browser初始化后的主界面如圖4.2所示:圖4.2瀏覽器主界面4.2.2控制子系統(tǒng)的實(shí)現(xiàn)在控制子系統(tǒng)中,充分利用操作系統(tǒng)的消息傳遞機(jī)制,并考慮到JAVA程序消息傳遞特點(diǎn),得到事件響應(yīng)模塊(復(fù)用各種事件監(jiān)聽器組件),其負(fù)責(zé)在監(jiān)聽器中協(xié)調(diào)系統(tǒng)的運(yùn)行。消息的傳遞交由瀏覽器所在的操作系統(tǒng)完成,這個(gè)模塊主要由程序中的各個(gè)事件響應(yīng)方法組成,如goButtonActionPerformed(ActionEventevt)方法就是實(shí)現(xiàn)用戶點(diǎn)擊“轉(zhuǎn)到”按鈕或是在地址欄按下回車的事件響應(yīng)方法。4.2.3網(wǎng)頁獲取子系統(tǒng)的實(shí)現(xiàn)在網(wǎng)頁獲取子系統(tǒng)中實(shí)現(xiàn)網(wǎng)絡(luò)資源的獲取,獲取Internet上的資源:首先通過文本工具欄獲取要請(qǐng)求的URL地址,檢查這個(gè)URL的合法性(可在這個(gè)階段實(shí)現(xiàn)對(duì)非法網(wǎng)站的屏蔽),然后再調(diào)用網(wǎng)頁顯示模塊顯示網(wǎng)頁。4.2.4網(wǎng)頁顯示子系統(tǒng)的實(shí)現(xiàn)在網(wǎng)頁顯示子系統(tǒng)中遠(yuǎn)程網(wǎng)頁顯示,負(fù)責(zé)顯示萬維網(wǎng)上的網(wǎng)頁,并接受獲取網(wǎng)頁的請(qǐng)求。具體實(shí)現(xiàn)就是通過網(wǎng)頁獲取子系統(tǒng)中得到的URL進(jìn)行打開鏈接并顯示。使用JAVA提供的JEditorPane類,創(chuàng)建其對(duì)象,并調(diào)用方法setContentType,然后根據(jù)網(wǎng)頁獲取模塊得到的URL調(diào)用JEditorPane對(duì)象的setPage方法顯示該URL的信息。當(dāng)用戶在地址欄輸入或圖4.3網(wǎng)頁獲取結(jié)果4.2.5數(shù)據(jù)管理子系統(tǒng)的實(shí)現(xiàn)在數(shù)據(jù)管理子系統(tǒng)中,實(shí)現(xiàn)收藏夾功能,即可以將正在瀏覽的網(wǎng)址添加到收藏夾中,并且提供分類,通常的做法是將收藏夾的內(nèi)容存放在集合類中,如果程序關(guān)閉,收藏夾的內(nèi)容和分類將丟失,因?yàn)樗鼈儧]有被持久化。將收藏夾持久化的方法有兩種,本項(xiàng)目的實(shí)現(xiàn)采用第二種方式:(1)持久化到數(shù)據(jù)庫可以將收藏夾內(nèi)容全部保存到數(shù)據(jù)庫中,在程序關(guān)閉時(shí),收藏夾的內(nèi)容保存在數(shù)據(jù)庫而不在內(nèi)存中,這樣可以避免數(shù)據(jù)丟失,在程序下次啟動(dòng)的時(shí)候,可以從數(shù)據(jù)庫中讀取收藏夾內(nèi)容從新顯示(2)持久化到文件中另一種方法將收藏夾的內(nèi)容保存到一個(gè)數(shù)據(jù)文件中,例如”favorite.data”,這種方法保存收藏夾數(shù)據(jù)可以節(jié)省訪問數(shù)據(jù)庫的開銷,也可以隨瀏覽器模塊一同發(fā)布,既方便又節(jié)省資源。點(diǎn)擊“收藏夾”后顯示結(jié)果如圖4.4:圖4.4點(diǎn)擊收藏夾后顯示結(jié)果4.3主要功能闡述4.3.1地址欄的實(shí)現(xiàn)地址欄是網(wǎng)頁瀏覽器的重要功能,它接收用戶輸入的將要訪問的網(wǎng)站地址,然后將該地址傳送給瀏覽器組件,呈現(xiàn)指定的網(wǎng)頁內(nèi)容。網(wǎng)頁瀏覽器模塊的地址欄包含輸入網(wǎng)站URL地址的文本框和一個(gè)執(zhí)行瀏覽業(yè)務(wù)的“轉(zhuǎn)到”按鈕。當(dāng)用戶在地址欄的地址文本框輸入網(wǎng)站地址并單擊右側(cè)的“轉(zhuǎn)到”按鈕時(shí),它下面的顯示網(wǎng)頁區(qū)域會(huì)通過瀏覽器組件顯示新的網(wǎng)頁內(nèi)容。4.3.2收藏夾的實(shí)現(xiàn)收藏夾是瀏覽器不可缺少的功能,它記錄上網(wǎng)時(shí)常用的,經(jīng)典的網(wǎng)站地址。在瀏覽器模塊的主窗體上單擊”文件”/”添加到收藏夾”菜單項(xiàng),將啟動(dòng)添加收藏夾功能,該功能可以將當(dāng)前瀏覽器訪問的網(wǎng)站地址添加到收藏夾中,并且將當(dāng)前網(wǎng)頁內(nèi)容以“.html”的形式保存在本地磁盤中,然后可以從本地磁盤中通過訪問本地網(wǎng)頁的方式訪問收藏的網(wǎng)頁。4.3.3工具欄的實(shí)現(xiàn)工具欄用于執(zhí)行常用的操作,網(wǎng)頁瀏覽器模塊的控制命令使用最頻繁,因此將瀏覽器的控制命令提取到工具欄中。工具欄上的每個(gè)按鈕都設(shè)置了文本提示,每個(gè)按鈕都添加了單獨(dú)的事件監(jiān)聽器,在不同的事件監(jiān)聽器中調(diào)用處理該按鈕業(yè)務(wù)的方法。編寫各個(gè)按鈕的事物處理方法,這些業(yè)務(wù)處理方法被不同按鈕的事件監(jiān)聽器調(diào)用。瀏覽器的控制按鈕的業(yè)務(wù)邏輯,通過調(diào)用自定義的方法來實(shí)現(xiàn),例如刷新按鈕的實(shí)現(xiàn)方法是refreshButtonActionPerformed(ActionEventevt);4.3.4阻止IE打開彈出窗口使用WebBrowser組件編寫的瀏覽器模塊,可以在本窗口中瀏覽各種信息,可以通過超級(jí)鏈接訪問其他網(wǎng)頁,如果某個(gè)超級(jí)連接要在新的窗體中打開網(wǎng)頁,那么這個(gè)網(wǎng)頁會(huì)默認(rèn)使用IE或操作系統(tǒng)默認(rèn)的瀏覽器打開,這就破壞了模塊的外觀,使本模塊處于可有可無的狀態(tài)。因此必須攔截這些需要在新窗體顯示的網(wǎng)頁信息,本模塊繼承了WebBrowser組件實(shí)現(xiàn)了瀏覽器組件的Browser類,它從寫了父類的willOpenWindow()方法,在有需要顯示在新窗體的網(wǎng)頁信息時(shí),該方法會(huì)創(chuàng)建新的選項(xiàng)卡顯示這個(gè)網(wǎng)頁。4.4編碼這個(gè)階段的關(guān)鍵任務(wù)是寫出正確的容易理解、容易維護(hù)的程序模塊。并且仔細(xì)測(cè)試編寫出的每一個(gè)模塊。在本階段,以設(shè)計(jì)文檔為依據(jù),充分利用操作系統(tǒng)和JAVA提供的便利進(jìn)行編碼。大量的類復(fù)用了編譯器提供的組件,節(jié)省了編碼時(shí)間。而對(duì)于控制類和起基礎(chǔ)作用的幾個(gè)位于底層的類,嚴(yán)格按照詳細(xì)說明書的說明進(jìn)行編碼。各單元編碼結(jié)束后,將進(jìn)行單元測(cè)試。因?yàn)闂l件有限,本系統(tǒng)采用的方法是每編寫一個(gè)模塊或增加一個(gè)組件就進(jìn)行測(cè)試,要求做到代碼覆蓋。單元測(cè)試結(jié)束后,進(jìn)行系統(tǒng)組裝,得到了一個(gè)完整的軟件——Browser。4.4.1數(shù)據(jù)結(jié)構(gòu)(1)定義了用到的所有控件 privateMyMapfavorite; privatejavax.swing.JMenuItemaddFavoriteMenuItem; privatejavax.swing.JTextFieldaddress; privatejavax.swing.JButtonbackButton; privatejavax.swing.JMenufavoriteMenu; privatejavax.swing.JMenufileMenu; privatejavax.swing.JButtonforwardButton; privatejavax.swing.JButtongoButton; privatejavax.swing.JMenugoMenu; privatejavax.swing.JButtonhomePageButton; privatejavax.swing.JMenuItemhomePageMenuItem; privatejavax.swing.JMenuItemexitItem; privatejavax.swing.JMenuBarmenuBar; privatejavax.swing.JButtonrefreshButton; privatejavax.swing.JMenuItemrefreshMenuItem; privatejavax.swing.JMenuItemrightTabMenuItem; privatejavax.swing.JMenuItemsortFavoriteMenuItem; privatejavax.swing.JLabelstatusLabel; privatejavax.swing.JButtonstopButton; privatejavax.swing.JMenutabMenu; privatejavax.swing.JMenuItemtopTabMenuItem;4.4.2處理按鈕動(dòng)作的方法(1)點(diǎn)擊“轉(zhuǎn)到”按鈕或者按回車鍵privatevoidgoButtonActionPerformed(java.awt.event.ActionEventevt){try{ Stringtext=address.getText(); //獲取地址文本框的內(nèi)容 URLurl=newURL(text); //創(chuàng)建URL對(duì)象 createBrowserTab(url); //調(diào)用創(chuàng)建瀏覽器選項(xiàng)卡的方法}catch(MalformedURLExceptionex){Logger.getLogger(BrowserFrame.class.getName()).log(Level.SEVERE, null,ex);}}(2)收藏夾功能privatevoidaddFavoriteMenuItemActionPerformed(java.awt.event.ActionEventevt){ //獲取選項(xiàng)卡當(dāng)前選擇的索引 intindex=browserTabbedPane.getSelectedIndex(); //獲取當(dāng)前選擇的選項(xiàng)卡的標(biāo)題文本 Stringtitle=browserTabbedPane.getTitleAt(index); //創(chuàng)建添加到收藏夾對(duì)話框,由該對(duì)話框處理業(yè)務(wù) newAddFavoriteDialog(this,title,true).setVisible(true);}privatevoidaddFavoriteItem(){if(favoriteMenu==null){ favoriteMenu=newjavax.swing.JMenu();}intcount=favoriteMenu.getMenuComponentCount();for(inti=count-1;i>2;i--){ favoriteMenu.remove(i);}listFavoriteMap(favorite,favoriteMenu);}//遍歷Map集合的方法,該方法將集合中的數(shù)據(jù)添加到收藏夾菜單中privatevoidlistFavoriteMap(MyMapmap,JMenumenu){Set<String>keySet=map.keySet();finalIterator<String>iterator=keySet.iterator();while(iterator.hasNext()){ Stringkey=iterator.next(); finalObjectobj=map.get(key); if(objinstanceofURL){//遍歷菜單項(xiàng) JMenuItemitem=newJMenuItem(key); item.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ createBrowserTab((URL)obj); } }); menu.add(item); }elseif(objinstanceofMyMap){//遍歷子菜單 JMenusubMenu=newJMenu(key); subMenu.getPopupMenu().setLightWeightPopupEnabled(false); listFavoriteMap((MyMap)obj,subMenu); menu.add(subMenu); }}}(3)其他按鈕功能//設(shè)置主頁privateclassSetHomePageItemActionListenerimplementsActionListener{ publicvoidactionPerformed(finalActionEvente){ Stringhome=JOptionPane.showInputDialog(BrowserFrame.this, "請(qǐng)輸入主頁地址");//顯示輸入對(duì)話框 if(home==null)return; try{ homePage=newURL(home);//創(chuàng)建URL對(duì)象 storeFavorite();//序列化URL對(duì)象 }catch(MalformedURLExceptione1){ //如果拋出異常,提示URL的格式不合法JOptionPane.showMessageDialog(BrowserFrame.this,"輸入的URL不合法"); e1.printStackTrace(); }}}privateclassThisWindowListenerextendsWindowAdapter{publicvoidwindowOpened(finalWindowEvente){ broserPanel1.browser.setURL(homePage);}}//地址文本框的按鍵監(jiān)聽器privateclassAddressKeyListenerextendsKeyAdapter{publicvoidkeyPressed(finalKeyEvente){ charkeyChar=e.getKeyChar(); //獲取按鍵字符 if(keyChar=='\n'){ //如果是回車字符 goButton.doClick(); //執(zhí)行轉(zhuǎn)到按鈕的單擊 }}}5測(cè)試5.1測(cè)試與調(diào)試的基本概念軟件測(cè)試是整個(gè)系統(tǒng)開發(fā)過程中一個(gè)重要環(huán)節(jié),是成功開發(fā)本系統(tǒng)的重要保證。軟件測(cè)試階段的主要任務(wù)是發(fā)現(xiàn)并排除在分析、設(shè)計(jì)、編碼各階段中產(chǎn)生的各種類型的錯(cuò)誤,以得到可使用的軟件系統(tǒng)。常用的軟件測(cè)試方法有兩大類:靜態(tài)測(cè)試方法和動(dòng)態(tài)測(cè)試方法。靜態(tài)測(cè)試方法是程序員普遍采用的一種方法,其內(nèi)容主要是通過人工模擬軟件系統(tǒng)的執(zhí)行方式,以代碼會(huì)審、走查、辦公室檢查的形式分析或核查系統(tǒng)的功能實(shí)現(xiàn)、編碼過程的正確性。動(dòng)態(tài)測(cè)試方法是通過輸入一組預(yù)先按照一定的測(cè)試準(zhǔn)則構(gòu)造的實(shí)例數(shù)據(jù)來動(dòng)態(tài)運(yùn)行程序,而達(dá)到發(fā)現(xiàn)程序錯(cuò)誤的過程。按照通常的軟件系統(tǒng)測(cè)試,可以分別進(jìn)行單元測(cè)試、集成測(cè)試、確認(rèn)測(cè)試、系統(tǒng)測(cè)試,最后進(jìn)行驗(yàn)收測(cè)試,即由用戶通過試用系統(tǒng)而進(jìn)行測(cè)試,檢驗(yàn)系統(tǒng)的可用性及與用戶配合的程度。調(diào)試是軟件開發(fā)過程中最艱巨的腦力勞動(dòng),調(diào)試開始時(shí),軟件開發(fā)者僅僅面對(duì)著錯(cuò)誤的征兆,然而在問題的外部現(xiàn)象和內(nèi)在原因之間往往并沒有明顯的聯(lián)系,在組成程序的密密麻麻的元素中,每一個(gè)都可能是錯(cuò)誤的根源。如何能在浩如煙海的程序元素中找到有錯(cuò)誤的那個(gè)(或幾個(gè))元素,這是調(diào)試過程中最關(guān)鍵的技術(shù)問題。本設(shè)計(jì)中調(diào)試的方法主要是設(shè)置輸出語句跟蹤。使用輸出語句跟蹤可以找到程序的出錯(cuò)位置,縮小查找錯(cuò)誤的范圍,提高調(diào)試的效率。調(diào)試的任務(wù)是及時(shí)改正測(cè)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論