版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
PAGEPAGE1畢業(yè)設(shè)計(論文)Web音樂搜索軟件的設(shè)計與實現(xiàn)論文作者姓名:申請學(xué)位專業(yè):申請學(xué)位類別:論文提交日期:Web音樂搜索軟件的設(shè)計與實現(xiàn)摘要當(dāng)前,面對浩瀚的網(wǎng)絡(luò)資源,搜索引擎為所有網(wǎng)上沖浪的用戶提供了一個入口,毫不夸張的說,所有的用戶都可以借助于搜索引擎到達(dá)自己想去的網(wǎng)上任何一個地方。因此它也成為除了電子郵件以外人們使用最多的網(wǎng)上服務(wù)。隨著Internet的快速發(fā)展,海量信息和人們獲取所需信息能力之間的矛盾日益明顯,在信息海洋里查找信息,如同大海撈針一樣,搜索引擎恰好解決了這一難題。Web音樂搜索軟件是采用Java語言開發(fā)的簡易的互聯(lián)網(wǎng)音樂搜索引擎,它是集網(wǎng)絡(luò)爬蟲(采用java內(nèi)置的多線程及Socket技術(shù))和基于B/S結(jié)構(gòu)的Web查詢(Struts框架)為一體的搜索軟件。該系統(tǒng)能完成對互聯(lián)網(wǎng)的音樂信息的采集、分析、分類、保存和查詢等功能;經(jīng)過測試與分析,說明本系統(tǒng)運行穩(wěn)定、可靠,具有一定的實用價值。關(guān)鍵字:音樂;搜索軟件;網(wǎng)絡(luò)爬蟲;Socket技術(shù);Struts框架;多線程DesignandImplementationofWebMusicSearchSoftwareAbstractAtpresent,inthevastnetworkresource,searchengineforallInternetsurfingusersprovidestheoneentrance.NoexaggerationtosaythatalluserscanbereachedanyoneplaceontheInternetbytheaidofsearchengines.SoithasbecomethemostusingonlineservicesforpeopleexceptE-mail.However,withtherapiddevelopmentoftheInternet,thecontradictionsbetweenmassiveinformationandobtainingthecapacityofrequiredinformationisobviousdaybyday.Searchingforinformationinvastnetworkresourcesislikelookingforneedlesinahaystack,butsearchenginejustsolvesthisproblem.Thesoftwareisaboutwebmusicsearch.ItusesjavatodevelopasimpleInternetmusicsearchengine,andalsogathersthenet-reptile(intra-builderjavamulti-threadandsockettechnology)andwebsearchbasedonB/Sconstruction(strutsframework)asawholesearchsoftware.Itcanachievethecollection,analysis,classification,storageandsearchofInternetmusicinformation.Throughthetestandanalysis,itshowsthissystemisstable,reliable,andhassomepracticalvalues.Keywords:Music;SearchSoftware;Crawl;SocketTechnology;StrutsStructure;Multi-thread目錄論文總頁數(shù):21頁1引言 11.1課題背景 11.2國內(nèi)外研究現(xiàn)狀 11.3本課題研究的意義 21.4本文的主要工作 22Web音樂搜索軟件的需求分析 22.1搜集信息 22.2整理信息 22.3接受查詢 33Web音樂搜索軟件的設(shè)計 33.1系統(tǒng)總體流程 33.2系統(tǒng)部件介紹 44Web音樂搜索軟件的具體實現(xiàn) 54.1數(shù)據(jù)設(shè)計 54.2網(wǎng)絡(luò)爬蟲設(shè)計 54.2.1遍歷算法 64.2.2模擬瀏覽器 84.2.3正則表達(dá)式 94.2.4數(shù)據(jù)分析 124.3采用java多線程技術(shù) 134.4web查詢端 144.4.1Struts框架 144.4.2Struts包內(nèi)容 144.4.3Struts體系結(jié)構(gòu) 155運行測試與分析 175.1軟件試運行 175.2軟件分析 19結(jié)論 19參考文獻(xiàn) 19致謝 20聲明 21PAGE第22頁共21頁1引言1.1課題背景面對浩瀚的網(wǎng)絡(luò)資源,搜索引擎為所有網(wǎng)上沖浪的用戶提供了一個入口,毫不夸張的說,所有的用戶都可以從搜索出發(fā)到達(dá)自己想去的網(wǎng)上任何一個地方。因此它也成為除了電子郵件以外最多人使用的網(wǎng)上服務(wù)。隨著因特網(wǎng)的迅猛發(fā)展、WEB信息的增加,用戶要在信息海洋里查找信息,就如同大海撈針一樣,搜索引擎恰好解決了這一難題(它可以為用戶提供信息檢索服務(wù))。但是隨著Internet的發(fā)展,搜索引擎也面臨著海量信息和人們獲取所需信息能力的矛盾。因此,信息的高效搜索顯得格外重要。1.2國內(nèi)外研究現(xiàn)狀 搜索引擎技術(shù)伴隨著WWW的發(fā)展是引人注目的。搜索引擎大約經(jīng)歷了三代的更新發(fā)展:第一代搜索引擎出現(xiàn)于1994年。這類搜索引擎一般都索引少于1,000,000個網(wǎng)頁,極少重新搜集網(wǎng)頁并去刷新索引。而且其檢索速度非常慢,一般都要等待10秒甚至更長的時間。在實現(xiàn)技術(shù)上也基本沿用較為成熟的IR(InformationRetrieval)、網(wǎng)絡(luò)、數(shù)據(jù)庫等技術(shù),相當(dāng)于利用一些已有技術(shù)實現(xiàn)的一個WWW上的應(yīng)用。在1994年3月到4月,網(wǎng)絡(luò)爬蟲WorldWebWorm(WWWW)平均每天承受大約1500次查詢。大約在1996年出現(xiàn)的第二代搜索引擎系統(tǒng)大多采用分布式方案(多個微型計算機(jī)協(xié)同工作)來提高數(shù)據(jù)規(guī)模、響應(yīng)速度和用戶數(shù)量,它們一般都保持一個大約50,000,000網(wǎng)頁的索引數(shù)據(jù)庫,每天能夠響應(yīng)10,000,000次用戶檢索請求。1997年11月,當(dāng)時最先進(jìn)的幾個搜索引擎號稱能建立從2,000,000到100,000,000的網(wǎng)頁索引。Altavista搜索引擎聲稱他們每天大概要承受20,000,000次查詢。2000年搜索引擎2000年大會上,按照Google公司總裁LarryPage的演講,Google正在用3,000臺運行Linux系統(tǒng)的個人電腦在搜集Web上的網(wǎng)頁,而且以每天30臺的速度向這個微機(jī)集群里添加電腦,以保持與網(wǎng)絡(luò)的發(fā)展相同步。每臺微機(jī)運行多個爬蟲程序搜集網(wǎng)頁的峰值速度是每秒100個網(wǎng)頁,平均速度是每秒48.5個網(wǎng)頁,一天可以搜集超過4,000,000網(wǎng)頁。搜索引擎一詞在國內(nèi)外因特網(wǎng)領(lǐng)域被廣泛使用,然而他的含義卻不盡相同。在美國搜索引擎通常指的是基于因特網(wǎng)的搜索引擎,他們通過網(wǎng)絡(luò)機(jī)器人程序收集上千萬到幾億個網(wǎng)頁,并且每一個詞都被搜索引擎索引,也就是我們說的全文檢索。著名的因特網(wǎng)搜索引擎包括FirstSearch、Google、HotBot等。在中國,搜索引擎通常指基于網(wǎng)站目錄的搜索服務(wù)或是特定網(wǎng)站的搜索服務(wù),本人這里研究的是基于因特網(wǎng)的搜索技術(shù)。1.3本課題研究的意義搜索引擎自動從英特網(wǎng)搜集信息,經(jīng)過一定整理以后,提供給用戶進(jìn)行查詢的系統(tǒng)。英特網(wǎng)上的信息浩瀚萬千,而且毫無秩序,所有的信息像汪洋上的一個個“小島”,網(wǎng)頁鏈接是這些“小島”之間縱橫交錯的橋梁,而搜索引擎,則為你繪制一幅一目了然的信息地圖,供你隨時查閱。搜索技術(shù)的意義在此。1.4本文的主要工作搜索引擎是根據(jù)用戶的查詢請求,查找信息返回給用戶。為了保證用戶查找信息的精度和新鮮度,搜索引擎需要建立并維護(hù)一個龐大的索引數(shù)據(jù)庫。一般的搜索引擎由網(wǎng)絡(luò)爬蟲程序、數(shù)據(jù)分析,查詢數(shù)據(jù)等部分組成。本文的各章分配是這樣安排的:第一章介紹系統(tǒng)的開發(fā)背景;第二章介紹系統(tǒng)的需求分析;第三章介紹系統(tǒng)的總體結(jié)構(gòu);第四章介紹系統(tǒng)的詳細(xì)設(shè)計;第五章測試與運行本系統(tǒng);最后是全文的總結(jié)。2Web音樂搜索軟件的需求分析隨著因特網(wǎng)的迅猛發(fā)展、WEB信息的增加,用戶要在信息海洋里查找信息,就像大海撈針一樣,搜索引擎恰好解決了這一難題(它可以為用戶提供信息檢索服務(wù))。但是隨著Internet的發(fā)展,搜索引擎也面臨著海量信息和人們獲取所需信息能力的矛盾。一個好的搜索引擎不再僅憑借數(shù)據(jù)庫大小、更新頻率、檢索速度、對多語言的支持這幾個基本特性來衡量,如何從龐大的資料庫中精確地找到正確的資料,被公認(rèn)為是下一代搜索技術(shù)的競爭要點,智能化、個性化特色的新型引擎成為未來搜索引擎的發(fā)展趨勢。搜索引擎需要實現(xiàn)互聯(lián)網(wǎng)信息的快速查詢,要實現(xiàn)以下功能。2.1搜集信息搜索引擎的信息搜集基本都是自動的。搜索引擎利用稱為網(wǎng)絡(luò)蜘蛛(spider)的自動搜索機(jī)器人程序來連上每一個網(wǎng)頁上的超連結(jié)。機(jī)器人程序根據(jù)網(wǎng)頁鏈到其它網(wǎng)頁中的超鏈接,就像日常生活中所說的“一傳十,十傳百……”一樣,從少數(shù)幾個網(wǎng)頁開始,連到數(shù)據(jù)庫上所有到其他網(wǎng)頁的鏈接。理論上,若網(wǎng)頁上有適當(dāng)?shù)某溄悠魅吮憧梢员闅v絕大部分網(wǎng)頁。2.2整理信息搜索引擎整理信息的過程稱為“建立索引”。搜索引擎不僅要保存搜集起來的信息,還要將它們按照一定的規(guī)則進(jìn)行編排。這樣,搜索引擎根本不用重新翻查它所有保存的信息而迅速找到所要的資料。想象一下,如果信息是不按任何規(guī)則地隨意堆放在搜索引擎的數(shù)據(jù)庫中,那么它每次找資料都得把整個資料庫完全翻查一遍,如此一來再快的計算機(jī)系統(tǒng)也沒有用。2.3接受查詢用戶向搜索引擎發(fā)出查詢,搜索引擎接受查詢并向用戶返回資料。搜索引擎每時每刻都要接到來自大量用戶的幾乎是同時發(fā)出的查詢,它按照每個用戶的要求檢查自己的索引,在極短時間內(nèi)找到用戶需要的資料,并返回給用戶。目前,搜索引擎返回主要是以網(wǎng)頁鏈接的形式提供的,這些通過這些鏈接,用戶便能到達(dá)含有自己所需資料的網(wǎng)頁。通常搜索引擎會在這些鏈接下提供一小段來自這些網(wǎng)頁的摘要信息,以幫助用戶判斷此網(wǎng)頁是否含有自己需要的內(nèi)容。3Web音樂搜索軟件的設(shè)計根據(jù)上一章需求分析的情況,結(jié)合本軟件所要需實現(xiàn)的功能,進(jìn)行設(shè)計。本章主要介紹該軟件的設(shè)計流程及步驟。3.1系統(tǒng)總體流程圖3.1系統(tǒng)結(jié)構(gòu)圖3.1是本系統(tǒng)結(jié)構(gòu)圖,該系統(tǒng)分兩大模塊:數(shù)據(jù)獲取模塊和用戶查詢模塊所示首先通過網(wǎng)絡(luò)爬蟲從Internet上獲取信息(模擬瀏覽器和遍歷算法)保存在爬蟲(crawl)的緩存中進(jìn)行分析如果存在音樂連接得出音樂的名字和url,然后調(diào)用javabean進(jìn)行把得到的數(shù)據(jù)寫入數(shù)據(jù)庫,客戶端過瀏覽器訪問TOMCAT(javaweb中間件)對數(shù)據(jù)進(jìn)行查詢,得到用戶查詢結(jié)果。3.2系統(tǒng)部件介紹(1)網(wǎng)絡(luò)爬蟲網(wǎng)絡(luò)爬蟲(crawl),是一個功能很強的WEB掃描程序。它可以在掃描WEB頁面的同時檢索其內(nèi)的超鏈接并加入掃描隊列等待以后掃描。因為WEB中廣泛使用超鏈接,所以一個crawl程序理論上可以訪問整個WEB頁面。為了保證網(wǎng)絡(luò)機(jī)器人遍歷信息的廣度和深度需要設(shè)定一些重要的鏈接并制定相關(guān)的掃描策略。(2)搜索網(wǎng)絡(luò)機(jī)器人將遍歷得到的頁面存放在系統(tǒng)緩存中,為了提高檢索效率,用正則表達(dá)式對得到的文本數(shù)據(jù)進(jìn)行分析,分析出music的超鏈接和名字并保存到mysql數(shù)據(jù)庫內(nèi)方便查找而且執(zhí)行效率很高。用戶輸入搜索條件后搜索程序?qū)⑼ㄟ^數(shù)據(jù)庫進(jìn)行檢索然后把符合查詢要求的數(shù)據(jù)庫按照一定的策略進(jìn)行分級排列并且返回給用戶。(3)基于Struts框架的client端Struts是一個基于SunJ2EE平臺的MVC框架,主要是采用Servlet和JSP技術(shù)來實現(xiàn)的。由于Struts能充分滿足應(yīng)用開發(fā)的需求,簡單易用,敏捷迅速,在過去的一年中頗受關(guān)注。Struts把Servlet、JSP、自定義標(biāo)簽和信息資源(messageresources)整合到一個統(tǒng)一的框架中。(4)Tomcat的Web服務(wù)器Web服務(wù)器是在網(wǎng)絡(luò)中為實現(xiàn)信息發(fā)布、資料查詢、數(shù)據(jù)處理等諸多應(yīng)用搭建基本平臺的服務(wù)器。Web服務(wù)器如何工作:在Web頁面處理中大致可分為三個步驟:第一步,Web瀏覽器向一個特定的服務(wù)器發(fā)出Web頁面請求;第二步,Web服務(wù)器接收到Web頁面請求后,尋找所請求的Web頁面,并將所請求的Web頁面?zhèn)魉徒oWeb瀏覽器;第三步,Web服務(wù)器接收到所請求的Web頁面,并將它顯示出來。Tomcat是一個開放源代碼、運行servlet和JSPWeb應(yīng)用軟件的基于Java的Web應(yīng)用軟件容器。Tomcat由Apache-Jakarta子項目支持并由來自開放性源代碼Java社區(qū)的志愿者進(jìn)行維護(hù)。TomcatServer是根據(jù)servlet和JSP規(guī)范進(jìn)行執(zhí)行的,因此我們就可以說TomcatServer也實行了Apache-Jakarta規(guī)范且比絕大多數(shù)商業(yè)應(yīng)用軟件服務(wù)器要好。(5)mysql的關(guān)系型數(shù)據(jù)庫MySQL是最受歡迎的開源SQL數(shù)據(jù)庫管理系統(tǒng),它由MySQLAB開發(fā)、發(fā)布和支持。MySQLAB是一家基于MySQL開發(fā)人員的商業(yè)公司,它是一家使用了一種成功的商業(yè)模式來結(jié)合開源價值和方法論的第二代開源公司。MySQL是MySQLAB的注冊商標(biāo)。MySQL是一個快速的、多線程、多用戶和健壯的SQL數(shù)據(jù)庫服務(wù)器。MySQL服務(wù)器支持關(guān)鍵任務(wù)、重負(fù)載生產(chǎn)系統(tǒng)的使用,也可以將它嵌入到一個大配置(mass-deployed)的軟件中去。MySQL網(wǎng)站()提供了關(guān)于MySQL和MySQLAB的最新的消息。4Web音樂搜索軟件的具體實現(xiàn)4.1數(shù)據(jù)設(shè)計本系統(tǒng)的開發(fā)采用mysql數(shù)據(jù)庫,它提供強大的數(shù)據(jù)查詢功能,能快速的查找出用戶需要的信息。(1)數(shù)據(jù)庫名:musicexplorer(2)表mappingmusic(主要用音樂url和音樂名字的映射)(3)表結(jié)構(gòu),如圖4.1所示。圖4.1數(shù)據(jù)庫結(jié)構(gòu)在圖4.1中,各字段名的含義如下:①m_name,音樂名稱;②m_url,音樂的url地址;③m_type,音樂的類型;④m_date,采集音樂的時間。4.2網(wǎng)絡(luò)爬蟲設(shè)計網(wǎng)絡(luò)爬蟲的主要功能是對互聯(lián)網(wǎng)上的網(wǎng)頁進(jìn)行抓取,對網(wǎng)頁進(jìn)行分析提取出音樂數(shù)據(jù)方便以后的查詢.其功能主要體現(xiàn)在對網(wǎng)頁的遍歷,和正則比對分析提取出web音樂信息。輸入一個入口網(wǎng)址,和采集的網(wǎng)頁數(shù)量網(wǎng)絡(luò)爬蟲程序?qū)⒆詣颖闅v網(wǎng)站信息保存到關(guān)系數(shù)據(jù)庫中,方便快速查詢在爬蟲的狀態(tài)欄目顯示當(dāng)前正分析的網(wǎng)頁信息。在爬蟲的文本框里顯示已經(jīng)分析采集到的音樂名稱。4.2.1遍歷算法crawl程序發(fā)現(xiàn)超連接后并不調(diào)用自己本身而是把超連接加入到等待隊列中。當(dāng)crawl程序掃描完當(dāng)前頁面后會根據(jù)制定的策略訪問隊列中的下一個超連接地址。主要通過crawl.java類來實現(xiàn)。雖然這里只描述了一個隊列,但在實際編程中用到了二個隊列,每個隊列都保存著同一處理狀態(tài)的URL。(1)等待隊列:在這個隊列中,URL等待被crawl程序處理。新發(fā)現(xiàn)的URL也被加入到這個隊列中處理隊列當(dāng)crawl程序開始處理時,他們被送到這個隊列中錯誤隊列如果在解析網(wǎng)頁時出錯,URL將被送到這里。該隊列中的URL不能被移入其他隊列中。(2)完成隊列:如果解析網(wǎng)頁沒有出錯,URL將被送到這里。該隊列中的URL不能被移入其它隊列中在同一時間URL只能在一個隊列中,我們把它稱為URL的狀態(tài)。在這個過程中,當(dāng)一個URL被加入到等待隊列中時crawl程序就會開始運行。只要等待隊列中有一個網(wǎng)頁或crawl程序正在處理一個網(wǎng)頁,程序就會繼續(xù)他的工作。當(dāng)?shù)却犃袨榭詹⑶耶?dāng)前沒有任何網(wǎng)頁時,crawl程序就會停止它的工作。遍歷算法源程序如下所示:publicvoidcrawlx(StringstartUrl,intmaxUrls)throwsException{ Stringdispalystr=""; mp3m=null; intn=0; Stringdate=null; da=newDatabase();HashSetcrawledList=newHashSet();LinkedHashSettoCrawlList=newLinkedHashSet();Searchsea=null;Analyzerana=null;toCrawlList.add(startUrl);SimpleDateFormatsetDateFormat=newSimpleDateFormat("yyyy/MM/ddkk:mm:ss");date=setDateFormat.format(Calendar.getInstance().getTime());while(toCrawlList.size()>0){if(maxUrls!=-1){if(crawledList.size()==maxUrls){break;}}//GetURLatbottomofthelist.Stringurl=(String)toCrawlList.iterator().next();//RemoveURLfromthetocrawllist.toCrawlList.remove(url);//增加已處理的URL到crawledListcrawledList.add(url);if(hasBeenVisit(url)){System.out.println("重復(fù):"+url+"已經(jīng)去掉");}else{addchain.add(url);sea=newSearch(url);StringpageContents=sea.getMessage();//downloadPage(verifiedUrl);if(pageContents!=null&&pageContents.length()>0){//從頁面中獲取有效的鏈接ana=newAnalyzer(pageContents,url);ArrayListlinks=ana.linkAnalyzer();//retrieveLinks(verifiedUrl,pageContents,crawledList,limitHost)Listmp3link=ana.mp3analyzer();toCrawlList.addAll(links);for(Iteratorits=mp3link.iterator();its.hasNext();){ m=(mp3)its.next();Stringsql="INSERTINTO`mappingmusic`(`m_url`,`m_name`,`m_type`,`m_date`)VALUES('"+m.getUrl()+"','"+m.getName()+"','"+m.getType()+"','"+date+"')"; da.executeInsert(sql); dispalystr+="名字:"+m.getName()+"\n"+"類型:"+m.getType()+"\n"+"地址:"+m.getUrl()+"\n"; this.jtextpane.setText(dispalystr); //System.out.println("名字:"+m.getName()+"\n"+"地址:"+m.getUrl()+"\n"+"類型:"+m.getType()); }this.jl.setText(url);System.out.println("正在解析:"+url);Thread.sleep(300);}n++;}}jl.setText("已經(jīng)完成采集任務(wù)共分析"+n+"地址");System.out.println("共分析"+n+"地址");}4.2.2模擬瀏覽器模擬瀏覽器主要是從web服務(wù)器上獲取網(wǎng)頁并把網(wǎng)頁保存到本地緩沖區(qū)中,方便后續(xù)程序分析分類。模擬瀏覽器主要通過search.java類來實現(xiàn)。網(wǎng)絡(luò)API通過提供URL類讓用戶能在源代碼層使用URL,每一個URL對象都封裝了資源的標(biāo)識符和協(xié)議處理程序。獲得URL對象的途徑之一是調(diào)用URI對象的toURL()方法。但是這種選擇不一定方便,作為代替,可以調(diào)用URL構(gòu)造函數(shù)來建立URL對象,也可以調(diào)用URL的方法來提取URL的組件,打開一個輸入流(inputstream)從資源中讀取信息,獲得某個能方便檢索資源數(shù)據(jù)的對象的引用,比較兩個URL對象中的URL,獲得到資源的連接對象,該連接對象允許代碼了解(并寫入)更多的資源的信息。URL類有六個構(gòu)造函數(shù)。其中最簡單的是URL(Stringurl),它有一個String類型的參數(shù),把URL分解為自己的組件,并把這些組件存儲在一個新的URL對象中。如果某個URL沒有包含協(xié)議處理程序或該URL的協(xié)議是未知的,其它的五個構(gòu)造函數(shù)會產(chǎn)生一個.MalformedURLException對象。下面的代碼展示了網(wǎng)絡(luò)爬蟲調(diào)用網(wǎng)絡(luò)API提供的URL類從目標(biāo)服務(wù)器獲取數(shù)據(jù)保存到緩沖區(qū)中的過程。模擬瀏覽器源程序如下所示:booleanmessagedig()throwsException{ URLurl; HttpURLConnectionhttp; java.io.InputStreamurlstream=null; url=newURL(this.url); try{ http=(HttpURLConnection)url.openConnection(); http.setRequestProperty("User-Agent","Mozilla/3.0"); http.connect(); urlstream=http.getInputStream(); }catch(Exceptione){ //TODO自動生成catch塊 System.out.println("錯誤的URL地址"+url); returnfalse; } java.io.BufferedReaderreader=newjava.io. BufferedReader(newjava.io.InputStreamReader(urlstream)); Stringcurrentline="",sumstring=""; try{ while((currentline=reader.readLine())!=null){ sumstring+=currentline;//保存在網(wǎng)絡(luò)緩沖區(qū)中 } setMessage(sumstring); newString(sumstring.getBytes(),"gbk"); } catch(.SocketExceptione){ System.out.println("錯誤的文件格式:"+url.getPath()); } returntrue; }4.2.3正則表達(dá)式正則表達(dá)式是一門語言。有許多正則表達(dá)式語法、選項和特殊字符,在Pattern.java源文件中大家可以查看??赡鼙认胂笾械囊獜?fù)雜。組合邏輯是下一步的事情。只要正確運用,正則表達(dá)式能夠在字符串提取和文本修改中起到很大的作用。正則表達(dá)式在本程序中的作用是分析網(wǎng)頁中存在的超鏈接并保存到等待隊列中,方便爬蟲遍歷網(wǎng)頁獲取數(shù)據(jù),并把網(wǎng)頁中存在的音樂信息提取出來為爬蟲儲存數(shù)據(jù)做準(zhǔn)備。(1)句點符號假設(shè)你在玩英文拼字游戲,想要找出三個字母的單詞,而且這些單詞必須以“t”字母開頭,以“n”字母結(jié)束。另外,假設(shè)有一本英文字典,你可以用正則表達(dá)式搜索它的全部內(nèi)容。要構(gòu)造出這個正則表達(dá)式,你可以使用一個通配符——句點符號“.”。這樣,完整的表達(dá)式就是“t.n”,它匹配“tan”、“ten”、“tin”和“ton”,還匹配“t#n”、“tpn”甚至“tn”,還有其他許多無意義的組合。這是因為句點符號匹配所有字符,包括空格、Tab字符甚至換行符如:①正則表達(dá)式:t.n②匹配:tan,Ten,tin,ton,tn,t#n,tpn,等。(2)方括號符號為了解決句點符號匹配范圍過于廣泛這一問題,你可以在方括號(“[]”)里面指定看來有意義的字符。此時,只有方括號里面指定的字符才參與匹配。也就是說,正則表達(dá)式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因為在方括號之內(nèi)你只能匹配單個字符:①正則表達(dá)式:t[aeio]n②匹配:tan,Ten,tin,ton(3)“或”符號如果除了上面匹配的所有單詞之外,你還想要匹配“toon”,那么,你可以使用“|”操作符?!皘”操作符的基本意義就是“或”運算。要匹配“toon”,使用“t(a|e|i|o|oo)n”正則表達(dá)式。這里不能使用方擴(kuò)號,因為方括號只允許匹配單個字符;這里必須使用圓括號“()”。圓括號還可以用來分組,具體請參見后面介紹。①正則表達(dá)式:t(a|e|i|o|oo)n②匹配:tan,Ten,tin,ton,toon(4)表示匹配次數(shù)的符號表4.1顯示了表示匹配次數(shù)的符號,這些符號用來確定緊靠該符號左邊的符號出現(xiàn)的次數(shù)。表4.1表示次數(shù)的符號符號次數(shù)#0次或者多次+1次或者多次?0次或者一次{n}恰好n次{n,m}從n次到m次假設(shè)要在文本文件中搜索美國的社會安全號碼。這個號碼的格式是999-99-9999。用來匹配它的正則表達(dá)式如圖一所示。在正則表達(dá)式中,連字符(“-”)有著特殊的意義,它表示一個范圍,比如從0到9。因此,匹配社會安全號碼中的連字符號時,它的前面要加上一個轉(zhuǎn)義字符“\”。正則表達(dá)源程序如下:publicclassCompareStr{publicbooleancomparestring(Stringoristring,Stringtostring)//判斷是否存在指定表達(dá)式{ Patternp=null;//正則表達(dá)式 Matcherm=null;//操作的字符串 booleanb; p=Ppile(oristring,Pattern.CASE_INSENSITIVE);m=p.matcher(tostring); b=m.find();returnb;} publicStringreplace(Stringorigin,StringtoString,Strings){//替換字符 Patternp=null; Matcherm=null; p=Ppile(origin,Pattern.CASE_INSENSITIVE); m=p.matcher(toString); returnm.replaceAll(s); } publicStringgetString(Stringreg,Strings){//返回得到的字符 Stringres; Patternp=null; Matcherm=null; p=Ppile(reg,Pattern.CASE_INSENSITIVE); m=p.matcher(s); if(m.find()){ returnm.group(); }4.2.4數(shù)據(jù)分析因為Web中的信息都是建立在HTML協(xié)議之上的,所以網(wǎng)絡(luò)機(jī)器人在檢索網(wǎng)頁時的第一個問題就是如何解析HTML。在解決如何解析之前,先來介紹HTML中的幾種數(shù)據(jù)。①文本:除了腳本和標(biāo)簽之外的所有數(shù)據(jù)。②注釋:程序員留下的說明文字,對用戶是不可見的。③簡單標(biāo)簽:由單個表示的HTML標(biāo)簽。④開始標(biāo)簽和結(jié)束標(biāo)簽:用來控制所包含的HTML代碼。在進(jìn)行解析的時候不用關(guān)心所有的標(biāo)簽,只需要對其中一種重要的進(jìn)行解析即可。本軟件只關(guān)心超連接標(biāo)簽,下面介紹了在本軟件中如何使用。(1)超連接標(biāo)簽超連接定義了WWW通過Internet鏈接文檔的功能。他們的主要目的是使用戶能夠任意遷移到新的頁面,這正是網(wǎng)絡(luò)爬蟲最關(guān)心的標(biāo)簽。publicArrayListlinkAnalyzer()//分析網(wǎng)頁上存在的超鏈接.保存在等待隊列中publicListmp3analyzer()//分析網(wǎng)頁上存在的音樂超鏈接和音樂名稱.保存到數(shù)據(jù)庫中方便查詢(2)超鏈接分析以下是本軟件所用到的關(guān)鍵源程序(超鏈接),代碼如下: if(parestring("href",firstword)&&firstword.indexOf("{")<0&&firstword.indexOf("}")<0&&firstword.indexOf("'")<0&&firstword.indexOf(";")<0&&firstword.indexOf(".css")<0&&firstword.indexOf(".ico")<0&&!firstword.endsWith("mp3")){ Stringout=null; out=compstr.replace("href=|\"",firstword,""); if(out.startsWith("http://")){//完整的路徑 li.add(out); } else{//相對的路徑 try{ if(webadd.endsWith("html")||webadd.endsWith("htm")){ intm=webadd.lastIndexOf("/"); Strings=webadd.substring(0,m); webadd=s; System.out.println("debug"+s+"/"+out); } } catch(StringIndexOutOfBoundsExceptione){ } if(out.startsWith("/")){ /*intm=webadd.lastIndexOf("/"); webadd=webadd.substring(0,m); System.out.println("dafa"+webadd); */ out=webadd+out; li.add(out); } else{ out=webadd+"/"+out; li.add(out); } } } i++; }4.3采用java多線程技術(shù)線程是Java的一大特性,它可以是給定的指令序列、給定的方法中定義的變量或者一些共享數(shù)據(jù)(類一級的變量)。在Java中每個線程有自己的堆棧和程序計數(shù)器(PC),其中堆棧是用來跟蹤線程的上下文(上下文是當(dāng)線程執(zhí)行到某處時,當(dāng)前的局部變量的值),而程序計數(shù)器則用來跟蹤當(dāng)前線程正在執(zhí)行的指令。(1)線程的生命周期一個線程的的生命周期可以分成兩階段:生存(Alive)周期和死亡(Dead)周期,其中生存周期又包括運行狀態(tài)(Running)和等待狀態(tài)(Waiting)。當(dāng)創(chuàng)建一個新線程后,這個線程就進(jìn)入了排隊狀態(tài)(Ready),當(dāng)線程中的方法start()被調(diào)用時,線程就進(jìn)入生存周期,這時它的方法isAlive()始終返回真值,直至線程進(jìn)入死亡狀態(tài)。(2)線程的實現(xiàn)有兩種方法可以實現(xiàn)線程,一種是擴(kuò)展java.lang.Thread類,另一種是通過java.lang.Runnable接口。所實現(xiàn)的代碼如下:if(ThreadNum>0) { for(inti=0;i<3;i++){ t[i]=newThread(crawl,String.valueOf(i)); t[i].start(); } }else{ t[0]=newThread(crawl); t[0].start(); } }4.4web查詢端4.4.1Struts框架易用性和重用性的優(yōu)點,同時簡化了基于MVC的web應(yīng)用程序的開發(fā)。本章詳細(xì)討論struts架構(gòu)。我們將看到struts是如何清晰地區(qū)分控制,事務(wù)邏輯和外觀,從而簡化了開發(fā)應(yīng)用程序過程的。我們還將介紹struts提供的類如何使得開發(fā)工作更加簡單,這些類包括:(1)控制程序流程的類;(2)實現(xiàn)和執(zhí)行程序事務(wù)邏輯的類;(3)自定義的標(biāo)記庫使得創(chuàng)建和驗證HTML表單更加容易。4.4.2Struts包內(nèi)容文件夾jakarta-struts-1.0.2包含兩個目錄,lib和webapps。在lib目錄中有使用struts創(chuàng)建應(yīng)用程序是所需的文件,如表4.2所示。表4.2系統(tǒng)包結(jié)構(gòu)文件描述jdbc2_0-stdext.jar包含JDBC2.0OptionalPackageAPI類。如果我們要使用struts提供的數(shù)據(jù)資源,就需要將這個文件拷貝到WEB-INF\lib下Struts.jar包含struts中所有的java類。同樣也需要拷貝到WEB-INF\lib下*.tld標(biāo)記庫描述器文件,描述了多個struts標(biāo)記庫中的自定義標(biāo)記。同樣要拷貝到WEB-INF\lib下在webapps目錄下這樣一些下文件,如表4.3所示。表4.3webapp目錄結(jié)構(gòu)Web應(yīng)用程序描述Struts-blank.war一個簡單的web應(yīng)用程序Struts-documentation.war包含struts站點上所有struts文檔Struts-example.warStruts很多特性的示范Struts-exercisetaglib.war主要用于對自定義標(biāo)簽庫進(jìn)行增加而使用的測試頁,但也可以示范如何使用struts標(biāo)記Struts-template.war包含struts模板標(biāo)記的介紹和范例Struts-upload.war一個簡單的例子,示范如何使用struts框架上傳文件4.4.3Struts體系結(jié)構(gòu)接下來從MVC角度觀察struts框架中的組件,其框架中三個部分:模型,視窗和控制器。模型包括一個JavaBean組件Database,它有屬性,代表用戶輸入的名字。它提供了get/set方法,分別用于讀取和設(shè)置屬性,它還提供一個executeInsert()方法,負(fù)責(zé)把屬性保存到持久化存儲系統(tǒng)中,如數(shù)據(jù)庫或文件系統(tǒng)。對于更為復(fù)雜的Web應(yīng)用,JavaBean組件可以作為EJB或Web服務(wù)的前端組件(組件Database采用數(shù)據(jù)庫連接池技術(shù)有效的利用率數(shù)據(jù)資源)。視圖包括一個JSP文件musicview.jsp,它提供用戶界面,接受用戶輸入的姓名。視圖還包括一個searchFormBean,它用來存放表單數(shù)據(jù),并進(jìn)行表單驗證,如果用戶沒有輸入姓名就提交表單,將返回出錯信息??刂破靼ㄒ粋€Action類searchAction.java,它完成三項任務(wù):①進(jìn)行業(yè)務(wù)邏輯;②調(diào)用模型組件Database的executequery()方法查詢數(shù)據(jù)庫;③決定將合適的視圖組件返回給用戶。(1)設(shè)計細(xì)節(jié)①關(guān)鍵字反選,如圖4.2所示。圖4.2關(guān)鍵字反選代碼如下:Stringlight_dispaly(Strings,Stringkey){//高亮顯示關(guān)鍵字Stringresult=null; result=s.replaceAll(key,"<fontstyle='COLOR:#e10900'>"+key+"</font>");//替換成紅色的字體returnresult; }②分頁,如圖4.3所示。圖4.3分頁StringpulgPage(Stringsumpage,Stringcurrentpage,Stringkey,Stringmod){//分頁構(gòu)造 Stringlastpage=""; Stringlastpage_be="<TDvAlign=bottomnoWrap><FONTsize=-1><ahref='search.do?key="+key+"&mode="+mod+"&page="; Stringlastpage_af="'>上一頁</a>: </FONT></TD>"; Stringbefore_enu="<TDvAlign=bottomnoWrap><FONTsize=-1><spanclass='i'><ahref='search.do?key="+key+"&mode="+mod+"&page="; Stringprocess_enu="'>"; Stringafter_enu_cur="</span></FONT></TD><TDvAlign=bottomnoWrap> </TD>"; Stringbefore_enu_cur="<TDvAlign=bottomnoWrap><FONTsize=-1><spanclass='i'>"; Stringafter_enu="</a></span></FONT></TD><TDvAlign=bottomnoWrap> </TD>"; Stringnextpage=""; Stringnextpage_be="<TDvAlign=bottomnoWrap><FONTsize=-1><ahref='search.do?key="+key+"&mode="+mod+"&page="; Stringnextpage_af="'>下一頁</a></FONT></TD>"; Stringpageview=""; intsum=Integer.parseInt(sumpage); lastpage=lastpage_be+String.valueOf(Integer.parseInt(currentpage)-1)+lastpage_af; nextpage=nextpage_be+String.valueOf(Integer.parseInt(currentpage)+1)+nextpage_af; if(currentpage.equals("1")){ lastpage=""; } if(currentpage.equals(sumpage)){ nextpage="";} pageview=lastpage; for(inti=1;i<=sum;i++){ if(String.valueOf(i).equals(currentpage)){ pageview+=before_enu_cur+String.valueOf(i); pageview+=after_enu_cur; } else{ pageview+=before_enu; pageview+=String.valueOf(i)+process_enu+String.valueOf(i); pageview+=after_enu; }} pageview+=nextpage; returnpageview; }以上代碼是實現(xiàn)列舉頁碼和順序翻頁的功能。5運行測試與分析5.1軟件試運行(1)運行采集工具從互聯(lián)網(wǎng)采集音樂信息儲存到關(guān)系數(shù)據(jù)庫,如圖5.1所示。圖5.1采集工具(2)在web客戶端輸入查詢條件進(jìn)行查詢查看結(jié)果,如圖5.2、5.3所示。圖5.2web查詢界面圖5.3查詢結(jié)果(3)音樂試聽功能能夠?qū)Σ樵兊降慕Y(jié)果進(jìn)行試聽,保證用戶查詢的準(zhǔn)確性,如圖5.4所示。圖5.4音樂試聽5.2軟件分析通過以上測試與分析表明本畢業(yè)設(shè)計達(dá)到了預(yù)期目標(biāo),實現(xiàn)了web音樂搜索的相關(guān)功能:完成對互聯(lián)網(wǎng)的音樂信息的采集、分析、分類、保存和查詢等功能,實現(xiàn)了從海量信息中挖掘數(shù)據(jù),提高了信息獲取的效率,是一個比較實用的搜索軟件。結(jié)論隨著搜索經(jīng)濟(jì)的崛起,人們開始越加關(guān)注全球各大搜索引擎的性能、技術(shù)和日流量。作為企業(yè),會根據(jù)搜索引擎的知名度以及日流量來選擇是否要投放廣告等;作為普通網(wǎng)民,會根據(jù)搜索引擎的性能和技術(shù)來選擇自己喜歡的引擎查找資料;作為研究者,會把有代表性的搜索引擎作為研究對象。搜索引擎是根據(jù)用戶的查詢請求,查找信息返回給用戶。為了保證用戶查找信息的精確度和新鮮度,搜索引擎需要建立并維護(hù)一個龐大的索引數(shù)據(jù)庫。一般的搜索引擎由網(wǎng)絡(luò)爬蟲程序、數(shù)據(jù)分析,數(shù)據(jù)查詢等部分組成。Web音樂搜索軟件系統(tǒng)實現(xiàn)了互聯(lián)網(wǎng)信息采集,發(fā)布,查詢等環(huán)節(jié),是對當(dāng)前通用的搜索引擎(如google,badidu)的研究總結(jié):本設(shè)計首先分析了當(dāng)前通用流行的搜索引擎的各個流程:信息采集(主要是遍歷算法)、信息分析(對網(wǎng)絡(luò)字符的分析)及查詢控制(數(shù)據(jù)的查詢)的原理;并使用網(wǎng)絡(luò)爬蟲來實現(xiàn)網(wǎng)絡(luò)信息的采集,并通過正則表達(dá)式對采集到的信息進(jìn)行分析;在本軟件的開發(fā)使用java語言進(jìn)行開發(fā);最后通過測試與分析,說明Web音樂搜索軟件是當(dāng)今通用搜索引擎的一個縮影版,研究點。通過本次畢業(yè)設(shè)計學(xué)到了軟件開發(fā)的過程,明確了需求分析在軟件設(shè)計中的重要地位,鍛煉了自己的自學(xué)能力,也是對大學(xué)四年學(xué)習(xí)的成果展示。參考文獻(xiàn)[1]AndrewS.Tanenbaum.計算機(jī)網(wǎng)絡(luò)[M].北京:清華大學(xué)出版社,1998。[2]Anonymous.網(wǎng)絡(luò)最高安全技術(shù)指南[M].北京:機(jī)械工業(yè)出版社,1998。[3]DavidA.Solomon.WindowsNT技術(shù)內(nèi)幕[M].北京:清華大學(xué)出版社,1999。[4]DouglasE.Comer.TCP/IP網(wǎng)絡(luò)互連技術(shù)[M].北京:清華大學(xué)出版社,1998。[5]耿祥義,張躍平.Java2使用教程(第三版)[M].北京:清華大學(xué)出版社,2006。[6]張仕斌,譚三.網(wǎng)絡(luò)安全技術(shù)[M].北京:清華大學(xué)出版社,2002。[7]耿祥義.java實用教材[M].北京:清華大學(xué)出版社,2004。致謝本文是在張仕斌老師和陳念偉老師的熱情關(guān)心和指導(dǎo)下完成的,他們淵博的知識和嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度使我受益匪淺,對順利完成本課題起到了極大的作用。在此向他們表示我最衷心的感謝!在論文完成過程中,本人還得到了其他老師和許多同學(xué)的熱心幫助,本人向他們表示深深的謝意!最后向在百忙之中評審本文的各位專家、老師表示衷心的感謝!作者簡介姓名:徐利榮性別:男出生年月:1984.03民族:漢E-mail:xuyuner@163.com聲明本論文的工作是2007年2月至2007年6月在成都信息工程學(xué)院網(wǎng)絡(luò)工程系完成的。文中除了特別加以標(biāo)注地方外,不包含他人已經(jīng)發(fā)表或撰寫過的研究成果,也不包含為獲得成都信息工程學(xué)院或其他教學(xué)機(jī)構(gòu)的學(xué)位或證書而使用過的材料。除非另有說明,本文的工作是原始性工作。關(guān)于學(xué)位論文使用權(quán)和研究成果知識產(chǎn)權(quán)的說明:本人完全了解成都信息工程學(xué)院有關(guān)保管使用學(xué)位論文的規(guī)定,其中包括:(1)學(xué)校有權(quán)保管并向有關(guān)部門遞交學(xué)位論文的原件與復(fù)印件。(2)學(xué)??梢圆捎糜坝 ⒖s印或其他復(fù)制方式保存學(xué)位論文。(3)學(xué)??梢詫W(xué)術(shù)交流為目的復(fù)制、贈送和交換學(xué)位論文。(4)學(xué)??稍试S學(xué)位論文被查閱或借閱。(5)學(xué)??梢怨紝W(xué)位論文的全部或部分內(nèi)容(保密學(xué)位論文在解密后遵守此規(guī)定)。除非另有科研合同和其他法律文書的制約,本論文的科研成果屬于成都信息工程學(xué)院。特此聲明!作者簽名:2007年6月10日AsAlexanderwentoffdutyhenoticedthebobbingflickerofships'lightsfartoportandstarboard.SeaShepherdploughedontowardsMiami.4.AllashoreSusanopenedherarms,asiftogreetalong-lostfriend.Thesunhadreturned--notthehalf-hearted,hide-and-seeksunofrecentweeks.No,thiswastherealthing,puregoldpouringoutofaperfectsky.Shefeltthewarmthseepingdeepintoherskin.Slowlytheshorefloatedforwardtomeetthem,orsoitseemed.Miami!Withoutasking,shehelpedherselftothebinocularshangingroundGary'sneck.Fumbling,sheadjustedthefocus.Shewantedtoseeeverything.Susangavealittlegruntofpleasure:whitesand,palmtrees,highhotelswhosereflectingwindowssignalledlikelighthouses,elegantyachtsleaningonthewindandcombingcreamilythroughthesmoothbluewater.Blue!Theseawassoblue!Travelbrochure-blue.Susangazedinwonder.CouldthisbethesameAtlanticwhosegrey-greenwaveshadmadeherstomachchurnanddrivenherintoherbunk?ShehandedbackGary'sbinoculars.Bothwereshadingtheireyes.Thesunshoneeverywhere,fromaboveandfrombelow,sparkingsilveronthewater,teemingandgleaminglikeashoalofsurfacingfish..."Warmenoughforyou?"BenBellinghamstoodbetweenthem."Temperature'sintheninetiesonthemainland."Theychattedforaminuteortwo."Look,there'sapelican."Benpointed."Abrownpelican,quitecommonaroundtheFloridacoast.Peoplelovewatchingtheirantics."Thebigbird,whichremindedGaryofapterodactyl,wasmakingareconnaissanceflightparalleltoSeaShepherd.Suddenlythepelicanplunged.Asplash,aquickgobblingmovement,andanotherfatfishwasstoredawayinthebird'sexpandablethroatpouch."Pelicansusetheirelasticbillsasscoop-nets,"Benexplained."Andtheyvarytheheightoftheirdivedependingonthedepthofthefish.Eattwopoundsaday,thosefellas,aquarteroftheirbodyweight."Thebirdcameintolandonanoldjetty.Nowitlookedclumsy,swayingandteeteringdowninvisiblestepstoalightonflatwebbedfeet.Soonafter,adishevelledchickwasrummagingintheadult'sbeak."Musthaveanestnearby,"commentedBellingham.Heshookhimself."Well,gottabegoing.I'llseeyouagainbeforewedisembark.Bytheway,betteralteryourwatches--it's9#10localtime,fivehoursbehindEngland."Thebear-likenaturalistshambledaway.TothinkSusanhadoncefeltshy,almostfrightenedofmeetinghim!Shesensed,ratherthansaw,anewpresenceandpeekedsideways.ItwasYves.Hewasdrapedovertheship'srailandlookedaboutashappyassomeonebeingseasick.Whysoglum?Susan'seyestookinthescenefartheralongthedeck.Ah,thatwasit.Vanessa.Wearingapolka-dotsun-suitthatshowedoffherslenderfigureandshapelylegs.TalkingtoJohnnyMasterson,thehandsomehe-mansecurityofficer,inkhakishirtandshorts.Obviouslyenjoyingthemselves.PoorYves!Thepelicanhadresumeditspatrol.SusaninchednearertoYves."Hello,"shesaidlightly."Seethepelican?Betchaitcatchessomethinginaminute?"Yvesliftedhishead.Immediatelythepelicanobligedwithaspectacularswoop."Toldyou,didn'tI?"Susanchirped.Yvesfeignedinterest,buthisfacelethimdown.SusanswitchedhergazefromthebirdtoYves,fromYvestoVanessa,andbacktoYves.Thepelicanflappedoff."Nevermind,"shemurmured,"thereareplentymorefishinthesea."Yao:AndIamYao,kingoftherock.Andthere'snothin'yougirlscandoaboutit.Ling[takingafightingstance]:Oh,yeah?Well,IthinkPing[elbowingMulan]andIcouldtakeyou.Mulan[wadingaway]:Ireallydon'twanttotakehimanywhere.Ling[followingMulan]:Ping,wehavetofight!Mulan:Nowedon't.[unnaturally]Wecouldjustcloseoureyesandswimaround.Ling:C'mondon'tbesuchag--Ouch!Somethingbitme.Mushu[poppingoutofthewaterbetweenMulanandLing]:Whatanastyflavor.Ling[withfearandgusto]:Snake!Chien-Po[whileallthreeofthemclimbuptherockandoneachother]:Snake,snake.[MulanwhistlesforKhanandwadesbacktoshore.KhancomescloseenoughtoshoreandMulanhidesbehindKhanasshewrapsatowelaroundherbody][CuttoYao,LingandChien-Pocalmeddownsittingontherock]Ling:Somekingoftherock![Yaopusheshimofftherock][CuttoMulanwithtowelwrappedaroundher]Mulan:Boy,thatwasclose.Mushu[brushinghisteeth]:No,thatwasvile!Youowemebig!Mulan:Ineverwanttoseeanakedmanagain.[therestofthetroopsrunbynakedandjumpintothelake]Mushu:Hey,don'tlookatme.Iain'tbitinganymorebutts.[CuttoMulanoutsideChiFu'sTenthavingdressedfully.ChiFuandShangaretalkingfrominside]ChiFu[fadingin]:Youthinkyourtroopsarereadytofight?Hah!TheywouldnotlastaminuteagainsttheHuns.Shang:Theycompletedtheirtraining.ChiFu:Those*boys*arenomorefittobesoldiersthanyouaretobeCaptain.Oncethegeneralreadsmyreport,yourtroopswillneverseebattle.Mushu[fromoutsidethetent]:Ohnoyoudon't.I'veworkedtohardtogetMulanintothiswar.[toCri-Kee]Thisguy'smessingwithmyplan.Shang[grabbingontothefrontofChiFu'sclipboard]:We'renotfinished.ChiFu[pullingtheboardaway]:Becareful,Captain.TheGeneralmaybeyourfather,butIamtheEmperor'scouncil.And,oh,bytheway,huh,Igotthatjobonmyown.[openstheentrancetothetentforShang]You'redismissed.[ShangstormsoutofthetentandstartstowalkbyMulan]Mulan[inamanlyvoice]:Hey,I'llholdhimandyoupunch,heh,heh...[Shangwalksbywithoutreacting]ornot.[callingouttoShang]Forwhatit'sworth,Ithinkyou'reagreatcaptain.[Shangpausestoglanceback,thencontinuesforward]Mushu[lookingatMulan'sfixed
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 交通事故責(zé)任賠償協(xié)議書七篇
- 入股個人合作協(xié)議書
- 關(guān)于重慶市離婚協(xié)議書8篇
- 2025經(jīng)濟(jì)損失賠償協(xié)議書10篇
- 銀屑病病因介紹
- (2024)塑料瓶胚生產(chǎn)建設(shè)項目可行性研究報告(一)
- 山東省泰安市東平縣實驗中學(xué)2022-2023學(xué)年七年級上學(xué)期第二次月考生物試題(原卷版)-A4
- 泌尿腫瘤病區(qū)實習(xí)生考試
- 電子裝接實05課件講解
- 第四章建設(shè)工程合同法律原理與實務(wù)-授課吳超27課件講解
- GB/T 20734-2006液化天然氣汽車專用裝置安裝要求
- GB/T 20197-2006降解塑料的定義、分類、標(biāo)志和降解性能要求
- GB/T 15561-2008靜態(tài)電子軌道衡
- GB/T 1412-2005球墨鑄鐵用生鐵
- 軍事理論論述題
- 寧德時代財務(wù)報表分析
- 門式起重機(jī)安裝施工方案
- 高中語文語法知識課件
- 《國際法》形成性考核參考資料廣東開放大學(xué)2022年10月題庫
- 《茅臺酒有限公司內(nèi)部控制現(xiàn)狀及問題案例分析》8800字
- 純電動汽車整車控制器(VCU)策略 PPT
評論
0/150
提交評論