版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
摘要開(kāi)放性移動(dòng)平臺(tái)Android強(qiáng)勢(shì)的異軍突起,不僅帶動(dòng)了基于該平臺(tái)的移動(dòng)終端特別是智能得到全面的開(kāi)發(fā)和使用,而且收獲了良好的市場(chǎng)反響和開(kāi)展前景,促進(jìn)了相關(guān)領(lǐng)域的不斷創(chuàng)新和相關(guān)產(chǎn)業(yè)的快速開(kāi)展。如今我們不得不成認(rèn)已經(jīng)跨入了移動(dòng)時(shí)代,移動(dòng)應(yīng)用開(kāi)發(fā)方興未艾,其中Android平臺(tái)上的應(yīng)用程序開(kāi)發(fā)以其獨(dú)特優(yōu)勢(shì)從中脫穎而出,成為了一個(gè)重要的熱門(mén)研究領(lǐng)域。由于Android系統(tǒng)的靈活性和穩(wěn)定性,越來(lái)越多的傳統(tǒng)的應(yīng)用程序逐漸從計(jì)算機(jī)移植到上。眾所周知,傳統(tǒng)的OA〔OfficeAutomation辦公自動(dòng)化〕已取得了長(zhǎng)足的開(kāi)展并漸趨成熟,如通訊錄、文件管理、公文處理、日程管理、通知等功能已得到完美實(shí)現(xiàn),Android平臺(tái)的高效與智能結(jié)合OA系統(tǒng),將傳統(tǒng)的OA系統(tǒng)具備的功能移植到智能上,讓用戶能夠隨時(shí)隨地進(jìn)行掌上移動(dòng)辦公,對(duì)提高企業(yè)的辦公效率,減少不必要的消耗具有重要意義和實(shí)用價(jià)值。在本文中,運(yùn)用Java相關(guān)技術(shù),結(jié)合Android平臺(tái)的特點(diǎn),對(duì)移動(dòng)OA的實(shí)際需求和業(yè)務(wù)流程進(jìn)行了分析,主要完成了一個(gè)基于Android平臺(tái)的移動(dòng)OA的設(shè)計(jì)工作,重點(diǎn)探討了開(kāi)發(fā)流程和詳細(xì)的實(shí)現(xiàn)方法,同時(shí)也闡述了實(shí)現(xiàn)移動(dòng)OA系統(tǒng)所涉及的根底知識(shí)和關(guān)鍵技術(shù)。關(guān)鍵詞:Android;移動(dòng)辦公;Java;開(kāi)發(fā)方法;ServletABSTRACTWiththerapiddevelopmentofanopenmobileplatformAndroid,makingtheplatformbasedonmobileterminals,especiallysmartphoneshavealsobeenalotofdevelopmentanduse,andgetagoodmarketresponse,andpromotetheinnovationanddevelopmentofrelatedindustriesrelatedfields.Nowwehavetoadmitthathasenteredthemobileera,mobileapplicationdevelopmentintheascendant,wheretheapplicationontheAndroidplatformfromwhichtodevelopitsuniqueadvantagesemergedasanimportanthotresearchfield.DuetotheflexibilityandstabilityoftheAndroidsystem,moretraditionalapplicationsgraduallymigratefromthecomputertothephone.Asweallknow,thetraditionalOA(OfficeAutomationOfficeAutomation)hasmadegreatprogressandmature,suchascontacts,documentmanagement,documentprocessing,scheduling,notificationsandotherfunctionshavebeenperfectlyrealized,efficientandintelligentcombinationoftheAndroidplatformOAsystem,OAsystemwiththetraditionalfunctionsportedtosmartphones,allowinguserstocarryhandheldmobileofficeanywhere,toimproveofficeefficiencyandreduceunnecessaryconsumptionofgreatsignificanceandpracticalvalue.Inthispaper,theuseofJava-relatedtechnologies,combinedwiththecharacteristicsoftheAndroidplatformformobileOA’sactualneedsandbusinessprocessesareanalyzed,mainlytocompletethedesignofamobileOAbasedontheAndroidplatform,focusingonthedevelopmentprocessanddetailedimplementation,butalsodescribesthebasicknowledgeandkeytechnologiesinvolvedinmobileOAsystem.Keywords:Android;mobileoffice;Java;developmentmethodology;Servlet目錄1緒論 11.1研究背景和意義 11.2課題研究現(xiàn)狀 21.3研究?jī)?nèi)容與目標(biāo) 31.4本章小結(jié) 32相關(guān)知識(shí)及開(kāi)發(fā)環(huán)境搭建 42.1Android系統(tǒng)概述 4平臺(tái)簡(jiǎn)介 4系統(tǒng)架構(gòu) 4課題相關(guān)Android技術(shù)介紹 62.2tomcat及servlet簡(jiǎn)介 9與JavaWeb 9技術(shù)簡(jiǎn)介 102.3MySQL簡(jiǎn)介 112.4開(kāi)發(fā)環(huán)境搭建 12客戶端的搭建 12效勞器端的搭建 122.5本章小結(jié) 133系統(tǒng)分析與設(shè)計(jì) 143.1MVC設(shè)計(jì)模式簡(jiǎn)介 143.2可行性分析 153.3系統(tǒng)總體架構(gòu)設(shè)計(jì) 153.4系統(tǒng)功能設(shè)計(jì) 16系統(tǒng)功能模塊概述 16移動(dòng)OA客戶端設(shè)計(jì) 17移動(dòng)OA效勞器端設(shè)計(jì) 183.5數(shù)據(jù)庫(kù)相關(guān)設(shè)計(jì) 193.6本章小結(jié) 214移動(dòng)OA系統(tǒng)的具體實(shí)現(xiàn) 224.1Android運(yùn)行及開(kāi)發(fā)環(huán)境 224.2關(guān)鍵技術(shù)的實(shí)現(xiàn) 224.2.1activity與intent 22解析簡(jiǎn)介 23與效勞器交互 26文件上傳和下載 284.3本章小結(jié) 295已實(shí)現(xiàn)的功能模塊及其測(cè)試 305.1概述 305.2系統(tǒng)登錄 315.3任務(wù)審批 335.4客戶資料 355.5文件上傳及附件下載 365.6提醒通知 375.7本章小結(jié) 376總結(jié)與展望 38參考文獻(xiàn) 39翻譯局部 40外文原文 40中文譯文 52致謝 631緒論1.1研究背景和意義OA(OfficeAutomation,辦公自動(dòng)化)系統(tǒng)的一般定義:在實(shí)現(xiàn)了網(wǎng)絡(luò)互聯(lián)的前提下,利用Internet或Intranet,在工作流理念指導(dǎo)下實(shí)現(xiàn)的滿足用戶方便快捷地共享企業(yè)內(nèi)部信息需求,從而實(shí)現(xiàn)高效協(xié)同辦公的軟件系統(tǒng)。OA系統(tǒng)將先進(jìn)的管理思想、管理模式與軟件技術(shù)、網(wǎng)絡(luò)技術(shù)等信息技術(shù)相結(jié)合,為用戶提供了低本錢(qián)、高效能的絕佳管理工具。移動(dòng)通信技術(shù)和互聯(lián)網(wǎng)技術(shù)的高速開(kāi)展、用戶需求的全面深化、綜合性能要求的逐漸提高,使得辦公自動(dòng)化系統(tǒng)也在向多元化、大規(guī)模的方向開(kāi)展,而且不斷地被賦予新的定義,不僅局限于傳統(tǒng)的PC機(jī)應(yīng)用終端,辦公自動(dòng)化系統(tǒng)的概念也在不斷地更新和延伸。當(dāng)然,用戶希望更快捷和透徹地獲取企業(yè)內(nèi)部的各種信息、動(dòng)態(tài)、實(shí)時(shí)處理結(jié)果和運(yùn)營(yíng)情況,而且面對(duì)日益繁雜的業(yè)務(wù)數(shù)據(jù)和管理流程,對(duì)傳統(tǒng)的辦公自動(dòng)化更提出了嚴(yán)峻的挑戰(zhàn)。通過(guò)PC機(jī)接入網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)辦公的方式顯然已經(jīng)力不從心,不僅限定了用戶的辦公地點(diǎn)和時(shí)間,而且也造成不必要的時(shí)間和精力的損耗,毫無(wú)疑問(wèn)已難以適應(yīng)現(xiàn)代企業(yè)的開(kāi)展趨勢(shì)和辦公需求,打破這種效率瓶頸已迫在眉睫。所謂的智能〔smartphone〕,是如同PC一樣,運(yùn)行在基于獨(dú)立、開(kāi)放的操作系統(tǒng)和運(yùn)行空間之上的移動(dòng)設(shè)備,用戶可以根據(jù)需要隨心所欲地安裝使用和卸載諸如導(dǎo)航等的第三方效勞商發(fā)布的程序或開(kāi)發(fā)的軟件,并能夠由移動(dòng)通訊網(wǎng)絡(luò)來(lái)連接到無(wú)線網(wǎng)絡(luò)的這一類(lèi)。隨著科學(xué)技術(shù)和社會(huì)經(jīng)濟(jì)的開(kāi)展,當(dāng)前我國(guó)智能產(chǎn)業(yè)開(kāi)展迅猛,據(jù)中國(guó)電子信息產(chǎn)業(yè)開(kāi)展研究院預(yù)計(jì),2021至2021年是我國(guó)智能更新?lián)Q代的頂峰期,在未來(lái)一段時(shí)期內(nèi),我國(guó)智能產(chǎn)業(yè)將繼續(xù)保持高速開(kāi)展。圖1.1顯示了2021年至2021年全球智能操作系統(tǒng)市場(chǎng)份額的變化情況。圖1.1全球智能操作系統(tǒng)市場(chǎng)份額的變化情況Android系統(tǒng)是Google公司主導(dǎo),并由OHA〔OpenHandsetAlliance,開(kāi)放聯(lián)盟〕開(kāi)發(fā)的一個(gè)操作系統(tǒng),它是由Google公司于2007年11月5日公開(kāi)發(fā)布,運(yùn)行在Linux內(nèi)核之上的開(kāi)源操作系統(tǒng)。最初它主要應(yīng)用于設(shè)備,由于在設(shè)計(jì)之初就表現(xiàn)出了完全的開(kāi)放性和強(qiáng)大的可擴(kuò)展性,因此已經(jīng)成為最為流行的嵌入式系統(tǒng)設(shè)備操作系統(tǒng)之一,應(yīng)用于如上網(wǎng)本、機(jī)頂盒、全球定位設(shè)備、車(chē)載設(shè)備、電視機(jī)等之上。據(jù)有關(guān)資料顯示,時(shí)至2021年8月2日,Android已占據(jù)全球智能機(jī)市場(chǎng)48%的份額,而且在過(guò)去不久的幾年也保持著較高的市場(chǎng)占有率。由于Google在推出Android系統(tǒng)時(shí)果斷地開(kāi)放源代碼,所以世界大多數(shù)生產(chǎn)商愿意追隨Google公司而生產(chǎn)Android系統(tǒng)智能,而且Android操作系統(tǒng)在各個(gè)方面表現(xiàn)出的綜合性能也非常優(yōu)秀,使得Android成為世界上具有巨大影響力的智能操作系統(tǒng)。歸功于近年來(lái)迅速開(kāi)展的無(wú)線通信技術(shù),使得基于Android平臺(tái)的移動(dòng)終端已經(jīng)融入到了人們?nèi)粘I詈凸ぷ髦械姆椒矫婷?促使各種移動(dòng)應(yīng)用程序如雨后春筍般涌現(xiàn),這就使得將OA系統(tǒng)移植到Android智能并產(chǎn)生實(shí)際效用成為可能,將移動(dòng)辦公應(yīng)用程序安裝到Android智能上,將使OA脫離PC的束縛,這意味著用戶不必在固定的辦公地點(diǎn)和專(zhuān)門(mén)的PC設(shè)備上進(jìn)行辦公,用戶可以在任何地點(diǎn)、任何時(shí)間實(shí)現(xiàn)辦理公務(wù)的設(shè)想,這不僅對(duì)于處置企業(yè)內(nèi)發(fā)生的突發(fā)性事件具有重要影響和積極意義,而且在降低企業(yè)辦公消費(fèi)支出的同時(shí)大幅度提高了企業(yè)的辦公效率,從而使企業(yè)的信息化水平有質(zhì)的飛躍,由此增強(qiáng)了綜合競(jìng)爭(zhēng)力。本文討論了在Android智能終端上實(shí)現(xiàn)移動(dòng)OA系統(tǒng)的過(guò)程及所涉及的技術(shù),在基于Android開(kāi)發(fā)環(huán)境的根底上,運(yùn)用軟件開(kāi)發(fā)的相關(guān)方法,借助于面向?qū)ο蟮乃枷胧褂肑ava程序設(shè)計(jì)語(yǔ)言設(shè)計(jì)和實(shí)現(xiàn)一個(gè)簡(jiǎn)易的移動(dòng)OA系統(tǒng),詳細(xì)闡述了所實(shí)現(xiàn)的移動(dòng)OA的設(shè)計(jì)和開(kāi)發(fā)過(guò)程,對(duì)于進(jìn)一步研究和完善移動(dòng)OA具有一定參考價(jià)值。1.2課題研究現(xiàn)狀移動(dòng)OA的出現(xiàn)并不是偶然的,而是社會(huì)文明和科學(xué)技術(shù)開(kāi)展到一定階段的產(chǎn)物,是組織管理工作在移動(dòng)時(shí)代充分利用信息化技術(shù)而實(shí)現(xiàn)自動(dòng)化辦公以減少人在辦公過(guò)程中的不必要?jiǎng)趧?dòng)。是利用移動(dòng)通信技術(shù)延伸傳統(tǒng)的基于PC的OA的使用平臺(tái),是為了滿足企業(yè)內(nèi)部人員隨時(shí)保持靈通的信息交流而應(yīng)運(yùn)而生的。進(jìn)入3G移動(dòng)時(shí)代,移動(dòng)辦公有了新的含義和延伸。新一代的移動(dòng)OA,以專(zhuān)網(wǎng)和無(wú)線通訊網(wǎng)絡(luò)為依托,綜合運(yùn)用如3G移動(dòng)技術(shù)、Webservice等多種技術(shù)手段,涉及移動(dòng)通訊、信息處理和計(jì)算機(jī)網(wǎng)絡(luò)等領(lǐng)域的前沿科技,從而該系統(tǒng)在平安性和交互能力方面的表現(xiàn)有了質(zhì)的飛躍,可以為用戶提供一種平安完整、方便快捷的現(xiàn)代化移動(dòng)辦公機(jī)制。就國(guó)內(nèi)而言,得益于企業(yè)對(duì)信息化的持續(xù)重視,有很多企業(yè)已經(jīng)部署了移動(dòng)OA系統(tǒng)。但總體來(lái)說(shuō),辦公自動(dòng)化最終實(shí)現(xiàn)效果大都達(dá)不到預(yù)期設(shè)想,根據(jù)我國(guó)當(dāng)前移動(dòng)OA實(shí)施和開(kāi)展的實(shí)際效果和程度大致可以概括為以下三種情況:〔1〕擁有自己的Intranet網(wǎng)絡(luò),但沒(méi)有使用相應(yīng)的OA應(yīng)用系統(tǒng)開(kāi)展協(xié)同性質(zhì)的工作,企業(yè)網(wǎng)絡(luò)在大局部時(shí)間中處在閑置狀態(tài),實(shí)質(zhì)上仍然是個(gè)人辦公,企業(yè)的投入根本上沒(méi)有產(chǎn)生效益。〔2〕擁有自己的Intranet網(wǎng)絡(luò),并且使用了應(yīng)用系統(tǒng),內(nèi)部人員可以通過(guò)應(yīng)用系統(tǒng)在企業(yè)內(nèi)部進(jìn)行交流信息,可以實(shí)現(xiàn)有限的協(xié)同工作,但是由于應(yīng)用系統(tǒng)和企業(yè)的業(yè)務(wù)流程結(jié)合得不夠緊密,產(chǎn)生的效益不明顯。〔3〕擁有自己的Intranet網(wǎng)絡(luò),使用專(zhuān)門(mén)為企業(yè)業(yè)務(wù)流程定制的辦公自動(dòng)化系統(tǒng),而且能較好地支持企業(yè)日常信息的共享和協(xié)同工作,在順暢地獲取外部信息的同時(shí)還可以通過(guò)Internet對(duì)外發(fā)布企業(yè)的信息,系統(tǒng)投入使用后產(chǎn)生了一定的效益[1]。上述三種情況中,移動(dòng)辦公系統(tǒng)功能的實(shí)現(xiàn)、用戶推廣的程度均不夠,而且智能在其中實(shí)現(xiàn)的功能和扮演的角色都比擬單一,導(dǎo)致OA系統(tǒng)不能發(fā)揮應(yīng)有的積極作用,而且還存在著諸多缺陷和問(wèn)題,還在一定程度上增加了企業(yè)日常運(yùn)營(yíng)本錢(qián)[13]。隨著不斷推陳出新的通訊技術(shù)日趨全面和成熟,在科技開(kāi)展和市場(chǎng)需求這兩大動(dòng)力不斷地推動(dòng)下,該領(lǐng)域中的技術(shù)研究組織和軟件開(kāi)發(fā)公司肯定會(huì)加快研發(fā)的腳步,并以盡可能快的速度完善和改良移動(dòng)OA,早日設(shè)計(jì)出更完美的移動(dòng)OA并付諸實(shí)用[12]。1.3研究?jī)?nèi)容與目標(biāo)本文的目標(biāo)是采用面向?qū)ο蟮乃枷耄贏ndroid平臺(tái)以及OA相關(guān)技術(shù),綜合運(yùn)用效勞器及數(shù)據(jù)庫(kù)知識(shí),探討、研究實(shí)現(xiàn)一個(gè)靈活高效并易于進(jìn)行功能性和結(jié)構(gòu)性擴(kuò)展的移動(dòng)OA系統(tǒng),主要工作內(nèi)容集中在該移動(dòng)OA的客戶端和效勞器端的開(kāi)發(fā)方法和流程,主要工作內(nèi)容如下:簡(jiǎn)單說(shuō)明實(shí)現(xiàn)移動(dòng)OA過(guò)程中運(yùn)用到的Android知識(shí),簡(jiǎn)要介紹Android系統(tǒng)的總體框架,探討在開(kāi)發(fā)移動(dòng)辦公系統(tǒng)的過(guò)程中涉及的其他有關(guān)技術(shù)。通過(guò)對(duì)Android系統(tǒng)根底知識(shí)的了解和對(duì)Android軟件開(kāi)發(fā)的理解,探索在windows系統(tǒng)環(huán)境下搭建移動(dòng)OA開(kāi)發(fā)的客戶端及效勞器端環(huán)境,最后,論述了設(shè)計(jì)和實(shí)現(xiàn)移動(dòng)OA系統(tǒng)的關(guān)鍵技術(shù)和使用的工具。以傳統(tǒng)OA為參照,對(duì)移動(dòng)OA系統(tǒng)進(jìn)行分析和設(shè)計(jì),由此設(shè)計(jì)出一個(gè)簡(jiǎn)單的移動(dòng)OA設(shè)計(jì)方案,借助于Android系統(tǒng)的優(yōu)異性能,實(shí)現(xiàn)一個(gè)簡(jiǎn)易的基于Android移動(dòng)平臺(tái)的OA系統(tǒng)。根據(jù)實(shí)際需求,分別實(shí)現(xiàn)各功能模塊,通過(guò)在模擬器上進(jìn)行測(cè)試來(lái)驗(yàn)證相關(guān)模塊的正確性和合理性。最終綜合測(cè)試系統(tǒng)確定是否實(shí)現(xiàn)預(yù)期要求。1.4本章小結(jié)本章主要分析了完成課題的實(shí)際背景和意義,論述了課題的研究及開(kāi)展現(xiàn)狀,簡(jiǎn)要討論了移動(dòng)OA系統(tǒng)的特點(diǎn),最后明確該移動(dòng)OA系統(tǒng)的主要內(nèi)容和最終目標(biāo)。2相關(guān)知識(shí)及開(kāi)發(fā)環(huán)境搭建2.1Android系統(tǒng)概述2.1.1Android平臺(tái)簡(jiǎn)介Android一詞本義指“人形機(jī)器人〞,是Google公司發(fā)布的基于Linux內(nèi)核且開(kāi)放源碼的移動(dòng)設(shè)備操作系統(tǒng),與諸如Symbian、iOS等在市場(chǎng)上或生存已久或具有巨大影響力的其他操作系統(tǒng)一樣,已經(jīng)得到了大量的用戶支持。我們通常所說(shuō)的Android平臺(tái)由Android操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,被認(rèn)為是首個(gè)真正兼具開(kāi)放性和完整性,且為移動(dòng)終端量身定制、具備諸多其它平臺(tái)難以企及的優(yōu)點(diǎn)的系統(tǒng)應(yīng)用軟件。運(yùn)行于Android平臺(tái)之上的應(yīng)用程序通過(guò)Java程序設(shè)計(jì)語(yǔ)言來(lái)進(jìn)行開(kāi)發(fā),這使得從接口到功能,都可以進(jìn)行無(wú)窮無(wú)盡的改變,Java語(yǔ)言適合進(jìn)行網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā)的特性與生俱來(lái),它不僅是很優(yōu)秀的編程語(yǔ)言,而且具有廣泛的應(yīng)用根底和開(kāi)發(fā)團(tuán)隊(duì),這非常有利于Android的開(kāi)展和Android用戶群的壯大[2]。Google公司積極開(kāi)展與軟、硬件開(kāi)發(fā)商、相關(guān)設(shè)備生產(chǎn)廠商及電信運(yùn)營(yíng)商、其它利益相關(guān)行業(yè)或組織的深層次合作關(guān)系,企圖通過(guò)這種方式建立一個(gè)具備開(kāi)放性和具有統(tǒng)一標(biāo)準(zhǔn)的智能軟件平臺(tái),從而能在移動(dòng)行業(yè)內(nèi)形成開(kāi)放的系統(tǒng)產(chǎn)業(yè)鏈。2.1.2Android系統(tǒng)架構(gòu)圖2.1所表示的為Android系統(tǒng)框架結(jié)構(gòu)的組成。圖2.1Android系統(tǒng)架構(gòu)圖從圖2.1上可以看出,Android系統(tǒng)體系架構(gòu)分為四層,分別是內(nèi)核層〔LinuxKernel〕、系統(tǒng)運(yùn)行庫(kù)層〔Libraries〕、應(yīng)用框架層〔ApplicationFramework〕、應(yīng)用層〔Application〕。下面分別作簡(jiǎn)要介紹:〔1〕內(nèi)核層〔LinuxKernel〕Android平臺(tái)的系統(tǒng)內(nèi)核是基于增強(qiáng)版本的內(nèi)核Linux2.6來(lái)提供核心系統(tǒng)效勞,主要有:平安、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議堆棧、硬件驅(qū)動(dòng)等。Linux內(nèi)核作為連接硬件和軟件的抽象層,搭建起了軟件與硬件之間的橋梁,使得軟件開(kāi)發(fā)者不必分散注意力在內(nèi)核的具體底層實(shí)現(xiàn)工作上,可以全神貫注地投入到上層軟件的開(kāi)發(fā)之中。而底層的如驅(qū)動(dòng)的編寫(xiě)和更新的工作那么由Google公司或是生產(chǎn)商來(lái)完成,除了支持Linux內(nèi)核本身所支持的一些設(shè)備驅(qū)動(dòng)外,它還提供了用于支持Android平臺(tái)的諸如AndroidBinder的設(shè)備驅(qū)動(dòng)。〔2〕Android運(yùn)行時(shí)環(huán)境〔AndroidRuntime〕Android應(yīng)用程序使用Java程序設(shè)計(jì)語(yǔ)言來(lái)開(kāi)發(fā),但編譯和執(zhí)行卻不是用原有的J2ME來(lái)實(shí)現(xiàn),只因Android自身帶有AndroidRuntime。AndroidRuntime由CoreLibraries〔即核心庫(kù)〕和DalvikVirtualMachine兩個(gè)核心庫(kù)組成。其中前者實(shí)現(xiàn)了Java編程語(yǔ)言核心庫(kù)的大局部功能,而后者那么是Android相對(duì)于Java虛擬機(jī)〔JVM〕而實(shí)現(xiàn)的虛擬機(jī),與JVM所屬的堆棧結(jié)構(gòu)機(jī)器〔stackmachine〕不同,Dalvik屬于存放器結(jié)構(gòu)機(jī)器〔registermachine〕,依賴(lài)于Linux內(nèi)核的一些功能,它具有在當(dāng)下主流硬件架構(gòu)下,易于與系統(tǒng)優(yōu)化與整合且所需的資源相對(duì)較少。Dalvik虛擬機(jī)不能直接執(zhí)行Java類(lèi),執(zhí)行的中間代碼是通過(guò)轉(zhuǎn)換工具將Java字節(jié)碼轉(zhuǎn)換為特有的dex〔DalvikExecutable〕格式〔dx是一套工具,可以將Java.class轉(zhuǎn)換成dex格式,一個(gè)dex文件通常會(huì)有多個(gè).class〕。在同一個(gè)Android設(shè)備上可以同時(shí)運(yùn)行多個(gè)應(yīng)用程序,即虛擬機(jī)?!玻场澈瘮?shù)庫(kù)層〔Libraries〕Android包含了一些根底的C/C++庫(kù),它們可被Android系統(tǒng)的不同的組件使用。它們通過(guò)Android的應(yīng)用程序框架〔applicationframework〕來(lái)提供相關(guān)效勞。此外,Android還提供一個(gè)硬件抽象層〔AndroidHardwareAbstractionLayer,AndroidHAL〕用于保護(hù)硬件提供商對(duì)其驅(qū)動(dòng)程序的所有權(quán)?!玻础硲?yīng)用程序框架層〔ApplicationFramework〕應(yīng)用程序框架層是Android在編寫(xiě)隨系統(tǒng)一起發(fā)布的核心應(yīng)用時(shí)所使用的API框架,這個(gè)框架提供開(kāi)放的開(kāi)發(fā)平臺(tái)供開(kāi)發(fā)人員訪問(wèn),因此開(kāi)發(fā)人員同樣可以在遵循框架的開(kāi)發(fā)原那么的前提下使用這些框架來(lái)開(kāi)發(fā)自己的應(yīng)用程序,以此簡(jiǎn)化應(yīng)用程序開(kāi)發(fā)的架構(gòu)設(shè)計(jì)。借助于Android提供的這個(gè)開(kāi)放的開(kāi)發(fā)平臺(tái),開(kāi)發(fā)人員能根據(jù)需要開(kāi)發(fā)出標(biāo)新立異的應(yīng)用程序,支撐應(yīng)用程序正常運(yùn)行的是一系列的效勞和系統(tǒng),具體包括如下幾種:ViewSystem〔視圖系統(tǒng)〕——提供了豐富且可擴(kuò)展的視圖組件,它們可以用于構(gòu)建應(yīng)用程序的視圖,包括列表〔lists〕、網(wǎng)格〔grids〕、文本框〔textboxes〕、按鈕(buttons),甚至是嵌入式的web瀏覽器〔webview〕。ContentProviders〔內(nèi)容提供者〕——該效勞能訪問(wèn)由其它應(yīng)用程序所維護(hù)的數(shù)據(jù),或向其他應(yīng)用程序共享自己的數(shù)據(jù)資源。ResourceManager〔資源管理器〕——提供給用程序?qū)Ψ谴a資源訪問(wèn)。NotificationManager〔通知管理器〕——使應(yīng)用程序可以在系統(tǒng)狀態(tài)欄中顯示提示信息。ActivityManager〔活動(dòng)管理器〕——用于管理應(yīng)用程序生命周期,提供通用的導(dǎo)航回退功能。〔5〕應(yīng)用程序?qū)印睞pplications〕這一層通常是指伴隨Android平臺(tái)一起發(fā)布的一系列核心應(yīng)用程序,包括常用的智能必備的一些應(yīng)用程序,而所有的這些應(yīng)用程序都是由Java程序設(shè)計(jì)語(yǔ)言實(shí)現(xiàn)的。2.1.3課題相關(guān)Android技術(shù)介紹在Android應(yīng)用開(kāi)發(fā)中,Activity〔活動(dòng)〕是所有程序中最常用的模塊之一,Android應(yīng)用程序的跳轉(zhuǎn)都是通過(guò)Activity來(lái)實(shí)現(xiàn)的,應(yīng)用程序中的每一個(gè)Activity都具有自己的生命周期,交由系統(tǒng)來(lái)實(shí)現(xiàn)統(tǒng)一管理,一般來(lái)說(shuō)應(yīng)用程序是無(wú)法改變Activity的生命周期的,只可以通過(guò)onSaveInstanceState來(lái)保存其當(dāng)前的狀態(tài)[14]。Android的Activity生命周期如圖2.2所示。圖2.2Android活動(dòng)的生命周期圖Activity是Android應(yīng)用程序生命周期中最重要的局部之一。在系統(tǒng)中的所有Activity都由一個(gè)執(zhí)行當(dāng)前任務(wù)的Activity堆棧來(lái)進(jìn)行統(tǒng)一管理。如果一個(gè)Activity處于啟動(dòng)狀態(tài),那么它將被置于堆棧頂,從暫?;蛲V?fàn)顟B(tài)轉(zhuǎn)化為運(yùn)行狀態(tài),而之前運(yùn)行的Activity那么失去焦點(diǎn),被保存在堆棧中,不再處于前臺(tái)運(yùn)行狀態(tài),直到新置于棧頂?shù)腁ctivity退出才有可能恢復(fù)前臺(tái)運(yùn)行狀態(tài)。Activity有四種本質(zhì)區(qū)別的狀態(tài):〔1〕當(dāng)其在前臺(tái)運(yùn)行〔即其在Activity當(dāng)前任務(wù)的堆棧頂〕,即為活動(dòng)〔running〕狀態(tài)〔或運(yùn)行狀態(tài)〕。〔2〕當(dāng)Activity已失去焦點(diǎn)但是對(duì)用戶依然可見(jiàn)時(shí)即為暫?!睵aused〕狀態(tài)。此時(shí)該Activity依然保持活力,只是在堆棧中其他的Activity保存在該Activity之上,一個(gè)暫停的Activity仍然是處于活動(dòng)狀態(tài)的,在系統(tǒng)內(nèi)存極端低下時(shí)被強(qiáng)制殺死?!玻场钞?dāng)一個(gè)Activity被另一個(gè)Activity所完全覆蓋時(shí),它的狀態(tài)即為停止?fàn)顟B(tài)〔Stopped〕,可是系統(tǒng)仍然會(huì)保存著它運(yùn)行時(shí)的相關(guān)信息,但由于窗口被隱藏,用戶已不可見(jiàn),當(dāng)系統(tǒng)內(nèi)存極端低下的時(shí)候,處于停止?fàn)顟B(tài)的Activity將會(huì)被殺死?!玻础钞?dāng)Activity處于暫停狀態(tài)或者停止?fàn)顟B(tài)時(shí),系統(tǒng)可能會(huì)在必要時(shí)從系統(tǒng)內(nèi)存中將該Activity去除,系統(tǒng)可能采用兩種方式之一來(lái)對(duì)該Activity進(jìn)行終止,可能會(huì)使該Activity結(jié)束,或者直接殺死它的進(jìn)程。如果需要將其再次恢復(fù)并顯示出來(lái),系統(tǒng)會(huì)重新運(yùn)行并加載之前終止它時(shí)所保存的狀態(tài)信息。在圖2.2中,Activity有三個(gè)關(guān)鍵的循環(huán):
〔1〕Activity的完整生命周期,從onCreate(Bundle)方法第一次調(diào)用開(kāi)始到onDestroy()方法被調(diào)用結(jié)束。Activity在onCreate()方法中設(shè)置初始化所有的“全局〞狀態(tài),在onDestory()方法中釋放所有的資源。例如:Activity可以在onCreate()方法中創(chuàng)立運(yùn)行于后臺(tái)的線程而效勞于Activity,而在onDestory()方法中停止該線程[21]?!玻病矨ctivity的可見(jiàn)生命周期,從onStart()方法被調(diào)用開(kāi)始到onStop()方法被調(diào)用時(shí)結(jié)束。在此期間,Activity對(duì)用戶來(lái)說(shuō)始終是可見(jiàn)的,但它可能未處于當(dāng)前任務(wù)的堆棧頂〔即不可交互〕。在這個(gè)周期中可以通過(guò)前述兩個(gè)接口來(lái)獲取UI數(shù)據(jù)和資源等并顯示給用戶,Activity隨時(shí)可能會(huì)在可見(jiàn)狀態(tài)和隱藏狀態(tài)之間進(jìn)行轉(zhuǎn)換,所以onStart()方法和onStop()方法都可能被任意屢次的調(diào)用執(zhí)行?!玻场矨ctivity的前臺(tái)生命周期,從onResume()方法被調(diào)用時(shí)開(kāi)始到onPause()方法被調(diào)用時(shí)結(jié)束。對(duì)于一個(gè)Activity來(lái)說(shuō),它可以頻繁的調(diào)用onResume()方法和onPause()方法從而實(shí)現(xiàn)在resumed狀態(tài)和paused狀態(tài)之間實(shí)現(xiàn)切換,在此周期中該Activity始終處于當(dāng)前任務(wù)堆棧中的頂端并可以與用戶進(jìn)行交互。例如:當(dāng)Android設(shè)備進(jìn)入休眠狀態(tài)或是當(dāng)前Activity調(diào)用了新的Activity,而且實(shí)現(xiàn)這些接口方法的都是屬于十分輕量級(jí)的代碼。
Activity的生命周期涉及下面列出的接口方法,開(kāi)發(fā)者可以根據(jù)實(shí)際來(lái)重寫(xiě)這些方法,從而在Activity生命周期的適當(dāng)階段對(duì)其進(jìn)行需要的管理和操作。例如,通常Activity通過(guò)重載onCreate()方法去進(jìn)行初始化操作設(shè)置,通過(guò)重寫(xiě)onPause()實(shí)現(xiàn)Activity狀態(tài)的保存、提交更改正的數(shù)據(jù)和設(shè)置,很多時(shí)候Activity也可能需要通過(guò)重寫(xiě)onFreeze()接口方法恢復(fù)在onCreate(Bundle)里面保存的狀態(tài)和數(shù)據(jù)。Android中通過(guò)使用Intent〔意圖〕組件配合IntentFilter〔意圖過(guò)濾器〕來(lái)實(shí)現(xiàn)協(xié)助應(yīng)用程序或各組件〔Activity、Service和BroadcastReceiver〕之間的交互或通信,Intent是對(duì)一個(gè)Android即將要執(zhí)行的Action及其涉及的相關(guān)數(shù)據(jù)的抽象性描述,通常將其作為參數(shù)來(lái)使用[15]。一般來(lái)說(shuō),Intent包含Action和Data兩個(gè)最根本的數(shù)據(jù),前者用來(lái)指明要實(shí)施什么動(dòng)作,后者一般是由一個(gè)URI確定的具體數(shù)據(jù)。除了包括Action和Data兩個(gè)最根本的數(shù)據(jù)元素外,Intent還包括Category(類(lèi)別,指定將要執(zhí)行的action的其他一些額外的信息)、Type〔類(lèi)別,顯式指定Intent的數(shù)據(jù)類(lèi)型〕、Component〔組件,指定Intent的目標(biāo)組件〕、Extras〔附加信息,其他所有附加信息的集合〕元素。Intent在應(yīng)用程序或是各組件之間起著媒介作用,很好地完成了調(diào)用者與被調(diào)用者之間的松耦合的工作。至于Intent屬性的設(shè)置,可以在相關(guān)XML文件中定義,也可以通過(guò)調(diào)用Intent類(lèi)的相關(guān)方法來(lái)設(shè)置和獲取,通常包括以下幾個(gè)方面:〔1〕Action,也就是要執(zhí)行的動(dòng)作。SDK中定義了一些常用的如ACTION_MAIN、ACTION_CALL等的一系列標(biāo)準(zhǔn)的動(dòng)作供開(kāi)發(fā)者直接使用。當(dāng)然,我們可以通過(guò)自定義動(dòng)作〔注:需要加上包名作為前綴來(lái)使用自定義的動(dòng)作〕,并可根據(jù)應(yīng)用需要編寫(xiě)相應(yīng)的Activity來(lái)響應(yīng)自定義動(dòng)作?!玻病矰ata,一個(gè)URI確定的要操作的具體數(shù)據(jù)?!玻场砊ype〔數(shù)據(jù)類(lèi)型〕,用于強(qiáng)制顯式指定Intent的數(shù)據(jù)類(lèi)型〔MIME〕而不必根據(jù)數(shù)據(jù)來(lái)判定類(lèi)型。〔4〕Category〔類(lèi)別〕,用于指定將要執(zhí)行的Action的其他一些額外的附加信息。例如:假設(shè)類(lèi)別指定為L(zhǎng)AUNCHER_CATEGORY那么表示Intent的接收者應(yīng)該在Launcher中作為頂級(jí)應(yīng)用出現(xiàn)。
〔5〕component〔組件〕,指定Intent的目標(biāo)組件的類(lèi)名稱(chēng)。通常Android會(huì)根據(jù)Intent中包含的其它如action、data/type等屬性的信息來(lái)查找匹配的目標(biāo)組件。如果指定了component屬性,Intent將不再查找數(shù)據(jù)直接使用指定的組件同時(shí)所有其他屬性都將成為可選?!玻丁砮xtras〔附加信息〕,是其它所有附加信息的集合。通常Android使用extras屬性來(lái)為component屬性提供擴(kuò)展信息。Intent按表現(xiàn)形式可以分為兩大類(lèi):顯式的Intent〔ExplicitIntent〕和隱式的Intent〔IntentFilter〕,顯式的Intent在構(gòu)造時(shí)就指定接收者,主要用于應(yīng)用程序內(nèi)部組件之間傳遞消息;隱式的Intent,Intent的發(fā)送者在構(gòu)造時(shí)并不需要指定目標(biāo)組件,因此用于多個(gè)應(yīng)用程序之間的交互,但隱式的Intent需要對(duì)動(dòng)作〔action〕、數(shù)據(jù)〔data〕、以及類(lèi)別〔Type〕三要素進(jìn)行匹配。隱式的Intent實(shí)現(xiàn)了請(qǐng)求和響應(yīng)之間的松耦合。顯式的Intent由于目標(biāo)組件已經(jīng)指定,所以Android系統(tǒng)不需要再對(duì)它進(jìn)行解析。Android系統(tǒng)通過(guò)解析隱式的Intent并將其映射給可以處理這個(gè)Intent的Activity、IntentReceiver或Service對(duì)象進(jìn)行相應(yīng)處理和響應(yīng)[3]。下面再簡(jiǎn)要介紹一下AndroidView的體系結(jié)構(gòu)。應(yīng)用程序的用戶界面屬于用戶接口〔UI,UserInterface〕的一種,Android的用戶界面是由一系列的視圖〔View〕和視圖群組〔ViewGroup〕對(duì)象所組合而成的。在Android中的View和ViewGroup對(duì)象都屬于andriod.view包且繼承自View基類(lèi),而View和ViewGroup又衍生了很多的子類(lèi)。作為像按鈕之類(lèi)的與用戶交互的widgets小部件的父類(lèi),View對(duì)象是Android平臺(tái)用戶界面的根本對(duì)象。作為提供各種布局結(jié)構(gòu)的layouts的父類(lèi),ViewGroup具有多種布局方式且可以嵌套。view對(duì)象可視為一種數(shù)據(jù)結(jié)構(gòu),可用來(lái)存儲(chǔ)布局參數(shù)和界面特定矩形區(qū)域的顯示內(nèi)容。View對(duì)象可以用來(lái)處理它所處區(qū)域的布局、測(cè)量、繪制、焦點(diǎn)改變、滾動(dòng)和按鍵手勢(shì)等交互事件。一個(gè)view對(duì)象也可以作為用戶與系統(tǒng)的交互工具并接收交互事件[16][17]。Android平臺(tái)通過(guò)用View或ViewGroup對(duì)象來(lái)實(shí)現(xiàn)一個(gè)Android用戶界面,如圖2.3所示的層次結(jié)構(gòu)樹(shù)可以根據(jù)實(shí)際需求改變其結(jié)構(gòu)使其更簡(jiǎn)單或者更復(fù)雜。可以直接使用Android系統(tǒng)現(xiàn)成的用戶界面控件或者不同經(jīng)典布局,也可以自己定義。Activity調(diào)用setContentView〔Viewview〕方法并且傳遞一個(gè)根節(jié)點(diǎn)對(duì)象的引用來(lái)讓view層次結(jié)構(gòu)實(shí)現(xiàn)的用戶界面在屏幕上合理顯示。Android系統(tǒng)解析用戶界面的配置信息,根據(jù)它們來(lái)進(jìn)行測(cè)量繪制這個(gè)樹(shù)形的視圖結(jié)構(gòu)。視圖結(jié)構(gòu)的根節(jié)點(diǎn)要求其子節(jié)點(diǎn)進(jìn)行自我繪制,而子節(jié)點(diǎn)會(huì)在父節(jié)點(diǎn)那里請(qǐng)求尺寸和位置,但最終還是由父節(jié)點(diǎn)決定子節(jié)點(diǎn)大小。Android按順序解析布局文件上的所有元素,從根元素開(kāi)始,實(shí)例化view對(duì)象并且把他們繪制在實(shí)例化的父節(jié)點(diǎn)對(duì)象上。由于它們都是按順序被繪制的,如果某些view子對(duì)象超出父節(jié)點(diǎn)對(duì)象定義的范圍,那么后來(lái)繪制的view對(duì)象將會(huì)覆蓋原來(lái)的view對(duì)象而顯示[18]。圖2.3viwe和viewgroup的樹(shù)狀層次圖2.2tomcat及servlet簡(jiǎn)介2.1.1tomcat與JavaWebTomcat是在Sun公司的JSWDK〔JavaServerWebDevelopmentKit,是Sun公司推出的小型Servlet/Jsp調(diào)試工具〕根底上開(kāi)展起來(lái)的一個(gè)完全用Java語(yǔ)言編寫(xiě),免費(fèi)而且開(kāi)放源代碼的Web應(yīng)用效勞器軟件。因?yàn)門(mén)omcat具有技術(shù)先進(jìn)、運(yùn)行可靠、性能穩(wěn)定、完全免費(fèi)等諸多優(yōu)秀特性,而且由于得到了廣闊的開(kāi)放源代碼志愿者的大力支持,它可以和目前大局部的主流web效勞器〔如IIS和Apache效勞器〕一起工作,Tomcat已經(jīng)深受Java應(yīng)用開(kāi)發(fā)者和喜愛(ài)者的推崇并已經(jīng)被許多軟件開(kāi)發(fā)廠商應(yīng)用于許多軟件開(kāi)發(fā)中并獲得了廣泛的關(guān)注。由于tomcat屬于輕量級(jí)應(yīng)用效勞器,所以大多應(yīng)用于開(kāi)發(fā)中小型系統(tǒng)和并發(fā)訪問(wèn)用戶數(shù)量有限的企業(yè)JavaWeb應(yīng)用情形中。Tomcat除了能夠充當(dāng)運(yùn)行Servlet的優(yōu)秀容器外,還提供了作為web效勞器的一些使用功能,如Tomcat管理和控制平臺(tái)、平安域管理等。Java中有三種“官方〞技術(shù)可以用來(lái)開(kāi)發(fā)web應(yīng)用程序:Servlet、JavaServerPages〔JSP〕和JavaServerFaces〔JSF〕,其中Servlet是核心技術(shù),JSP和JSF都是以它為根底的。在Servlet之后出現(xiàn)JSP,并沒(méi)有淘汰Servlet,而是在現(xiàn)代Javaweb應(yīng)用程序中共用。圖2.4表示Tomcat與Servlet工作流程。
(1)客戶發(fā)出訪問(wèn)特定Servlet的請(qǐng)求;(2)Servlet容器接收并解析接收到的客戶請(qǐng)求;(3)Servlet容器創(chuàng)立一個(gè)ServletRequest對(duì)象,將客戶請(qǐng)求及其他關(guān)于客戶的信息封裝到其中;(4)Servlet容器創(chuàng)立一個(gè)ServletResponse對(duì)象;(5)Servlet容器調(diào)用客戶請(qǐng)求的Servlet對(duì)象的service〔〕方法,并且把ServletRequest對(duì)象與ServletResponse對(duì)象作為參數(shù)傳給
service〔〕方法;(6)Servlet從ServletRequest對(duì)象獲取客戶請(qǐng)求信息;(7)Servlet利用ServletResponse對(duì)象來(lái)生成響應(yīng)結(jié)果;(8)Servlet容器把Servlet生成的響應(yīng)結(jié)果發(fā)送給客戶。圖2.4Tomcat與Servlet工作時(shí)序圖JavaWeb應(yīng)用程序運(yùn)行在Servlet容器之中,Servlet容器可以動(dòng)態(tài)地調(diào)用JavaWeb應(yīng)用中的所有Servlet組件。而且由SUN公司的Servlet標(biāo)準(zhǔn)對(duì)JavaWeb應(yīng)用的定義可以看出,JavaWeb應(yīng)用不僅可以在Tomcat中運(yùn)行,還可以在其他符合Servlet標(biāo)準(zhǔn)的Servlet容器中運(yùn)行,JavaWeb應(yīng)用中可以包含Servlet組件、JSP組件、相關(guān)的Java類(lèi)、靜態(tài)文檔、客戶端類(lèi)Web.xml文件等內(nèi)容。2.1.2servlet技術(shù)簡(jiǎn)介Servlet根本上就是一個(gè)Java程序,是一種運(yùn)行在支持Java語(yǔ)言的效勞器上并擴(kuò)展JavaWeb效勞器功能的程序組件。一個(gè)Servlet應(yīng)用程序由一個(gè)或多個(gè)Servlet組成。Servlet應(yīng)用程序是在Servlet容器中運(yùn)行的,它不能在自己里面運(yùn)行。Servlet容器也叫Servlet引擎,它可以將用戶的請(qǐng)求傳遞給Servlet應(yīng)用程序,并將Servlet應(yīng)用程序的響應(yīng)傳回給用戶。Servlet技術(shù)的核心是Servlet接口,所有的Servlet實(shí)例都必須直接或間接實(shí)現(xiàn)這個(gè)接口。這個(gè)接口定義了Servlet和Servlet容器之間的一個(gè)契約。每個(gè)Servlet類(lèi)型只有一個(gè)實(shí)例,它由Servlet的所有請(qǐng)求共享。在Servlet接口中定義了5個(gè)方法,其中3個(gè)方法都由Servlet容器來(lái)調(diào)用,容器會(huì)在Servlet的生命周期的不同階段調(diào)用特定的方法:Init〔ServletConfigconfig〕方法:負(fù)責(zé)初始化Servlet對(duì)象。容器在創(chuàng)立好Servlet對(duì)象后,就會(huì)調(diào)用該方法;Service〔ServletRequestreq,ServletResponseres〕方法:負(fù)責(zé)響應(yīng)客戶的請(qǐng)求,為客戶端提供相應(yīng)效勞。當(dāng)容器接收到客戶端要求訪問(wèn)特定Servlet對(duì)象的請(qǐng)求時(shí),就會(huì)調(diào)用此方法傳遞ServletRequest對(duì)象和ServletResponse對(duì)象;Destroy〔〕方法:當(dāng)Servlet對(duì)象結(jié)束生命周期時(shí),負(fù)責(zé)釋放Servlet對(duì)象占用的資源。圖2.5Servlet接口及其實(shí)現(xiàn)類(lèi)的類(lèi)框圖Servlet接口還定義了以下兩個(gè)返回Servlet的相關(guān)信息的方法。JavaWeb應(yīng)用中的程序代碼可以訪問(wèn)這兩個(gè)方法來(lái)獲得Servlet的配置信息及其他相關(guān)信息[4]。getServletConfig〔〕:返回一個(gè)ServletConfig對(duì)象,在該對(duì)象中包含了Servlet的初始化參數(shù)信息;getServletInfo〔〕:返回一個(gè)包含Servlet創(chuàng)立者、版本和版權(quán)等信息的字符串。2.3MySQL簡(jiǎn)介MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典MySQL
AB公司開(kāi)發(fā),后被Oracle公司接管。在Web應(yīng)用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem:關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng))應(yīng)用軟件之一,MySQL效勞器既可以作為前臺(tái)效勞程序運(yùn)行,也可以作為后臺(tái)效勞程序運(yùn)行。它將紛繁復(fù)雜的數(shù)據(jù)分門(mén)別類(lèi)地保存在不同的數(shù)據(jù)表中,而不是把全部的數(shù)據(jù)完全在混亂的保存一起,故此增加了數(shù)據(jù)操作的速度并提高了應(yīng)用的靈活性。MySQL是一個(gè)多用戶、多線程的強(qiáng)壯的關(guān)系型數(shù)據(jù)庫(kù)效勞器,它使用最常用且標(biāo)準(zhǔn)化的SQL語(yǔ)言來(lái)訪問(wèn)數(shù)據(jù)庫(kù),而且由于其具有體積小、速度快、總體擁有本錢(qián)低,開(kāi)放源碼等優(yōu)點(diǎn),所以成為具有廣闊用戶支持和追隨,適用于開(kāi)發(fā)中小型系統(tǒng)的優(yōu)秀數(shù)據(jù)庫(kù)軟件。2.4開(kāi)發(fā)環(huán)境搭建2.4.1客戶端的搭建從官網(wǎng):://java.sun/javase/downloads/index.jsp下載JDK1.7,從下載:///downloads下載適宜版本的Eclipse。JDK(JavaDevelopmentKit)是整個(gè)Java開(kāi)發(fā)中的核心,它包括了Java運(yùn)行環(huán)境,Java工具和Java根底的類(lèi)庫(kù),所以首先必須安裝JDK,點(diǎn)擊JDK安裝程序之后,需要配置系統(tǒng)環(huán)境變量。
(1)右鍵"我的電腦",依次選擇"屬性"—>"高級(jí)"—>"環(huán)境變量";(2)選擇系統(tǒng)變量"path",將JDK安裝bin目錄添加到后面,比方JDK安裝目錄為:C:\ProgramFiles\Java\jdk1.6.0_14\bin,那么將該值添加到path末尾,如果前一個(gè)系統(tǒng)變量值末尾沒(méi)有分號(hào),注意在C:\ProgramFiles\Java\jdk1.6.0_14\bin前添加一個(gè)分號(hào);(3)新建系統(tǒng)變量,命名為:classpath,依次將C:\ProgramFiles\Java\jdk1.6.0_14\lib\tools.jar;C:\ProgramFiles\Java\jdk1.6.0_14\lib\dt.jar;兩個(gè)值添加進(jìn)去,確定;(4)翻開(kāi)cmd.exe,輸入java-version,如果顯示出JDK的版本,那么表示安裝成功。Eclipse直接解壓之后就可以使用。Eclipse解壓之后,需要下載用到的相關(guān)插件才能進(jìn)行應(yīng)用相關(guān)Android開(kāi)發(fā),可以通過(guò)下載安裝和在線安裝兩種方式。如果之前下載的Eclipse是標(biāo)準(zhǔn)版的,不含開(kāi)發(fā)Android工程需要的插件,最簡(jiǎn)單的安裝方法是在線安裝。至于AndroidSDK和JDK可以直接下載安裝,也可以在Eclipse中進(jìn)行在線安裝〔其它使用到的插件也可用相同方法來(lái)安裝〕。(1)啟動(dòng)Eclipse,選擇help—>installnewsoftware;(2)選擇AvailableSoftwaresites,找到開(kāi)發(fā)相應(yīng)的如的IP地址或自己輸入相關(guān)插件下載的地址,選擇將其enable使其可用;(3)然后在地址欄里選擇該IP地址,等待片刻;(4)選擇需要安裝的插件,然后進(jìn)行下載安裝即可。安裝完畢之后會(huì)提示重新啟動(dòng)Eclipse。之后在Eclipse中創(chuàng)立所需版本的虛擬機(jī)以便于用于開(kāi)發(fā)過(guò)程中調(diào)試程序。2.4.2效勞器端的搭建MyEclipse企業(yè)級(jí)工作平臺(tái)〔MyEclipseEnterpriseWorkbench,簡(jiǎn)稱(chēng)MyEclipse〕是對(duì)EclipseIDE的擴(kuò)展,它是功能豐富的JavaEE集成開(kāi)發(fā)環(huán)境,包括了完備的編碼、調(diào)試、測(cè)試和發(fā)布功能,利用它我們可以在數(shù)據(jù)庫(kù)和JavaEE的開(kāi)發(fā)、發(fā)布以及應(yīng)用程序效勞器的整合方面極大的提高工作效率。MyEclipse是一個(gè)十分優(yōu)秀的用于開(kāi)發(fā)Java,J2EE的Eclipse插件集合,MyEclipse的功能非常強(qiáng)大,支持也十分廣泛,尤其是對(duì)各種開(kāi)源產(chǎn)品的支持十分不錯(cuò)。可以說(shuō)MyEclipse是幾乎囊括了目前所有主流開(kāi)源產(chǎn)品的專(zhuān)屬eclipse開(kāi)發(fā)工具。MyEclipse的安裝:從官網(wǎng)上下載1.0版本的MyEclipse直接解壓安裝即可。對(duì)于安裝版的tomcat直接進(jìn)行安裝(一些設(shè)置都采用默認(rèn)設(shè)置),安裝好tomcat之后,在開(kāi)始菜單里選擇"monitortomcat",啟動(dòng)tomcat,在瀏覽器里輸入://localhost:8080,如果顯示出tomcat的歡送界面,那么表示安裝成功。下載并安裝MySQL后在Myeclipse中進(jìn)行相關(guān)配置以便整合MyEclipse+Tomcat+MySQL三個(gè)工具來(lái)進(jìn)行效勞器端的開(kāi)發(fā)。2.5本章小結(jié)本章首先對(duì)開(kāi)發(fā)中所涉及的知識(shí)進(jìn)行了簡(jiǎn)單的論述,介紹了開(kāi)發(fā)所用到的工具,接著對(duì)開(kāi)發(fā)環(huán)境的搭建進(jìn)行了描述,包括客戶端和效勞器端。得到了一個(gè)完整的開(kāi)發(fā)環(huán)境,為下一步進(jìn)行程序設(shè)計(jì)奠定了根底。3系統(tǒng)分析與設(shè)計(jì)3.1MVC設(shè)計(jì)模式簡(jiǎn)介MVC是Model-View-Controller的縮寫(xiě),即模型-視圖-控制器的英文縮寫(xiě)。MVC是XeroxPARC在20世紀(jì)80年代為編程語(yǔ)言Smalltalk-80創(chuàng)造的一種軟件設(shè)計(jì)模式,至今已被廣泛認(rèn)同和使用,最近幾年被推薦為Sun公司JavaWeb平臺(tái)的設(shè)計(jì)模式并且受到越來(lái)越多的Web開(kāi)發(fā)者歡送,它通過(guò)將業(yè)務(wù)邏輯、數(shù)據(jù)、視圖別離以減少耦合來(lái)協(xié)同工作。MVC強(qiáng)制性地把應(yīng)用程序的數(shù)據(jù)顯示、數(shù)據(jù)處理和流程控制分開(kāi)。MVC設(shè)計(jì)創(chuàng)立Web應(yīng)用程序的模式:〔1〕Model〔模型〕表示應(yīng)用程序核心〔比方數(shù)據(jù)庫(kù)記錄列表〕?!玻病砎iew〔視圖〕顯示數(shù)據(jù)〔數(shù)據(jù)庫(kù)記錄〕?!玻场矯ontroller〔控制器〕處理輸入〔寫(xiě)入數(shù)據(jù)庫(kù)記錄〕。Model〔模型〕是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的局部。通常模型對(duì)象負(fù)責(zé)在數(shù)據(jù)庫(kù)中存取數(shù)據(jù)。View〔視圖〕是應(yīng)用程序中處理數(shù)據(jù)顯示的局部,通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)立的。Controller〔控制器〕是應(yīng)用程序中處理用戶交互的局部。通??刂破髫?fù)責(zé)從視圖讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)。MVC分層有助于管理復(fù)雜的應(yīng)用程序,因?yàn)榭梢栽谝粋€(gè)時(shí)間內(nèi)專(zhuān)門(mén)關(guān)注一個(gè)方面。例如,可以在不依賴(lài)業(yè)務(wù)邏輯的情況下專(zhuān)注于視圖設(shè)計(jì)。同時(shí)也讓?xiě)?yīng)用程序的測(cè)試更加容易。MVC分層同時(shí)也簡(jiǎn)化了分組開(kāi)發(fā),不同的開(kāi)發(fā)人員可同時(shí)分別開(kāi)發(fā)視圖、控制器邏輯和業(yè)務(wù)邏輯[8]。圖3.1MVC模式圖采用MVC軟件設(shè)計(jì)模式來(lái)設(shè)計(jì)軟件具有耦合性低、重用性高、生命周期本錢(qián)低、部署快、可維護(hù)性高、有利軟件工程化管理等優(yōu)點(diǎn)。這些優(yōu)點(diǎn)無(wú)疑使得軟件設(shè)計(jì)更加事半功倍,而且使軟件開(kāi)發(fā)過(guò)程更加靈活快捷[19]??傊?,MVC設(shè)計(jì)思想將一個(gè)應(yīng)用分成了Model〔模型〕、View〔視圖〕Control〔控制〕三個(gè)獨(dú)立局部。按這種模式設(shè)計(jì)程序,多個(gè)視圖可以對(duì)應(yīng)一個(gè)模型,模型返回的數(shù)據(jù)與顯示邏輯別離,使得程序結(jié)構(gòu)清晰,易于維護(hù)[5]。3.2可行性分析一般而言,軟件工程工程是復(fù)雜的涉及多方面人力和物質(zhì)資源的工程,而且過(guò)程大多是不可逆的,必須有具體的解決方案,做詳細(xì)的可行性分析,否那么容易造成不必要的損失和浪費(fèi)??尚行苑治隹梢跃C合現(xiàn)有資源,提高預(yù)見(jiàn)性,為工程決策提供強(qiáng)有力的依據(jù)。技術(shù)條件方面:本文實(shí)現(xiàn)的移動(dòng)OA系統(tǒng)運(yùn)用Java語(yǔ)言,結(jié)合Android程序設(shè)計(jì),以技術(shù)先進(jìn)、性能穩(wěn)定,而且免費(fèi)的Tomcat作為效勞器端,以體積小、速度快、總體擁有本錢(qián)低,尤其是開(kāi)放源碼的MySQL作為數(shù)據(jù)庫(kù),綜合了Javaweb應(yīng)用技術(shù)和Android開(kāi)發(fā)的相關(guān)技術(shù)來(lái)實(shí)現(xiàn),它們都具有良好的性能和成熟的技術(shù),使得本文討論的移動(dòng)OA的實(shí)現(xiàn)具有很全面的技術(shù)支持。市場(chǎng)因素方面:本文實(shí)現(xiàn)的基于Android平臺(tái)的移動(dòng)OA,可將傳統(tǒng)OA所具有的功能移植到智能上實(shí)現(xiàn),不僅可以不受時(shí)間和空間的限制而隨時(shí)隨地辦公,而且操作方便靈活,可以滿足用戶的各種效勞需求,因此具有巨大的市場(chǎng)潛力,具有市場(chǎng)可行性。操作可行性:Android操作系統(tǒng)作為一款成熟而優(yōu)秀的操作系統(tǒng),具有良好的用戶體驗(yàn)和廣泛的市場(chǎng)根底,不管從用戶還是開(kāi)發(fā)商的角度都具有很強(qiáng)的可操作性[20]。經(jīng)濟(jì)可行性:雖然該系統(tǒng)可實(shí)現(xiàn)諸多的功能模塊,但正如前文所述,所采用的Java編程語(yǔ)言具有面向?qū)ο?、解釋型、分布式、可靠、平安、平臺(tái)獨(dú)立等特點(diǎn)[6]。使用技術(shù)先進(jìn)、性能穩(wěn)定,而且免費(fèi)的Tomcat作為效勞器。開(kāi)放源碼的MySQL作為數(shù)據(jù)庫(kù),所以可以最大程度的節(jié)約本錢(qián),故具有良好的經(jīng)濟(jì)可行性。綜上所述,本次開(kāi)發(fā)的移動(dòng)OA從結(jié)構(gòu)到功能都具有良好的可維護(hù)性,而且易于改變和添加子功能模塊,本文目前涉及到的幾個(gè)功能模塊只是OA系統(tǒng)中較常用的幾個(gè)模塊,在后期可以添加更多的模塊,本文在設(shè)計(jì)的時(shí)候考慮到了整個(gè)系統(tǒng)的可擴(kuò)展性。3.3系統(tǒng)總體架構(gòu)設(shè)計(jì)本文采用MVC模型來(lái)對(duì)系統(tǒng)進(jìn)行總體設(shè)計(jì),系統(tǒng)中將Tomcat部署為效勞器,利用Javaweb技術(shù)與客戶端進(jìn)行連接和交互,具有良好的可擴(kuò)展性可移植性,通過(guò)相應(yīng)的接口或解析技術(shù)進(jìn)行數(shù)據(jù)和信息的耦合處理,將傳統(tǒng)的“任務(wù)審批〞、“客戶資料共享〞、“提醒通知〞等功能從PC應(yīng)用擴(kuò)展到智能上,實(shí)現(xiàn)方便快捷的移動(dòng)辦公,大幅提高企業(yè)的辦公效率。系統(tǒng)總體框架如圖3.2所示:圖3.2系統(tǒng)框架圖3.4系統(tǒng)功能設(shè)計(jì)3.4.1系統(tǒng)功能模塊概述前已述及,本文實(shí)現(xiàn)的移動(dòng)OA系統(tǒng)主要由效勞器端和智能客戶端組成??蛻舳说闹饕δ転樘峁┯脩艚换ソ缑妫峁┍憩F(xiàn)層的處理功能。而效勞器端的主要功能為實(shí)現(xiàn)數(shù)據(jù)的后臺(tái)處理,提供數(shù)據(jù)的交換、效勞處理功能。圖3.3系統(tǒng)實(shí)現(xiàn)時(shí)序圖移動(dòng)OA客戶端設(shè)計(jì)與傳統(tǒng)的OA系統(tǒng)不同,移動(dòng)OA客戶端利用了移動(dòng)通信技術(shù),主要實(shí)現(xiàn)如圖3.4所示的幾大主要功能??蓪?shí)現(xiàn)不同權(quán)限的用戶的隨時(shí)隨地的需求,提高工作效率,減少不必要的人力和物力的浪費(fèi)。本文初步設(shè)計(jì)的移動(dòng)OA客戶端功能架構(gòu)如下圖:移動(dòng)OA客戶端移動(dòng)OA客戶端公文管理工作流管理通訊錄郵件管理通知公告輔助管理圖3.4移動(dòng)OA客戶端功能架構(gòu)圖〔1〕公文管理模塊該模塊主要實(shí)現(xiàn)公文流轉(zhuǎn)的管理功能,即辦理公文的流轉(zhuǎn)、審批和發(fā)送。主要子模塊有公文申請(qǐng)、公文狀態(tài)查詢(xún)和公文審批等。該模塊利用效勞器端的工作流引擎實(shí)現(xiàn)公文的自動(dòng)化處理,公文管理流程圖如圖3.5所示。公文處理公文處理閱讀公文處理公文附件處理部門(mén)人員選擇并且發(fā)送公文流轉(zhuǎn)處理公文督辦處理附件上傳附件上傳公文發(fā)送部門(mén)人員選擇公文審批新建公文圖3.5公文管理流程圖〔2〕工作流轉(zhuǎn)管理模塊該模塊主要是實(shí)現(xiàn)用戶〔如工作人員〕工作方案的上報(bào),以及具有相應(yīng)權(quán)限的用戶〔如領(lǐng)導(dǎo)〕對(duì)工作方案安排的審批及其它操作。當(dāng)工作人員在外出差或因故未能及時(shí)到公司時(shí),可以按照一定的標(biāo)準(zhǔn)擬定未來(lái)一段時(shí)間的工作方案或?qū)嵤┓桨?,上傳至由領(lǐng)導(dǎo)審批。同理,當(dāng)領(lǐng)導(dǎo)無(wú)法在固定時(shí)間和空間進(jìn)行辦公時(shí),也可通過(guò)登錄該系統(tǒng)并審批員工提交的工作請(qǐng)示并選擇部門(mén)及相關(guān)工作人員發(fā)送。該模塊還提供了各種附件處理及交互功能?!玻场惩ㄓ嶄浤K該模塊實(shí)現(xiàn)按照公司部門(mén)組織結(jié)構(gòu)查詢(xún)、編輯、修改和刪除相關(guān)聯(lián)系人的各項(xiàng)資料,使用戶可快速協(xié)調(diào)工作方案和快速聯(lián)系相關(guān)人員?!玻础赤]件管理該功能模塊實(shí)現(xiàn)在智能上實(shí)現(xiàn)郵件撰寫(xiě)、發(fā)送及接收。通過(guò)添加多郵箱地址實(shí)現(xiàn)郵件群發(fā)。〔5〕通知公告該功能模塊主要實(shí)現(xiàn)接收通知或提醒功能。企業(yè)管理層可以通過(guò)效勞器端來(lái)給所有員工或某特定員工發(fā)送企業(yè)最新動(dòng)態(tài)。如企業(yè)調(diào)整方案、企業(yè)經(jīng)營(yíng)狀況,或?qū)T工工作進(jìn)度進(jìn)行提醒?!玻丁齿o助管理該功能模塊主要實(shí)現(xiàn)綜合管理的功能,通過(guò)該模塊,用戶可以使用OA系統(tǒng)客戶端進(jìn)行各種申請(qǐng)、匯報(bào)及批閱〔需權(quán)限〕。方便加班、請(qǐng)假、培訓(xùn)、出差、合同審批等申請(qǐng)工作的高效率進(jìn)行。3.4.3移動(dòng)OA效勞器端設(shè)計(jì)移動(dòng)OA效勞器端主要負(fù)責(zé)“根底效勞支撐〞、“終端訪問(wèn)管理〞、“數(shù)據(jù)庫(kù)連接〞、“系統(tǒng)管理〞、“接口配置〞等工作,效勞器端系統(tǒng)以頁(yè)面分析技術(shù)或數(shù)據(jù)協(xié)議接口與內(nèi)部系統(tǒng)相連接,進(jìn)行數(shù)據(jù)的交互和通信,系統(tǒng)初步設(shè)計(jì)主要功能架構(gòu)如圖3.6所示。根底效勞支撐根底效勞支撐移動(dòng)OA效勞器端終端訪問(wèn)管理數(shù)據(jù)庫(kù)管理系統(tǒng)管理接口配置圖3.6移動(dòng)OA效勞器功能架構(gòu)圖〔1〕根底效勞支撐該模塊主要實(shí)現(xiàn)“文件下載效勞〞、“數(shù)據(jù)推送效勞〞、“文件解析效勞〞、“業(yè)務(wù)橋接效勞〞等功能來(lái)支撐整個(gè)系統(tǒng)運(yùn)行。其中“文件下載效勞〞實(shí)現(xiàn)與效勞器的數(shù)據(jù)處理和交換;“數(shù)據(jù)推送效勞〞將客戶端請(qǐng)求數(shù)據(jù)推送到客戶端,實(shí)現(xiàn)OA系統(tǒng)客戶端和內(nèi)部效勞器間的數(shù)據(jù)交換;“文件解析效勞〞主要負(fù)責(zé)將常用的文檔解析成智能終端可識(shí)別和處理的數(shù)據(jù)流格式,以利于傳輸;“業(yè)務(wù)橋接效勞〞預(yù)留空間而作為后期系統(tǒng)的擴(kuò)展,以實(shí)現(xiàn)將幾個(gè)不同的應(yīng)用系統(tǒng)簡(jiǎn)單的橋接在同一效勞器平臺(tái)上,便于統(tǒng)一的數(shù)據(jù)處理。〔2〕終端訪問(wèn)管理主要實(shí)現(xiàn)終端訪問(wèn)的許可效勞和權(quán)限控制,只有得到許可、獲得權(quán)限的用戶才允許訪問(wèn)OA效勞器,同時(shí)對(duì)傳入的數(shù)據(jù)進(jìn)行處理和認(rèn)證?!玻场硵?shù)據(jù)庫(kù)管理該模塊主要負(fù)責(zé)OA系統(tǒng)與數(shù)據(jù)庫(kù)的交互,連接訪問(wèn)數(shù)據(jù)庫(kù)并將客戶端傳入的且已經(jīng)過(guò)處理的數(shù)據(jù)保存至數(shù)據(jù)庫(kù),或?qū)⑿枰臄?shù)據(jù)從數(shù)據(jù)庫(kù)中取出,準(zhǔn)備發(fā)送到客戶端等所需的對(duì)數(shù)據(jù)庫(kù)諸如“增〞、“刪〞、“改〞、“查〞的操作并為系統(tǒng)效勞?!玻础诚到y(tǒng)管理主要實(shí)現(xiàn)“用戶管理〞、“參數(shù)配置〞、“接入管理〞、“日志管理〞、“運(yùn)行監(jiān)管〞等功能。其中,“用戶管理〞配置接入系統(tǒng)的用戶的詳細(xì)信息;“參數(shù)配置〞為效勞器運(yùn)行設(shè)置根本的諸如是否記錄運(yùn)行日志、開(kāi)機(jī)后效勞器是否自動(dòng)運(yùn)行等參數(shù);“接入管理〞用于無(wú)線網(wǎng)絡(luò)接入效勞的配置;“日志管理〞負(fù)責(zé)系統(tǒng)運(yùn)行日志數(shù)據(jù)的記錄、查看及管理;通過(guò)“運(yùn)行監(jiān)管〞可查看系統(tǒng)的運(yùn)行狀態(tài)?!玻怠辰涌谂渲脤?shí)現(xiàn)OA效勞器的配置和管理,或者其它管理系統(tǒng)如“郵件接口〞等的通信接口的配置和管理。3.5數(shù)據(jù)庫(kù)相關(guān)設(shè)計(jì)智能客戶端向效勞器發(fā)送數(shù)據(jù)請(qǐng)求,效勞器接受到數(shù)據(jù)請(qǐng)求后在數(shù)據(jù)庫(kù)中進(jìn)行相應(yīng)的數(shù)據(jù)可操作,將得到的數(shù)據(jù)返回到客戶端。本文實(shí)現(xiàn)的OA系統(tǒng)以MySQL作為數(shù)據(jù)庫(kù),下面簡(jiǎn)要的列出建立數(shù)據(jù)庫(kù)及數(shù)據(jù)表的SQL語(yǔ)句及數(shù)據(jù)表。createdatabasemy_db;usemy_db;createtableusers(idintAUTO_INCREMENTprimarykey,accountvarchar(45)notnull,passwordvarchar(45)notnull,namevarchar(45)notnull,permissionintnotnulldefault0,remarkvarchar(128)null);usemy_db;insertintousersvalues('1','1','123','admin','1','部門(mén)經(jīng)理');insertintousersvalues('2','2','123','employer','0','員工');insertintotasksvalues('1','畢設(shè)','employer1','admin1','0','加快進(jìn)度');insertintotasksvalues('2','編程','employer2','admin2','0','注重方法');insertintotasksvalues('3','論文','employer3','admin3','0','拒絕抄襲');insertintotasksvalues('4','辯論','employer','admin','0','軟件演示');表3.1登錄信息表序號(hào)字段名稱(chēng)中文說(shuō)明數(shù)據(jù)類(lèi)型大小是否為空描述1Id員工id號(hào)Int默認(rèn)Notnull主鍵、自動(dòng)增長(zhǎng)id號(hào)2Account員工賬號(hào)Varchar12Notnull具備唯一性3Password員工密碼Varchar16Notnull密碼4Name員工姓名Varchar12Notnull5Permission員工權(quán)限Varchar11Notnull默認(rèn)值是0,即普通員工6Remark備注信息Text默認(rèn)Null表3.2任務(wù)信息表序號(hào)字段名稱(chēng)中文說(shuō)明數(shù)據(jù)類(lèi)型大小是否為空描述1Id任務(wù)idInt默認(rèn)Notnull主鍵、自動(dòng)增長(zhǎng)2Name任務(wù)名稱(chēng)Varchar12Notnull3Applyer任務(wù)執(zhí)行人Varchar12Notnull4Examer任務(wù)審批人Varchar12Notnull5Station任務(wù)狀態(tài)Int默認(rèn)Notnull默認(rèn)值是0,即未審批6Remark任務(wù)備注Varchar128Null表3.3通訊錄信息表序號(hào)字段名稱(chēng)中文說(shuō)明數(shù)據(jù)類(lèi)型大小是否為空描述1Id通訊錄idInt默認(rèn)Notnull主鍵,自動(dòng)增長(zhǎng)2Department部門(mén)名稱(chēng)Varchar20Notnull3Name員工姓名Varchar12Notnull4Number號(hào)碼Int默認(rèn)Notnull表3.4通知信息表序號(hào)字段名稱(chēng)中文說(shuō)明數(shù)據(jù)類(lèi)型大小是否為空描述1Id通知idInt默認(rèn)Notnull主鍵、自動(dòng)增長(zhǎng)2Title通知標(biāo)題Varchar200Notnull3Content通知正文Text默認(rèn)Null3.6本章小結(jié)本章完成了對(duì)基于Android平臺(tái)的移動(dòng)OA的系統(tǒng)分析與設(shè)計(jì),主要內(nèi)容包括系統(tǒng)總體架構(gòu)設(shè)計(jì)、可行性分析、系統(tǒng)功能設(shè)計(jì),也簡(jiǎn)單探討了數(shù)據(jù)庫(kù)簡(jiǎn)要設(shè)計(jì),為下一章基于Android平臺(tái)的移動(dòng)OA系統(tǒng)的實(shí)現(xiàn)奠定了根底。4移動(dòng)OA系統(tǒng)的具體實(shí)現(xiàn)4.1Android運(yùn)行及開(kāi)發(fā)環(huán)境2.4節(jié)已經(jīng)詳細(xì)論述過(guò)開(kāi)發(fā)環(huán)境的搭建,在系統(tǒng)環(huán)境為windows7的前提下要進(jìn)行Java相關(guān)開(kāi)發(fā)及運(yùn)行Java程序語(yǔ)言編寫(xiě)的代碼,首先必須安裝windows平臺(tái)的JDK。JDK(JavaDevelopmentKit)是整個(gè)Java開(kāi)發(fā)的核心和根底,只有在安裝了與PC平臺(tái)兼容的JDK的前提下才能安裝其他擴(kuò)展開(kāi)發(fā)軟件,從而進(jìn)行基于Java語(yǔ)言程序的編譯和運(yùn)行。開(kāi)發(fā)環(huán)境如下:系統(tǒng)環(huán)境:windows7開(kāi)發(fā)語(yǔ)言:Java開(kāi)發(fā)平臺(tái):2.2版本以上Android系統(tǒng)開(kāi)發(fā)工具:Eclipse〔+ADT+SDK〕+MyEclipse+Tomcat+MySQL4.2關(guān)鍵技術(shù)的實(shí)現(xiàn)4.2.1activity與intent在2.1.3節(jié)已討論過(guò)activity和intent的相關(guān)知識(shí),android應(yīng)用程序開(kāi)發(fā)中,從一個(gè)Activity〔界面〕跳轉(zhuǎn)到另一個(gè)Activity時(shí),需要使用到Intent來(lái)啟動(dòng)Activity[10]。在Intent使用時(shí),分為顯式調(diào)用和隱式調(diào)用2類(lèi),顯式調(diào)用就是直接調(diào)用另一個(gè)Activity的class類(lèi),隱式調(diào)用需要通過(guò)調(diào)用另一個(gè)Activity的action來(lái)啟動(dòng)另一個(gè)Activity,詳細(xì)如下:Intent在android中的定義為:publicIntent(ContextpackageContext,Class<?>cls);〔1〕顯式調(diào)用一般直接調(diào)用Activity的Class類(lèi)例如Activity1調(diào)用Activity2,代碼如下:Intentintent=newIntent(this,Activity2.class);startActivity(intent);〔2〕隱式調(diào)用Activity1隱式調(diào)用Activity2時(shí)需要在AndroidManifest.xml文件中配置Activity2的action和category,而且需要添加下面作為配置信息的代碼到Activity2的定義中。<intent-filter><actionandroid:name="myaction2"/><categoryandroid:name="ent.category.DEFAULT"/><categoryandroid:name="mycategory"/></intent-filter>接著同樣使用intent來(lái)啟動(dòng)Activity,代碼如下:Intentintent=newIntent("myaction2");startActivity(intent);這樣就可以啟動(dòng)Activity2在使用intent隱式調(diào)用Activity時(shí)會(huì)遇到多個(gè)Activity的intent-filter中的action和category相同時(shí),這時(shí)android會(huì)先彈出一個(gè)選擇界面的窗口,顯式要啟動(dòng)的Activity列表,根據(jù)用戶的選擇來(lái)啟動(dòng)Activity,如Activity2和Activity3的action和category相同<Activityandroid:name=".Activity2"><intent-filter><actionandroid:name="myaction2"/><categoryandroid:name="ent.category.DEFAULT"/><categoryandroid:name="myCategory"/></intent-filter></Activity><Activityandroid:name=".Activity3"><intent-filter><actionandroid:name="myaction2"/><categoryandroid:name="ent.category.DEFAULT"/><categoryandroid:name="myCategory"/></intent-filter></Activity>啟動(dòng)Activity代碼如下:Intentintent=new("myaction2");intent.addCategory("myCategory");startActivity(intent);這時(shí)就會(huì)彈出Activity的選擇窗口,選擇啟動(dòng)activity2還是activity3。4.2.2XML解析簡(jiǎn)介XML(eXtensibleMarkupLanguage,可擴(kuò)展標(biāo)記語(yǔ)言)是由WorldWideWeb聯(lián)盟(W3C)定義的元語(yǔ)言,即一種關(guān)于語(yǔ)言的語(yǔ)言。通常所說(shuō)的XML文件的解析是指把代表XML文檔的一個(gè)無(wú)結(jié)構(gòu)的字符序列轉(zhuǎn)換為滿足XML語(yǔ)法的結(jié)構(gòu)化組件的過(guò)程。對(duì)于Android移動(dòng)設(shè)備而言,由于其系統(tǒng)和空間資源有限,所以開(kāi)發(fā)人員必須選擇適宜的XML解析技術(shù),才可能最有效地使用有限的資源,從而到達(dá)節(jié)省時(shí)間和空間目的[7]。根據(jù)從XML中獲取數(shù)據(jù)的難易性,性能和最終所得到的數(shù)據(jù)模型的異同,XML解析技術(shù)大致可分為以下四類(lèi):〔1〕面向文檔的流式解析〔2〕面向文檔的對(duì)象式解析〔3〕面向文檔的指針式解析〔4〕面向應(yīng)用的對(duì)象式解析這四類(lèi)解析技術(shù)分別處于不同的抽象層次,適用于不同的應(yīng)用場(chǎng)景,針對(duì)具體的應(yīng)用需求,選擇適宜的解析技術(shù),往往能夠減少內(nèi)存消耗,縮短處理時(shí)間,更方便快捷地獲取數(shù)據(jù),提高應(yīng)用系統(tǒng)的整體性能。〔1〕面向文檔的流式解析流式解析是解析器順序讀取XML文檔,將捕獲的各種事件,如元素開(kāi)始和元素結(jié)束等,都交由程序處理。流式解析又分為兩種解析方式:推式解析(SAX:SimpleAPIforXML);拉式解析(StAX:StreamingAPIforXML)。這兩種方式的主要區(qū)別在于是由解析器還是應(yīng)用程序控制讀循環(huán)(讀入文件的循環(huán))。推式解析(SAX)SAX是基于事件驅(qū)動(dòng)的,即SAX解析器在讀取XML文檔的過(guò)程中生成一個(gè)事件流,并且對(duì)于每個(gè)事件都通過(guò)回調(diào)事件處理程序中相應(yīng)的方法來(lái)進(jìn)行處理。圖4.1表示了一個(gè)Xml文件及其對(duì)應(yīng)的文件流格式?!沧ⅲ喝缦聢D,回車(chē)換行也被解析成了一個(gè)字符。〕圖4.1XML文件及其對(duì)應(yīng)的文件流格式拉式解析(StAX)在這種解析方式中,應(yīng)用程序控制著讀循環(huán)。反復(fù)調(diào)用解析器獲得下一個(gè)事件,直到文檔結(jié)束。StAX針對(duì)同樣的XML文檔所獲得事件類(lèi)型和SAX根本相同?!玻病趁嫦蛭臋n的對(duì)象式解析
DOM(DocumentObjectModel)是用與平臺(tái)和語(yǔ)言無(wú)關(guān)的方式對(duì)XML文檔進(jìn)行建模的官方W3C標(biāo)準(zhǔn)。DOM的層次化對(duì)象模型是一個(gè)樹(shù)形結(jié)構(gòu),它的優(yōu)點(diǎn)在于可以隨機(jī)訪問(wèn),但需要消耗大量的內(nèi)存[9]。
圖4.2表示了Xml文件與其Dom樹(shù)的對(duì)應(yīng)關(guān)系。圖4.2Xml文件與其Dom樹(shù)的對(duì)應(yīng)關(guān)系〔3〕面向文檔的指針式解析面向文檔的流式解析效率較高,但易用性差,而對(duì)象式解析易用性強(qiáng),卻效率較低。這兩種方式都是提取式解析〔extractiveparsing〕的方式。DOM并不支持增量更新。為了解決諸多缺點(diǎn)和問(wèn)題,提出了指針式解析技術(shù),即VTD-XML〔一種面向文檔的指針式解析〕。VTD是一個(gè)64bits定長(zhǎng)的數(shù)值類(lèi)型,記錄了每個(gè)元素的起始位置〔offset〕,長(zhǎng)度〔length〕,深度〔depth〕以及令牌〔元素標(biāo)簽〕的類(lèi)型〔type〕等信息。如圖4.3,表示了VTD每個(gè)元素的位置及類(lèi)型信息,對(duì)Xml的所有操作都是基于這個(gè)數(shù)據(jù)結(jié)構(gòu)。
圖4.3VDT數(shù)據(jù)結(jié)構(gòu)圖4.4列出了VTD目前所支持的所有元素的類(lèi)型〔12種〕:
圖4.4VTD目前所支持的所有元素的類(lèi)型查詢(xún)與更新:如果需要提取XML內(nèi)容,就查找VTD數(shù)組,利用VTD記錄中的位置等信息在原始比特?cái)?shù)組上進(jìn)行解碼并返回字符串。
圖4.5是三種主要的XML解析的相關(guān)功能及性能比擬。VTD-XML解析xml通常需要經(jīng)過(guò)以下幾步:1〕以一個(gè)byte數(shù)組開(kāi)始〔存放xml〕;2〕利用VTDGen進(jìn)行解析;3〕利用VTDNav進(jìn)行導(dǎo)航定位;4〕節(jié)點(diǎn)遍歷使用Autopilot;5〕利用Xpath進(jìn)行節(jié)點(diǎn)選擇6〕增量更新使用XMLModifier
。圖4.5三種主要的XML解析的相關(guān)功能及性能比擬〔4〕面向應(yīng)用的對(duì)象式解析;前面所談到的三種解析技術(shù)都是面向文檔的,但有很多應(yīng)用程序僅僅將XML作為數(shù)據(jù)交換的媒介,它們更關(guān)心的是文檔數(shù)據(jù)本身,因而面向應(yīng)用的對(duì)象式解析技術(shù)更適用。面向應(yīng)用的對(duì)象式解析技術(shù)又稱(chēng)為為XML數(shù)據(jù)綁定,指將數(shù)據(jù)從一些存儲(chǔ)媒介(如XML文檔、文本文件和數(shù)據(jù)庫(kù))中取出,并通過(guò)應(yīng)用程序來(lái)表示這些數(shù)據(jù)。圖4.6面向應(yīng)用的對(duì)象式解析4.2.3與效勞器交互Android與效勞器通常采用或Socket通信方式進(jìn)行交互,而通信方式又可細(xì)分為get和post兩種方式。本文實(shí)現(xiàn)的Android客戶端與效勞器的交互采用的通信方式。Web是網(wǎng)絡(luò)上使用最廣泛的分布式應(yīng)用架構(gòu),旨在共享分布在網(wǎng)絡(luò)上的各個(gè)Web效勞器中的所有互相鏈接的信息。它采用客戶端/效勞器通信模式,客戶端與效勞器之間用協(xié)議通信。超文本傳輸協(xié)議(,HypertextTransferProtocol),規(guī)定了Web的根本運(yùn)作過(guò)程,以及客戶端與Web效勞器之間的通信細(xì)節(jié)。協(xié)議建立在TCP/IP協(xié)議的根底上,使用可靠的TCP連接,默認(rèn)端口號(hào)為80.,客戶端與效勞器端之間的一次信息交換過(guò)程:〔1〕客戶端與效勞器建立TCP連接〔2〕客戶端發(fā)送請(qǐng)求〔3〕效勞器端返回相應(yīng)的響應(yīng)〔4〕客戶端與效勞器端之間的TCP連接關(guān)閉
請(qǐng)求可以使用多種請(qǐng)求方式,主要有以下幾種:GET:最常見(jiàn)的請(qǐng)求方式,客戶端程序通過(guò)這種方式訪問(wèn)效勞器上的一個(gè)文檔,并由效勞器發(fā)送給客戶端程序;POST:客戶端程序可以通過(guò)這種方式發(fā)送大量信息給效勞器。在請(qǐng)求中除了包含要訪問(wèn)的文檔的URI,還包括大量的請(qǐng)求正文,在這些請(qǐng)求正文中通常會(huì)包含HTML表單數(shù)據(jù);HEAD:用于在客戶端和效勞器之間交流一些內(nèi)部數(shù)據(jù),效勞器將不會(huì)返回具體的文檔;
PUT:客戶端程序通過(guò)這種方式把文檔上傳給效勞器;DELETE:客戶端通過(guò)這種方式來(lái)刪除遠(yuǎn)程效勞器上的某個(gè)文檔;圖4.7客戶端與效勞器交互流程圖4.2.4文件上傳和下載實(shí)現(xiàn)Android平臺(tái)的文件上傳有兩種方式,分別是通過(guò)模擬web上傳,或是利用Socket上傳。由于Socket方式基于UDP或TCP協(xié)議,必須嚴(yán)格按照TCP協(xié)議來(lái)組織上傳的數(shù)據(jù)流,因而很容易會(huì)造成長(zhǎng)時(shí)間等待的狀況或是使系統(tǒng)產(chǎn)生各種異常[11]。假設(shè)是用UDP協(xié)議來(lái)傳送,那么容易造成數(shù)據(jù)的喪失。本文使用基于協(xié)議的第一種方式來(lái)實(shí)現(xiàn)文件的上傳。當(dāng)然,也要先把上傳的文件按照協(xié)議的格式封裝〔該方式不支持?jǐn)帱c(diǎn)續(xù)傳功能,因此超過(guò)一定大小的文件傳輸不推薦使用,而一般使用Socket方式〕。Android平臺(tái)的文件下載通??刹捎脜f(xié)議而直接從效勞器下載的方式或是調(diào)用效勞器中WebService的方式,WebService是一種基于SOAP協(xié)議的遠(yuǎn)程調(diào)用標(biāo)準(zhǔn)。通過(guò)WebService可以將不同操作系統(tǒng)平臺(tái),不同語(yǔ)言、不同技術(shù)整合到一起。在AndroidSDK中并沒(méi)有提供調(diào)用WebService的庫(kù),因此,需要使用第三方類(lèi)庫(kù)〔KSOAP2,開(kāi)源且易于參加增強(qiáng)特性〕來(lái)調(diào)用WebService。圖4.8SOAP調(diào)用示意圖分為七個(gè)步驟來(lái)調(diào)用WebService方法:〔1〕實(shí)例化SoapObject對(duì)象,指定webService的命名空間〔從相關(guān)WSDL文檔中可以查看命名空間〕以及調(diào)用方法名稱(chēng)〔2〕如果方法有參數(shù)的話,設(shè)置調(diào)用方法參數(shù)request.addProperty("參數(shù)名稱(chēng)","參數(shù)值")〔3〕設(shè)置SOAP請(qǐng)求信息(參數(shù)局部為SOAP協(xié)議版本號(hào),必須與你要調(diào)用的webService中版本號(hào)一致)//獲得序列化的EnvelopeSoapSerializationEnvelopeenvelope=new
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年湘教新版九年級(jí)生物上冊(cè)月考試卷含答案
- 2025年北師大新版九年級(jí)地理下冊(cè)月考試卷含答案
- 2025年華東師大版九年級(jí)生物上冊(cè)階段測(cè)試試卷含答案
- 2025年冀教版九年級(jí)歷史下冊(cè)階段測(cè)試試卷含答案
- 2025年冀教版選擇性必修1歷史下冊(cè)階段測(cè)試試卷
- 2025年上教版七年級(jí)生物下冊(cè)階段測(cè)試試卷
- 2025年外研版九年級(jí)歷史上冊(cè)月考試卷
- 二零二五版離婚協(xié)議書(shū)起草與子女撫養(yǎng)權(quán)維護(hù)服務(wù)合同4篇
- 二零二五版借貸房屋買(mǎi)賣(mài)合同糾紛調(diào)解服務(wù)合同4篇
- 二零二五版木結(jié)構(gòu)建筑能耗數(shù)據(jù)采集與分析合同4篇
- 電力系統(tǒng)動(dòng)態(tài)仿真與建模
- 蝦皮shopee新手賣(mài)家考試題庫(kù)及答案
- 四川省宜賓市2023-2024學(xué)年八年級(jí)上學(xué)期期末義務(wù)教育階段教學(xué)質(zhì)量監(jiān)測(cè)英語(yǔ)試題
- 價(jià)值醫(yī)療的概念 實(shí)踐及其實(shí)現(xiàn)路徑
- 2024年中國(guó)華能集團(tuán)燃料有限公司招聘筆試參考題庫(kù)含答案解析
- 《紅樓夢(mèng)》中的男性形象解讀
- 安全生產(chǎn)技術(shù)規(guī)范 第49部分:加油站 DB50-T 867.49-2023
- 《三國(guó)演義》中的語(yǔ)言藝術(shù):詩(shī)詞歌賦的應(yīng)用
- 腸外營(yíng)養(yǎng)液的合理配制
- 消防安全教育培訓(xùn)記錄表
- 2023年河南省新鄉(xiāng)市鳳泉區(qū)事業(yè)單位招聘53人高頻考點(diǎn)題庫(kù)(共500題含答案解析)模擬練習(xí)試卷
評(píng)論
0/150
提交評(píng)論