![學位論文-SMART系統(tǒng)-系統(tǒng)框架設計與開發(fā)_第1頁](http://file4.renrendoc.com/view/5f70d071d9520534237588ea5d0e441d/5f70d071d9520534237588ea5d0e441d1.gif)
![學位論文-SMART系統(tǒng)-系統(tǒng)框架設計與開發(fā)_第2頁](http://file4.renrendoc.com/view/5f70d071d9520534237588ea5d0e441d/5f70d071d9520534237588ea5d0e441d2.gif)
![學位論文-SMART系統(tǒng)-系統(tǒng)框架設計與開發(fā)_第3頁](http://file4.renrendoc.com/view/5f70d071d9520534237588ea5d0e441d/5f70d071d9520534237588ea5d0e441d3.gif)
![學位論文-SMART系統(tǒng)-系統(tǒng)框架設計與開發(fā)_第4頁](http://file4.renrendoc.com/view/5f70d071d9520534237588ea5d0e441d/5f70d071d9520534237588ea5d0e441d4.gif)
![學位論文-SMART系統(tǒng)-系統(tǒng)框架設計與開發(fā)_第5頁](http://file4.renrendoc.com/view/5f70d071d9520534237588ea5d0e441d/5f70d071d9520534237588ea5d0e441d5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
PAGE第23頁共=NUMPAGES27-423頁學位論文SMART系統(tǒng)-系統(tǒng)框架設計與開發(fā)論文作者姓名:申請學位專業(yè):申請學位類別:論文提交日期:SMART系統(tǒng)-系統(tǒng)框架設計與開發(fā)摘要SMART系統(tǒng)是一個新型智能在線考試信息管理系統(tǒng),該系統(tǒng)主要實現(xiàn)了學生在線考試與評估以及教師對學生在線考試信息的管理和維護。本文按照SMART系統(tǒng)的非功能性需求,基于Struts、Spring、Hibernate三種開源技術,構建了一個具有良好的可擴展性、可維護性、可靠性的系統(tǒng)框架。整個系統(tǒng)的框架分為三層,分別為表現(xiàn)層、業(yè)務層和持久層。本系統(tǒng)的表現(xiàn)層是基于Struts作擴展設計,結合本系統(tǒng)的需求完成了自定義標簽的封裝,基本action接口的編寫。在業(yè)務層則是采用單例模式設計與Spring的IoC模式相結合,實現(xiàn)了公共代理類的編寫,各業(yè)務邏輯接口的封裝。而在持久層的設計中則是采用基于現(xiàn)有持久層框架的實現(xiàn)模式,實現(xiàn)了對產生Session實例的封裝,對常用數(shù)據(jù)庫操作的封裝。這樣設計減少了耦合性且避免了生成大量的臨時對象。該系統(tǒng)框架能達到良好的可拓展性和維護性。它不僅僅適用這個系統(tǒng)的開發(fā),可以應用于J2EE領域中基于SSH來架構的大部分B/S系統(tǒng)。關鍵詞:設計模式;開源;領域建模;系統(tǒng)框架SMARTSystem–TheDesignandDevelopmentofTheFrameworkAbstractTheSMARTsystemisanewtypeofintelligentinformationmanagementsystemforonlineexamination.ThesystemhasmostlyrealizedthefunctionthatthestudentscandotheonlineexamandtheteacherscanmanageandmaintaintheexaminformationofstudentsonSMARTSystem.Inthispaper,howtoconstructasystemframeworkofgoodexpansibility,maintainability,andreliabilityisdiscussingindetailaccordingtothenon-functionalityneedoftheSmartsystem,whichisbasedonStruts,Spring,andHibernate.Thesystemframeworkisdividedintothreelayers,andtheyareviewlayer,businesslayer,andpersistentlayer.Wecandoexpansion-designingofStrutsintheprocessoftheframeworkdesigningwhichbasesontheviewlayer,alsotheencapsulationofthecustomtagandthecompiledlanguageforthebasicinterfaceofactionarefinishedaccordingtotherequestofthesystem.Inthissystem,thebusinesslayerisacomboofsingle-examplemodeandIoCmode,sothecompiledlanguageforthecommondeputizeandtheencapsulationofthebusinesslogicinterfacehavebeenrealized.Therealizedmodethatisappliedtotheframeworkdesignofthepersistentlayerisbasedontheframeworkofthepersistentlayerinexistence,alsotheencapsulationofcreatingexampleforSessionandtheencapsulationofdatabaseforcommonusearerealized.Asaresult,itwillreducethecoupling,andalotoftemporaryobjectscreatedinthisprocesswillbeavoided.Favorableexpansibilityandmaintainabilitycanbeachievedinthissystemframework.ThisframeisnotonlyappliedtothesystemicdevelopmentbutalsocanbeappliedtothemostB/SsystemwhichbasesontheframeofSSHinthefieldofJ2EE.Keywords:DesignPattern;OpenSource;DomainModeling;TheframeworkofSystem目錄論文總頁數(shù):25頁TOC\o"1-2"\h\z\u1 引言 11.1 課題背景 11.2 國內外研究現(xiàn)狀 11.3 本課題研究的意義 12 系統(tǒng)需求分析 22.1 可擴展性要求 22.2 可維護性要求 22.3 可伸縮性要求 22.4 可靠性要求 23 系統(tǒng)開發(fā)環(huán)境及實現(xiàn)關鍵技術 33.1 硬件環(huán)境 33.2 軟件環(huán)境 33.3 系統(tǒng)實現(xiàn)的關鍵技術 34 系統(tǒng)總體框架設計 74.1 總體結構說明 74.2 總體結構設計與建模 105 系統(tǒng)總體框架具體實現(xiàn) 185.1 各層具體實現(xiàn) 186 測試與分析 216.1 測試環(huán)境 216.2 測試結果 216.3 結果分析 22結論 22參考文獻 23致謝 24聲明 25引言課題背景隨著計算機技術的發(fā)展及計算機的日益普及,基于Web的在線考試與無紙化辦公已成為大勢所趨。特別是在大興數(shù)字化校園建立的今天,基于WEB在線考試系統(tǒng)也已經成為學校信息化建設中不可缺少的一部分,它的優(yōu)勢不但體現(xiàn)在人力上也體現(xiàn)在物力上,基于WEB的在線考試系統(tǒng)的自動評閱、計分、成績存檔功能將有效地避免資源的浪費,有利于環(huán)保,減少人員投入,大大的提高了效率。相比傳統(tǒng)的考試方式,基于WEB的在線考試系統(tǒng)的主要好處是一方面可以動態(tài)地管理各種考試信息,只要準備好足夠大的題庫,就可以按照要求自動生成各種試卷;另一方面,考試時間靈活,可以在規(guī)定的時間段內的任意時間參加考試;另外計算機化的考試的最大特點是閱卷快,系統(tǒng)可以在考試結束時當場給出客觀題考試成績,計算機閱卷給了考生最大的公平感。本文中研究了基于Web的在線考試系統(tǒng)―系統(tǒng)框架設計與開發(fā)設計與實現(xiàn),包括系統(tǒng)需求分析和系統(tǒng)框架功能設計與實現(xiàn)。國內外研究現(xiàn)狀網絡考試系統(tǒng)極大地提高了教學的靈活性,現(xiàn)在在許多領域已經有了廣泛的應用。在國外最有影響的案例就是ETS(美國教育考試中心)舉辦的GRE(美國研究生入學考試)的計算機化考試,它使考試由原來的每年只能有兩次參加考試的機會變成了每個工作日都可以參加的考試,大大提高了工作的效率。在我國,經過這么多年在IT業(yè)的發(fā)展及經驗的積累,雖然數(shù)字化教育已經蓬勃地發(fā)展起來,但是目前學校與社會上的各種考試大都采用傳統(tǒng)的考試方式,在此方式下,組織一次考試至少要經過五個步驟,即人工出題、考生考試、人工閱卷、成績評估和試卷分析。然而在這個過程中人工手動出題和試題的選擇是最為復雜的,顯然,隨著考試類型的不斷增加及考試要求的不斷提高,教師的工作量將會越來越大,并且其工作將是一件十分煩瑣和非常容易出錯的事情,可以說傳統(tǒng)的考試方式已經不能適應現(xiàn)代考試的需要。因此在國內也出現(xiàn)了比較適合自己本國特色的在線考試系統(tǒng)如:杰佛通用在線考試系統(tǒng),新為在線考試系統(tǒng)等。本課題研究的意義本系統(tǒng)主要用來緩解傳統(tǒng)考試所需要的繁瑣工作流程,組織試題、印刷試卷、組織考試、監(jiān)考防作弊、收卷判分、統(tǒng)計結果等,通過本系統(tǒng),可以將以上考試的全部流程,完全借助計算機系統(tǒng)來實現(xiàn),從而減輕教師的工作負擔及提高工作效率,與此同時也提高了考試的質量,使考試更趨于公證、客觀、科學性進一步的激發(fā)了學生的學習興趣。系統(tǒng)需求分析SMART系統(tǒng)框架在實現(xiàn)上要求采用在J2EE領域中比較流行的SSH框架組合方式,并結合系統(tǒng)自身的一些特點來實現(xiàn)適合于本系統(tǒng)框架設計,該系統(tǒng)的一些非功能性的需求如下:可擴展性要求一般來說,軟件的可擴展性決定著其適應變更能力的大小。事后我們總是可以很容易地評價某個程序是可擴展的還是不可擴展的,但是要想使這個系統(tǒng)在今后真正派上用場,我們必須事先就對它有個判斷。一個系統(tǒng)一般都是要在不斷升級的過程中去結合用戶的需求來完善自身功能,因此該系統(tǒng)要求采用清晰的接口把對象的實現(xiàn)與它的交互分離開來,特定的實現(xiàn)就可以獨立于應用的其他部分,各個實現(xiàn)也可以在將來很方便地修改、升級甚至徹底替換。這時的應用不再是一個單獨的東西,而是一個系統(tǒng)中半獨立的組件。多個開發(fā)者可以在相互不破壞彼此成果或者甚至在不了解全局場景的情況下協(xié)同開發(fā)。組件提供了特定的功能,允許獨立地測試,也可以重用于多個應用中。如果組件之間工作分配及接口是很清晰的,這樣的軟件就很容易擴展??删S護性要求系統(tǒng)在開發(fā)完成以后,后期的維護也是一個項目中重要的一環(huán),包括為了滿足用戶的使用體驗對代碼所作的修改;對上線后長時間運行過程中所出現(xiàn)的BUG所作的修改等等這些需求,都是要求一個系統(tǒng)是具有可維護性的特性的??缮炜s性要求可伸縮性和性能是緊密相關的,但是它們并不完全相同。可伸縮性可以廣義地定義為應用在請求數(shù)目增長時維護性能的能力。在SMART系統(tǒng)中要求達到一個地市州級地區(qū)教育系統(tǒng)內的全體學生提供在線考試服務,并發(fā)數(shù)應在10000人以上。在本系統(tǒng)架構的中是采用分層的技術,這將可以很好的滿足可擴展性與可維護性的要求,但是各層之間的通信又反過來制約了伸縮性。因此,就要求我們在架構設計的時候使用有成效的實踐經驗來連接這些層次??煽啃砸罂煽康能浖谒袝r刻都會按照預期的那樣執(zhí)行。與可伸縮性類似,一個可靠的系統(tǒng)取決于對其底層組件的可預測性。從一個用戶的角度來看,可靠性是對整個系統(tǒng)的判斷,包括硬件、軟件和網絡元素。如果一個單獨的組件發(fā)生故障了,并且用戶無法訪問應用或者應用工作不正確了,那么整個系統(tǒng)就是不可靠的。在SMART系統(tǒng)中的需求中,可靠性是首當其沖的,特別體現(xiàn)在考試的過程中。如果在考試的過程中系統(tǒng)出問題了,或者在考試后的閱卷中系統(tǒng)算錯分了,這都將是災難性的錯誤,從而導致嚴重的后果。因此,保證SMART系統(tǒng)的可靠性的至關重要的。系統(tǒng)開發(fā)環(huán)境及實現(xiàn)關鍵技術硬件環(huán)境CPU:AMDSempron(tm)2500+內存:1G硬盤:80G軟件環(huán)境操作系統(tǒng):MicrosoftWindowsServer2003顯示設置:SAMSUNGSyncMaster795MB應用軟件:SQLServer2000+Eclipse3.1.2+JDK1.5+ApacheTomcat5.5.15系統(tǒng)實現(xiàn)的關鍵技術AJAX技術AJAX全稱為“AsynchronousJavaScriptandXML”(異步JavaScript和XML),該技術并不是一種新的技術,實際上是多種技術的綜合,包括JavaScript、XHML和CSS、DOM、XMLXSL和XMLHttpRequest。其中使用XHML和CSS作為標準化的呈現(xiàn),使用XMLHttpRequest作為異步數(shù)據(jù)的讀取,使用JavaScript綁定和處理所有數(shù)據(jù)。在AJAX提出之前,業(yè)界對于上述技術都只是單獨的使用,沒有綜合使用,也是由于之前的技術需求所決定的。與傳統(tǒng)的Web應用不同,AJAX采用異步交互過程。AJAX在用戶與服務器之間引入一個中間媒介,從而消除了網絡交互過程中的處理-等待-處理-等待缺點。用戶的瀏覽器在執(zhí)行任務時即裝載了AJAX引擎。AJAX引擎用JavaScript語言編寫,通常藏在一個隱藏的框架中。它負責編譯用戶界面及與服務器之間的交互。AJAX引擎允許用與應用軟件之間的交互過程異步進行,獨立于用戶與網絡服務器間的交流?,F(xiàn)在,可以用JavaScript調用AJAX引擎來代替產生一個HTTP的用戶動作,內存中的數(shù)據(jù)編輯、頁面導航、數(shù)據(jù)校驗這些不需要重新載入整個頁面的需求可以交給AJAX來執(zhí)行。圖1Ajax的web應用模型單例模式單例模式作為設計模式中的創(chuàng)建模式類型中的一種,從其名字可以看出該模式確保了一個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。這類稱為單例類。單例模式具有以下的特點:單例類只可有一個實例。單例類必須自己創(chuàng)建自己這惟一的實例。單例類必須給所有其他對象提供這一實例。在Java中單例模式一般有三種實現(xiàn)其分別為:餓漢式單例類;懶漢式單例類;登記式單例類。餓漢式單例類:餓漢式單例類是在Java語言里實現(xiàn)得最為簡便的單例類,下面所示的類圖描述了一個餓漢式單例類的典型實現(xiàn)。圖2餓漢式單例類類圖從類圖中可以看出,在這個類被加載時,靜態(tài)變量m_instance會被初始化,此時類的私有構造子會被調用。這時候,單例類的惟一實例就被創(chuàng)建出來了。Java語言中單例類的一個最重要的特點是類的構造子是私有的,從而避免外界利用構造子直接創(chuàng)建出任意多的實例。值得指出的是,由于構造子是私有的,因此,此類不能被繼承。懶漢式單例類:與餓漢式單例類相同之處是,類的構造子是私有的。與餓漢式單例類不同的是,懶漢式單例類在第一次被引用時將自己實例化。如果加載器是靜態(tài)的,那么在懶漢式單例類被加載時不會將自己實例化。如圖3所示,類圖中給出了一個典型的懶漢式單例類實現(xiàn)。圖3懶漢式單例類類圖登記式單例類:登記式單例類是GoF為了克服餓漢式單例類及懶漢式單例類均不可繼承的缺點而設計的。在本例中把他們的例子翻譯為Java語言,并將它自己實例化的方式從懶漢式改為餓漢式。只是它的子類實例化的方式只能是懶漢式的,這是無法改變的。如圖4所示是登記式單例類的一個例子,圖中的關系線表明,此類已將自己實例化。圖4登記式單例類IoC模式IoC(InversionofControl)模式又稱DI(依賴注入),從GoF設計模式中,我們已經習慣一種思維編程方式:InterfaceDrivenDesign接口驅動,接口驅動有很多好處,可以提供不同靈活的子類實現(xiàn),增加代碼穩(wěn)定和健壯性等等,但是接口一定是需要實現(xiàn)的,也就是如下語句遲早要執(zhí)行:AInterfacea=newAInterfaceImp();AInterfaceImp是接口AInterface的一個子類,IoC模式可以延緩接口的實現(xiàn),根據(jù)需要實現(xiàn),打個比喻:接口如同空的模型套,在必要時,需要向模型套注射石膏,這樣才能成為一個模型實體,因此,將人為控制接口的實現(xiàn)成為“注射”。其實IoC模式也是解決調用者和被調用者之間的一種關系,上述AInterface實現(xiàn)語句表明當前是在調用被調用者AInterfaceImp,由于被調用者名稱寫入了調用者的代碼中,這產生了一個接口實現(xiàn)的原罪:彼此聯(lián)系,調用者和被調用者有緊密聯(lián)系,在UML中是用依賴Dependency表示。但是這種依賴在分離關注的思維下是不可忍耐的,必須切割,實現(xiàn)調用者和被調用者解耦,新的IoC模式DependencyInjection模式由此產生了,DependencyInjection模式是依賴注射的意思,也就是將依賴先剝離,然后在適當時候再注射進入。JAVA反射機制“反射”是Java程序開發(fā)語言的特征之一,它允許運行中的Java程序對自身進行檢查,或者說“自審”,并能直接操作程序的內部屬性。Java的反射機制是使其具有動態(tài)特性的非常關鍵的一種機制,這個機制允許程序在運行時透過ReflectionAPIs取得任何一個已知名稱的class的內部信息,包括其modifiers(諸如public,static等等)、superclass(例如Object)、實現(xiàn)之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于運行時改變fields內容或喚起methods。JSP自定義標簽要在JSP中實現(xiàn)自定義標簽,那么要求必須實現(xiàn)一個相應的標簽處理類及寫該標簽的TLD文件,在JSP中一個自定義的action也就是對tag處理類,是基于一個bean類型的類,該類里面伴隨的getter/setter方法對應于tag中的屬性。另外這個taghandler類還必須要實現(xiàn)JSP規(guī)范中與tag相關的三個接口中的一個。這三個接口如下所示:TagIterationTagBodyTagIterationTag繼承了Tag,BodyTag繼承了IterationTag在API中提供的兩個類使開發(fā)自定義的標簽變得容易,它們分別為TagSupport、BodyTagSupport。TagSupport實現(xiàn)了Tag與IterationTag的接口,而BodyTagSupport除了實現(xiàn)了那兩個接口外還實現(xiàn)了BodyTag接口。圖5展現(xiàn)了整個標簽處理過程:圖5標簽處理的生命周期系統(tǒng)總體框架設計總體結構說明圖6系統(tǒng)總體框架示意圖表現(xiàn)層如圖1所示,在整個SMART系統(tǒng)的總體框架中表現(xiàn)層是結合J2EE領域的開源框架Struts來實現(xiàn)的,Struts能充分滿足應用開發(fā)的需求,簡單易用,該框架是基于MVC模式的來構建的,該模式將表達層分解為自包含的和可重用的幾個部分,當用戶通過瀏覽器發(fā)起HTTP請求時,該框架將利用其ActionForm將請求頁面的非對象化的數(shù)據(jù)轉化為對象,交由其對應Action來處理。基于MVC模式的整個交互的序列圖如圖7所示:圖7MVC模式中的交互開發(fā)人員利用該框架進行開發(fā)時,不用再自己實現(xiàn)全套MVC模式,節(jié)省了大量的開發(fā)時間。業(yè)務層如圖1所示,在表現(xiàn)層與業(yè)務層之間利用一個公共代理類來完成交互,該代理類采用單例模式設計開發(fā),在整個框架中起到了如下幾點作用:減少耦合性避免生成大量的臨時對象在該代理類,實現(xiàn)一個對相應業(yè)務邏輯的處理方法,該方法的參數(shù)為一個封裝好相應的頁面數(shù)據(jù)對象、要調用的業(yè)務類的名稱及該業(yè)務類中相應的處理方法名的類。在該層中利用了Spring框架中的IoC模式(英文全名為InversionofControl即反轉模式),該模式類似于著名的好萊塢原則:“Don'tcallus,we'llcallyou”,后被MartinFowler改名為DependencyInjection依賴注射,也就是將類之間的關系通過第三方進行注射,不需要類自己去解決調用關系,實現(xiàn)了調用者和被調用者之間的解耦分離。IoC的引入并沒有消除接口與實現(xiàn)類之間的聯(lián)系,它的實質在于只是將這種聯(lián)系轉移了。在Spring的IoC實現(xiàn)中這關系被轉移到相應的XML配置文件中,由Spring框架來提供對這種關系的依賴注入。其原理如圖8所示:圖8IoC模式在Spring中的依賴注入持久層在SMART系統(tǒng)的整體框架中的持久層,是采用基于現(xiàn)有持久層框架的實現(xiàn)模式,在這種模式中,將最為繁瑣的基于JDBC的OR映射工作,交由第三方組件(本框架中采用開源的Hibernate)來完成,這樣就會在對數(shù)據(jù)訪問對象進行編碼時,大大的簡化了一些繁瑣而又復雜的編碼工作,只需要利用Hibernate提供的API,對持久化對象進行操作。在該持久層框架提供了優(yōu)秀的性能優(yōu)化機制,如內置的數(shù)據(jù)庫連接池支持,PreparedStatement緩存、數(shù)據(jù)緩存等。這些優(yōu)化機制的綜合使用大大提升了系統(tǒng)的性能。在SMART系統(tǒng)的持久層中,對一些常用的添加、刪除、更新數(shù)據(jù)庫操作進行了抽象封裝。并在Hibernate中配置相應的數(shù)據(jù)庫連接池實現(xiàn)。圖9基于現(xiàn)有持久層框架的實現(xiàn)模式總體結構設計與建模公共代理機制的設計在大部分采用B/S結構的web應用中,用戶與系統(tǒng)的交互都是要涉及到相應的交互數(shù)據(jù)、業(yè)務邏輯,因此在本系統(tǒng)的框架設計中考慮到將這些交互中涉及到的因素全部封裝到一個Carrier類中,再通過一個單例類來實現(xiàn)表現(xiàn)層與業(yè)務層的交互,這樣用戶操作時不用每次都去new一個臨時的對象,也實現(xiàn)各功能模塊中子程序之間的解耦。系統(tǒng)接口設計Java程序設計語言提供了兩種機制,可以用來定義一個允許多個實現(xiàn)的類型:接口和抽象類。兩種機制之間最明顯的區(qū)別是,抽象類允許包含某些方法的實現(xiàn),但是接口是不允許的。一個更為重要的不同之處在于,為了實現(xiàn)一個由抽象類定義的類型,它必須成為抽象類的一個子類。任何一個類,只要它定義了所有要求的方法,并且遵守通用約定,那么它就允許實現(xiàn)一個接口,不管這個類位于類層次的哪個地方。因為Java只允許單繼承,所以,抽象類作為類型定義受到了極大的限制。接口使得我們可以構造出非層次結構的類型框架。例如:假設有一個接口代表一個singer(歌唱家),另一個接口代表一個songwriter(作曲家):publicinterfaceSinger{AudioClipSing(Songs);}publicinterfaceSongWriter{Songcompose(booleanhit);}在現(xiàn)實生活中,有些歌唱家本身也是作曲家。因為是使用接口而不抽象類來定義這些類型,所以對于一個類而言,它同時實現(xiàn)Singer和Songwriter是完全允許的。實際上還可以定義第三個接口,它同時擴展了Singer和Songwriter,并且加入一些適合于這種組合的新方法:publicinterfaceSingerSongwriterextendsSinger,Songwriter{AudioClipstrum();VoidactSensitive();}如果要滿足這樣的一種靈活性,抽象類是不可能完成的。雖然接口不允許包含方法的實現(xiàn),但是,使用接口定義類型并不妨礙你為程序員提供實現(xiàn)上的幫助,在本系統(tǒng)的接口設計與實現(xiàn)中借鑒了JavaAPI中的將接口類與抽象類的優(yōu)點結合起來,將期望導出的每一個重要接口,都提供一個抽象類的骨架實現(xiàn)(skeletalimplementation)類。按照慣有編碼命名習慣,將該骨架實現(xiàn)類命名為AbstractInterface在該系統(tǒng)中采用這種方式的來設計的接口有Business(業(yè)務)接口,DAO(數(shù)據(jù)訪問對象)接口。自定義標簽的設計在對系統(tǒng)的實現(xiàn)中,由于在表現(xiàn)層使用的是基于MVC的Struts框架,該框架中為了在表現(xiàn)層的JSP頁面中不混合大量的Java代碼,及保持JSP頁面的程序的容易讀性而提供了相應的Struts自己的一套標簽,但是考慮到本系統(tǒng)的實際應用的功能實現(xiàn)。且這些功能實現(xiàn)又是Struts標簽沒法滿足要求的,因此在該系統(tǒng)框架中實現(xiàn)了自己的一套標簽,主要有<smart:submit></smart:submit>,<smart:select></smart:select>。<smart:submit>標簽:設計意圖:在一般的基于B/S結構的web應用系統(tǒng)中,在頁面上經常是會涉及到添加、編輯、刪除幾種常用的功能,在早期的一些開發(fā)編碼中,相當一部分人是將這幾種功能分為多個頁面來實現(xiàn),例如:添加用一個add.jsp頁面,編輯用一個edit.jsp頁面,刪除用一個delete.jsp頁面。而這些的頁面的代碼80%以上都基本上是一樣的,只不過是上顯示的按鈕及在點擊相應的提交給后臺處理方法不一樣。為了達到在一個頁面上面實現(xiàn)添加、編輯、刪除功能,并且要保持頁面代碼的清晰可讀性,因此,在本系統(tǒng)框架中,封裝了自定義的提交標簽。表1<smart:submit>標簽屬性列表屬性名稱屬性描述備注Id該標簽元素的id。Name該標簽元素的名稱。Property當點擊該標簽所顯示的內容后所提交的參數(shù)名稱Message該標簽在頁面上所顯示的值,等同于html標簽組里面的input標簽的value屬性。displayControl是否要對該標簽的內容是否在頁面上顯示出來作控制。只有兩種值true/falseImage該標簽在頁面顯示的內容的背景圖片。onClick當點擊該標簽所展現(xiàn)的內容后所觸發(fā)的事件。<smart:select>標簽:設計意圖:在一般的基于B/S結構的web應用系統(tǒng)中,在頁面上經常要用到下拉框,且在JSP頁面加載出來時就有一組相應的值,為了在加載該頁面時動態(tài)的、帶條件的取其標簽相應的鍵/值對,因此,在本系統(tǒng)框架中,封裝了自定義的下拉菜單。表2<smart:select>標簽屬性列表屬性名稱屬性描述備注name該標簽元素的名稱。property該標簽元素屬性名稱,與Struts中的html標簽的property元素是一樣的含義,對應于FormBean里面的一個域。content該標簽屬性為標簽取值的業(yè)務代碼。multiple該屬性同html標簽組中的select標簽的multiple屬性。size該屬性同html標簽組中的select標簽的size屬性。style該屬性同html標簽組中的select標簽的style屬性。relationValue該屬性為在加載該標簽相應的值時的條件。基于Struts表現(xiàn)層設計大部分基于B/S結構的web應用系統(tǒng)中,在頁面上經常會出現(xiàn)一個以上的功能按鈕,而這些功能按鈕基本上都是對應于后臺的一個操作實現(xiàn),由于在本系統(tǒng)中的表現(xiàn)層選用較為成熟Struts框架,該框架中最為核心的部分要屬控制器控制轉發(fā)相應的HttpRequest,其中的LookupDispatchAction類是允許你指定一個具有多個方法的類,每一個方法的調用都基于配置文件中指定的一個特殊請求參數(shù)值,利用該參數(shù)值反向查詢資源綁定,并將它與類中的一個方法進行匹配。從這些功能可以看出Struts是滿足對系統(tǒng)頁面上多個功能按鈕與實現(xiàn)的綁定。因此,在對本系統(tǒng)進行架構設計的時候,考慮建立一個抽象的BaseAction類,該類繼承LookupDispatchAction,實現(xiàn)LookupDispatchAction類中的getKeyMethodMap方法,在方法中返回本系統(tǒng)中請求參數(shù)值與資源文件中參數(shù)值的鍵/值對。實現(xiàn)一些對于所有的Action都是有可能用到的公共方法,包括從session中得到用戶的信息;對頁面上按鈕是否顯示的控制;檢查用戶權限;對公共業(yè)務邏輯接口的調用等等。在涉及到系統(tǒng)的具體開發(fā)實現(xiàn)的時候,要求所有開發(fā)人員在寫自己的Action的時候統(tǒng)一繼承BaseAction?;贖ibernate持久層設計本系統(tǒng)的持久層是基于開源的Hibernate來實現(xiàn)的,在了解到相關的Hibernate特性后,在本系統(tǒng)的框架中,從如下幾個方面對其進行了進一步的封裝。對產生Session實例進行封裝設計意圖:Session是Hibernate持久化操作的基礎。注意這里Session的含義,它與傳統(tǒng)意義上的Web層的HttpSession并沒有什么關系。HibernateSession之與Hibernate,相當于JDBCConnection與JDBC。Session作為貫穿Hibernate的持久化管理器核心,提供了眾多持久化方法,如save、update、delete,find等。通過這些方法即可透明地完成對象的增刪改查(CRUD)。但是值得注意的是,HibernateSession的設計是非線程安全的,也就是說,一個Session實例同時只可由一個線程使用,同一個Session實例的多線程并發(fā)調用將導致難以預知的錯誤。因此在本框架中對通過SessionFactory所產生的Session。進行了線程安全性的處理,在實現(xiàn)的HibernateSessionFactory類新建一個Java中的ThreadLocal類,將每次產生Session放入該類中,這樣就達到了線程安全性的效果了。當產生Session而創(chuàng)建SessionFactory實例時,也要注意對SessionFactory重用的問題,因為SessionFactory中保存了對應當前數(shù)據(jù)庫配置的所有映射關系,同時也負責維護當前的二級緩存和StatementPool。由此可見,SessionFactory的創(chuàng)建過程必然非常復雜、代價高昂,而這也意味,在系統(tǒng)設計中要充分考慮到SessionFactory的重用策略。由于SessionFactory采取了線程安全的設計,可由多個線程并發(fā)調用,大多數(shù)情況下,一個應用中針對一個數(shù)據(jù)庫共享一個SessionFactory實例即可。對通常的數(shù)據(jù)庫操作進行封裝設計意圖: 在系統(tǒng)的設計架構中考慮到代碼的重用性,因此對一些通用的數(shù)據(jù)庫的操作都將其封裝到一個公共類中,這樣就減少了系統(tǒng)開發(fā)人員的代碼編寫工作量,也避免了同功能代碼的重復編寫。類圖圖10公共數(shù)據(jù)傳輸類圖11公共代理類圖12表現(xiàn)層基于Ajaxtags的servlet實現(xiàn)類圖13表現(xiàn)層的基本Action類圖14持久化對象接口圖15表現(xiàn)層自定義標簽相關實現(xiàn)類圖16系統(tǒng)相關異常處理類圖17異常處理工具類圖18數(shù)據(jù)訪問對象、業(yè)務相關接口及其實現(xiàn)類、對數(shù)據(jù)庫操作及日志類圖19日期工具類序列圖圖20用戶與系統(tǒng)交互的序列圖系統(tǒng)總體框架具體實現(xiàn)各層具體實現(xiàn)表現(xiàn)層在本系統(tǒng)中的表現(xiàn)層實現(xiàn)了一個抽象的BaseAction類,該類繼承LookupDispatchAction,實現(xiàn)LookupDispatchAction類中的getKeyMethodMap方法,在方法中返回本系統(tǒng)中請求參數(shù)值與資源文件中參數(shù)值的鍵/值對。實現(xiàn)一些對于所有的Action都是有可能用到的公共方法。部分代碼如下所示:publicabstractclassBaseActionextendsLookupDispatchAction{//實現(xiàn)父類的方法 protectedMapgetKeyMethodMap(){ Mapmap=newHashMap(); map.put("button.save","save"); map.put("button.cancel","cancel"); ….. returnmap; }//統(tǒng)一的業(yè)務邏輯調用方法 protectedObjectcall(Carriervo){PublicProxyproxy=PublicProxy.getInstance();Objectobj=null;try{obj=cess(vo);}catch(ApplicationExceptionex){throwex;}returnobj;}//顯示頁面按鈕 protectedvoidshowButton(StringbuttonName){MapbtnMap=getButtonMap();btnMap.put(buttonName,"true");}//隱藏頁面按鈕protectedvoidhideButton(StringbuttonName){MapbtnMap=getButtonMap();btnMap.put(buttonName,"false");}…………………}業(yè)務層在本系統(tǒng)中的業(yè)務層實現(xiàn)了一個單例的PublicProxy類,系統(tǒng)中所有的表現(xiàn)層與業(yè)務層的交互都要通過這個類來實現(xiàn)。該類結合了Spring框架的相應的API對業(yè)務接口與其實現(xiàn)的對應關系的xml文件進行了解析,詳見下面的類中的process方法中對xml文件的讀取。publicclassPublicProxy{privatestaticPublicProxyinstance=null;privatestaticObjectlock=newObject();privatePublicProxy(){}//返回唯一的實例publicstaticPublicProxygetInstance(){if(instance==null){synchronized(lock){if(instance==null){instance=newPublicProxy();}}}returninstance;}//相應的業(yè)務處理公共接口publicObjectprocess(Carrieraop){Businessbusiness=null;ApplicationContextcontext=newClassPathXmlApplicationContext("beans/*.xml");business=(Business)context.getBean(aop.getBusiness());returncess(aop);}}持久層本系統(tǒng)的持久層是基于開源的Hibernate來實現(xiàn)的,結合Hibernate提供的API提供相應實現(xiàn)的部分代碼如下所示:publicclassHibernateSessionFactory{…privatestaticfinalThreadLocalthread=newThreadLocal();//打開一個新的sessionpublicstaticSessionopenSession(booleanuseCurrent){Sessionsession=null;if(useCurrent&&thread.get()!=null){session=(Session)thread.get();}if(session==null){try{if(factory==null){factory=newConfiguration().configure(CONFIG_FILE_LOCATION).buildSessionFactory();}session=factory.openSession();//將session放入ThreadLocal中實現(xiàn)線程安全性設計thread.set(session);}catch(HibernateExceptionex){ex.printStackTrace();}}returnsession;}………………}測試與分析測試環(huán)境本次測試的環(huán)境的硬件環(huán)境與系統(tǒng)的開發(fā)環(huán)境中的硬件環(huán)境相一致,只是在軟件環(huán)境中用了開源的ApacheJmeter,它是一個100%的純java桌面應用,用于壓力測試和性能測量。它最初被設計用于Web應用測試但后來擴展到其他測試領域。測試結果在本次測試中,用Jmeter作了相應的壓力測試,其他的測試都是通過手工寫程序完成各層的功能測試,在通過對Jmeter的在用戶數(shù)、循環(huán)次數(shù)的配置,對本系統(tǒng)框架作的幾次壓力測試。壓力測試部分結果如下:用Jmeter模擬了1000個用戶并發(fā)一次請求,循環(huán)5次后的結果圖如下:圖21JMeter測試結果圖用Jmeter模擬了5000個用戶并發(fā)一次請求,循環(huán)5次后的結果圖如下:圖22JMeter測試結果圖結果分析在對本系統(tǒng)進行的各層的功能測試中,在分層測試的時候,各層程序功能運行正常,對各層功能的銜接測試也達到了很好運行效果,從功能上、性能上都能夠滿足系統(tǒng)需求分析中的要求。在對本系統(tǒng)進行的壓力測試中,從JMeter測試結果圖顯示的樣本數(shù)目、平均、偏離、吞吐量、中值的數(shù)值可以看出本系統(tǒng)是滿足可伸縮性、可靠性要求的。結論通過本次課題的研究,在結合J2EE領域比較優(yōu)秀成熟
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學年度學校道德講堂工作計劃范文
- 高一語文學習計劃
- gfc樁施工合同范本
- 光伏設計EMC合同范本
- 三角梅購銷合同范本
- 產品委托開發(fā)合同范本
- 申請法院調查申請書
- 2025至2030年中國紅棗蓮子黑芝麻糊數(shù)據(jù)監(jiān)測研究報告
- 進駐商場申請書
- 2025年快捷型干體式溫度校準儀項目可行性研究報告
- 紅樓夢詩詞全集
- 像科學家一樣思考-怎么做-怎么教-
- 苯胺合成靛紅工藝
- 三年級上冊數(shù)學脫式計算大全600題及答案
- 2024年度農村電子商務ppt演示課件
- 計算機控制系統(tǒng) 課件 第10章 網絡化控制系統(tǒng)的分析與設計
- 高原反應的癥狀和處理方法
- 南京大學儀器分析習題集
- 空調維保應急預案
- 2023年高考語文全國乙卷作文范文及導寫(解讀+素材+范文)課件版
- 模塊建房施工方案
評論
0/150
提交評論