【正文】
+ end)。 } catch (IOException e2) { (資源 [ + tmp + ]連接錯(cuò)誤! )。 }// 獲取文件名 = getFileName()。 return r。 建立連接 并獲取下載信息 public static TestResult TestURL(String tmp) { TestResult r = new TestResult()。所以每當(dāng) 用戶退出程序時(shí),程序都會(huì)自動(dòng)保存當(dāng)前的所有任務(wù)下載信息,做到“斷點(diǎn)續(xù)傳”的可視化。 void write(byte [ ] buffer)。 long skip(long n),在輸入流中跳過 n 個(gè)字節(jié),將實(shí)際跳過的字節(jié)數(shù)返回。如果到達(dá)流的末尾,則方法的返回值為 1.如果 I/O 發(fā)生錯(cuò)誤,將拋出 IOException 類型的異常。所有二進(jìn)制數(shù)據(jù)在寫向字符流之前必須轉(zhuǎn)換為字符流能夠接受的表達(dá)形式。 ? 節(jié)點(diǎn)流:可以從(向)一個(gè)特定的 I/O 設(shè)備讀(寫)數(shù)據(jù)的流,節(jié)點(diǎn)流也被 稱為低級(jí)流。 每個(gè)線程都是通過某個(gè)特定 Thread 對(duì)象所對(duì)應(yīng)的 run( )方法來完成其操作,因?yàn)?run( )方法中的代碼定義執(zhí)行 線程所需要的功能,所以 run( )方法被稱為線程體。 ( 1) 聲明一個(gè) Thead 類的子類,并覆蓋其 run( )方法。 總線程控制類 獲取線程數(shù)、所有線程開始點(diǎn)結(jié)束點(diǎn) 分割文件并下載 計(jì)算下載的大小 對(duì)線程開始關(guān)閉控制 關(guān)閉文件輸 出流 下載文件屬性面板類 應(yīng)用程序主窗口類 添加下載任務(wù)對(duì)話框類 主窗口中按鈕工具條類 界面類 浙江工業(yè)大學(xué)本科畢業(yè)設(shè)計(jì)說明書(論文) 17 ? 線程控制模塊:負(fù)責(zé)協(xié)調(diào)控制多個(gè)線程共同完成下載任務(wù) 。其功能定義如下圖 所示: 圖 系統(tǒng)工具類的功能 線程下載類的基本功能分析 線程下載類負(fù)責(zé)定義每個(gè)線程具體下載的實(shí)現(xiàn)細(xì)節(jié),該類本身應(yīng)該是一個(gè)線程類,該類定線程的基本信息如線程 id 號(hào),文件下載的開始點(diǎn)和結(jié)束點(diǎn)等。還有些特殊情況下,用戶在下載任務(wù)開始后由于種種原因希望放棄資源的下載,這就要求下載工具具有刪除任務(wù)的功能了。多線程程序設(shè)計(jì)可以很好的解決程序并發(fā)的問題。 開發(fā)環(huán)境 操作系統(tǒng): Windows XP、或 Windows 7 視窗操作系統(tǒng) ; 開發(fā)平臺(tái) : eclipse 硬件環(huán)境建議: CPU 為 Intel P3 800 以上,至少 256M 內(nèi)存, 10M/100M 自適應(yīng)以太 網(wǎng)卡,網(wǎng)絡(luò)應(yīng)與 Inter 連通,帶寬大于 512K; 最佳瀏覽分辨率: 1024768; 本章小結(jié) 本章 以系統(tǒng)開發(fā)的相關(guān)理論 及 技術(shù) 為 基礎(chǔ), 介紹系統(tǒng)開發(fā)過程 中 需要了解 和掌握的理論和技術(shù)。一旦收到請(qǐng)求,服務(wù)器(向客戶端)發(fā)回一個(gè)狀態(tài)行,比如 HTTP/ 200 OK,和(響應(yīng)的)消息,消息的消息體可能是請(qǐng)求的文件、錯(cuò)誤消息、或者其它一些信息 [13]。應(yīng)答的服務(wù)器上存儲(chǔ)著(一些)資源,比如 HTML 文件和圖像。它允許用戶根據(jù)需要添加視圖,并與允許用戶使用的任何版本控制系統(tǒng)交互。圖 為 Eclipse 體系結(jié)構(gòu)圖。由于意識(shí)到 Visual Age存在難以擴(kuò)展、底層技術(shù)較為脆弱、很難與 WebSphere Studio軟件集成等諸多問題,進(jìn)一步發(fā)展甚為困難,同時(shí)也面臨包括 Symantec公司的 Visual Caf233。 事務(wù)Transaction: 應(yīng)用程序用來指定原子操作單元范圍的對(duì)象,它是單線程了,生命周期很短。 浙江工業(yè)大學(xué)本科畢業(yè)設(shè)計(jì)說明書(論文) 9 A p p l i c a t i o nD a t a b a s eS e s s i o n F a c t o r yT r a n s a c t i o n F a c t o r yC o n n e c t i o n P r o v i d e rS e s s i o nT r a n s a c t i o nJ N D IJ D B CJ T AT r a n s a c t i o n O b j e c t sP e r s i s t e n t O b j e c t s 圖 Hibernate體系結(jié)構(gòu)圖 圖 : SessionFactory:針對(duì)單個(gè)數(shù)據(jù)庫映射關(guān)系經(jīng)過編譯后的內(nèi)在鏡像,是線程安全的,它是生成 Session的工廠。因此在設(shè)計(jì)時(shí),考慮把數(shù)據(jù)和顯示方式分開,對(duì)于實(shí)現(xiàn)多種多樣的顯示是非常有幫助的。 為了簡(jiǎn)化組件的設(shè)計(jì)工作,在 Swing 組件中視圖和控件兩部分合為一體。相對(duì)而言,在 AWT 組件中,由于控制組件外觀的對(duì)等類與具體平臺(tái)相關(guān),使得 AWT 組件總是只有與本機(jī)相關(guān)的外觀。它以抽象窗口工具包( AWT)為基礎(chǔ)使跨平臺(tái)應(yīng)用程序可以使用任何可插拔的外觀風(fēng)格。Java EE 是在 Java SE 的基礎(chǔ)上構(gòu)建的,它提供 Web 服務(wù)、組件模型、管理和通信 API,可以用來實(shí)現(xiàn)企業(yè)級(jí)的面向服務(wù)體系 結(jié)構(gòu)( serviceoriented architecture,SOA)和 Web 應(yīng)用程序。大多數(shù) Java 開發(fā)人員使用 Java SE 5,也稱為 Java 或 “Tiger”( 20xx 年 6 月, Java SE 6 或 “Mustang” 發(fā)布了 beta 版。因?yàn)樗辉O(shè)計(jì)為按照 一種安全的方式通過網(wǎng)絡(luò)運(yùn)行,在通過互聯(lián)網(wǎng)進(jìn)行操作時(shí),它提供了一定程度的安全性。 ? 用來啟用數(shù)據(jù)庫訪問和操作遠(yuǎn)程對(duì)象的集成庫。它有三個(gè)版本(參見后面的 Java 平臺(tái)的多個(gè)版本 )。 浙江工業(yè)大學(xué)本科畢業(yè)設(shè)計(jì)說明書(論文) 4 第二章 相關(guān)理論與技術(shù) 本 系統(tǒng) 用 JAVA 技術(shù) 開發(fā) , 開發(fā)工具 是 eclipse, 涉及到 JAVA 多線程、 swing、HTTP 等 相關(guān) 技術(shù) , 本 章 將對(duì)上述 技術(shù) 進(jìn)行簡(jiǎn)要的闡述 。 操作可行性 下載程序的具備友好的用戶界面,而且操作簡(jiǎn)單易于被用戶接收,使用此下載程序十分方便,因?yàn)檐浖牟僮魉悸繁容^清晰,而且用戶實(shí)際操作的內(nèi)容較少,所以用戶只需要熟練操作計(jì)算機(jī)即可。 實(shí)現(xiàn) 接口的類并將其它的實(shí)例與 實(shí)例相關(guān)聯(lián) 。因此,可行性研究實(shí)質(zhì)上是要進(jìn)行一次大大壓縮簡(jiǎn)化了的系統(tǒng)分析和設(shè)計(jì)的過程,也就是在較高層次上以較抽象的方式進(jìn)行的系統(tǒng)分析和設(shè)計(jì)的過程。 JAVA 又是一種適用于平滑移植、安全、健壯和可擴(kuò)展等跨平臺(tái)開發(fā)語言,能開發(fā)出跨平臺(tái)的應(yīng)用對(duì)象和應(yīng)用程序,所以本系統(tǒng)的實(shí)現(xiàn)后可以在多個(gè)操作系統(tǒng)平臺(tái)上運(yùn)行,如 WINDOWS、 Linux 等,甚至是在非 PC 上,比如手機(jī)或 PDA 上該設(shè)計(jì)采用 JAVA 多線程與線程安全機(jī)制 ,在一定程度上能提高下載的速度和安全性 [4]。其最大的問 題是,由于網(wǎng)絡(luò)的不穩(wěn)定性或者異常的操作,一旦連接斷開使得下載過程中斷,就不得不全部從頭再來一次。當(dāng)今的網(wǎng)絡(luò)時(shí)代,下載軟件是使用最頻繁的軟件之一, 而 網(wǎng)絡(luò)的不穩(wěn)定常常造成數(shù)據(jù)傳輸?shù)牟环€(wěn)定,為了獲得可靠、高效的數(shù)據(jù)傳輸,斷點(diǎn)續(xù)傳技術(shù)應(yīng)運(yùn)而生。盡我所知,除文中特別加以標(biāo)注和致謝的地方外,不包含其他人或組織已經(jīng)發(fā)表或公布過的研究成果,也不包含我為獲得 及其它教育機(jī)構(gòu)的學(xué)位或?qū)W歷而使用過的材料。 本文 對(duì)系統(tǒng)的需求分析、關(guān)鍵技術(shù)和難點(diǎn)進(jìn) 行了的 詳細(xì)描述,同時(shí)又 詳細(xì)介紹本系統(tǒng)的 設(shè)計(jì)與實(shí)現(xiàn)。這樣可以大大減少資源的浪費(fèi) , 節(jié)省 下載 的時(shí)間 [2]。現(xiàn)在,不要說編寫專門的下載軟件,在自己編寫的軟件中,加入下載功能有時(shí)也非常必要。使用 Java作為開發(fā)工具主要是因?yàn)?Java 是目前比較流行而且非常成功的編程語言。由于同一進(jìn)程的多個(gè)線程共享同一片存儲(chǔ)空間,在帶來方便的同浙江工業(yè)大學(xué)本科畢業(yè)設(shè)計(jì)說明書(論文) 3 時(shí),也帶來了訪問沖突這個(gè)嚴(yán)重的問題。 第二章是軟件開發(fā)工具和技術(shù)介紹,主要介紹了畢業(yè)設(shè)計(jì)中用到的技術(shù)及開發(fā)工具 。 Java 語言的所有實(shí)現(xiàn)都必須實(shí)現(xiàn) JVM,從而使 Java 程序可以在有 JVM 的任何系統(tǒng)上運(yùn)行 [6]。它涵蓋從基本對(duì)象到連網(wǎng)和安全性,再到 XML 生成和 Web 服務(wù)的所有東西。在 20xx 年 8 月, Sun Microsystems 宣布它打算開放 Java 平臺(tái)的源碼,并開始征詢對(duì)許可協(xié)議和管理方式的反饋 [7]。在高端, Java 應(yīng)用服務(wù)器( application server) 作為 Java 組件、 XML 和 Web 服務(wù)的 Web 容器,可以與數(shù)據(jù)庫進(jìn)行交互并提供動(dòng)態(tài)的 Web 內(nèi) 容;它們還為企業(yè)應(yīng)用程序提供應(yīng)用程序開發(fā)環(huán)境,具有事務(wù)管理、安全性、集群、性能、可用性、連接性和可伸縮性等功能。企業(yè)版本幫助開發(fā)和部署可移植、健壯、可伸縮且安全的服務(wù)器端 Java 應(yīng)用程序。 Java ME 為在移動(dòng)設(shè)備和嵌入式設(shè)備(比如手機(jī)、 PDA、電視機(jī)頂盒和打印機(jī))上運(yùn)行的應(yīng)用程序提供一個(gè)健壯且靈活的環(huán)境。由于 AWT 組件通過與具體平臺(tái)相關(guān)的對(duì)等類( Peer)實(shí)現(xiàn),因此, Swing 比 AWT浙江工業(yè)大學(xué)本科畢業(yè)設(shè)計(jì)說明書(論文) 7 組件具有更強(qiáng)的實(shí)用性。 Swing組件以 “J”開頭,除了擁有與 AWT類似的按鈕( JButton)、標(biāo)簽( JLabel)、復(fù)選框( JCheckBox)、菜單( JMenu)等基本組件外,還增加了一個(gè)豐富的高層組件集合,如表格( JTable)、樹( JTree) [9]。組件的模型是自動(dòng)設(shè)置的,例如,一般都使用 JButton 而不是使用 ButtonModel 對(duì)象。有些類還為鍵盤操作提供了更便利的方法,其實(shí)這就相當(dāng)于熱鍵,使得用戶可以只用鍵盤進(jìn)行操作。 持久對(duì)象及集合:帶有持久化狀態(tài)的、具有業(yè)務(wù)功能的單線程對(duì)象, 此 對(duì)象生存期很短。 浙江工業(yè)大學(xué)本科畢業(yè)設(shè)計(jì)說明書(論文) 10 Eclipse 的簡(jiǎn)介 目前 Eclipse在系統(tǒng)開發(fā)領(lǐng)域中受到空前關(guān)注,國內(nèi)外許多軟件公司紛紛開始采用 Eclipse作為開發(fā)平臺(tái)。 20xx年 11月, IBM做出了一個(gè)重大決定,將 Eclipse采用開放源碼的授權(quán)和運(yùn)作模式發(fā)布,以增強(qiáng)業(yè)界對(duì) Eclipse的關(guān)注度并加快其推廣應(yīng)用速度。 浙江工業(yè)大學(xué)本科畢業(yè)設(shè)計(jì)說明書(論文) 11 為 Eclipse 體系結(jié)構(gòu)圖 工作空間插件即所謂的工作區(qū),主要負(fù)責(zé)管理用戶資源,例如用戶創(chuàng)建項(xiàng)目的管理、文件變更等,并負(fù)責(zé)通知其他插件關(guān)于資源變更的信息。傳送文件的協(xié)議有多種,最常用的是 HTTP(超文本傳輸協(xié)議 )和 FTP(文件傳送協(xié)議),我采用的是 HTTP。盡管 TCP/IP協(xié)議 是互聯(lián)網(wǎng)上最流行的應(yīng)用, HTTP 協(xié)議并沒有規(guī)定必 須使用它和(基于)它支持的層。配置文件的靈活性也使項(xiàng)目的靈活性得到的加強(qiáng),可以在不改變代碼的情況下,而只有改變其中的配置文件實(shí)現(xiàn)整個(gè)系統(tǒng)的改變 [14]。人們甚至希望只輕松點(diǎn)擊鼠標(biāo)就可以得到自己想要的東西。那么在很長(zhǎng)的這段時(shí)間中很有可能會(huì)出現(xiàn)很多的意外情況使下載中斷或是停止,比如電源意外被切斷、網(wǎng)絡(luò)中斷、或 是操作系統(tǒng)故障導(dǎo)致系統(tǒng)重新啟動(dòng)。 系統(tǒng) 功能需求分析 本節(jié)對(duì)系統(tǒng)下載任務(wù)實(shí)體類 的功能、 系統(tǒng)工具類的 功能、 線程下載類的 功能分析、 下載任務(wù)總線程控制類的 功能、 用戶界面類的 功能 等五個(gè)功能模塊進(jìn)行需求分析。其功能定義如圖 所示 : 系統(tǒng)工具類 測(cè)試連接 URL 是否有效 獲取下載源文件信息 線程下載類 循環(huán)執(zhí)行下載文件塊 浙江工業(yè)大學(xué)本科畢業(yè)設(shè)計(jì)說明書(論文) 16 圖 多 線程調(diào)度類的功能 用戶界面類的基本功能分析 對(duì)于一個(gè)好的應(yīng)用程序來說,友好用戶界面是必不可少的。線程又稱為輕量級(jí)進(jìn)程,它和進(jìn)程一樣擁有獨(dú)立的執(zhí)行控制,由操作系統(tǒng)負(fù)責(zé)調(diào)度,區(qū)別在于線程沒有獨(dú)立存儲(chǔ)空間,而是和所屬進(jìn)程中的其他線程共享一個(gè)存儲(chǔ)空間,這使得線程間的通信遠(yuǎn)較進(jìn)程簡(jiǎn)單 [16]。要觸發(fā)一個(gè)新線程,需要調(diào)用 start( )方法。 包中定義了多個(gè)流類型來實(shí)現(xiàn)輸入 /輸出功能。在讀 /寫數(shù)據(jù)時(shí),這兩種流以不同方式工作 [18]。 在本系統(tǒng)中,由于下載文件 不一定是只包含字符的文本,因此在實(shí)現(xiàn)過程中使用的是更加通用的字節(jié)流。本方法將返回讀取的字節(jié)個(gè)數(shù),或者如果因?yàn)榈竭_(dá)流尾而沒有讀取任何字節(jié)則返回 I/O 發(fā)生錯(cuò)誤,將拋出 IOEception 類型異常。 void reset( ),返回到流的上一個(gè)標(biāo)記。 本章小結(jié) 本章 對(duì) 項(xiàng)目 本 系統(tǒng) 需求 進(jìn)行了用戶需求 分析 和系統(tǒng)功能需求分析,并描述了系統(tǒng)流程及模塊劃分,而且分析了關(guān)鍵技術(shù)和難點(diǎn) , 明確了系統(tǒng)的使用對(duì)象 、大致功能 結(jié)構(gòu)及 各個(gè)業(yè)務(wù)系統(tǒng) 所需實(shí)現(xiàn)的功能 等問題,為 后續(xù)系統(tǒng)設(shè)計(jì)打下了基礎(chǔ)。單擊“新建按鈕”,將可以新曾下載的任務(wù)。 tmp_URL = new URL(tmp)。 = 1。 return r。 浙江工業(yè)大學(xué)本科畢業(yè)設(shè)計(jì)說明書(論文) 24 return r。 = e