版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 學(xué)位論文作者:學(xué)生的親筆2006 年 5 月 12 日摘要隨著網(wǎng)絡(luò)技術(shù)的迅速發(fā)展和 J2EE 平臺(tái)的廣泛應(yīng)用,基于 B/S 的多層 WEB 體系結(jié)構(gòu)正在不斷的完善。WEB 技術(shù)的發(fā)展推動(dòng)了信息化的發(fā)展,使人們能夠不再受地理空間的限制與其他人進(jìn)行信息的交流與共享。而開(kāi)發(fā)這樣一個(gè)信息交流平臺(tái),正是本論文要著手處理的問(wèn)題。其實(shí),就算用 Java 建造一個(gè)不是很煩瑣的 web 應(yīng)用程序,也不是件輕松的事情。當(dāng)為一個(gè)應(yīng)用程序建造一個(gè)構(gòu)架時(shí)有許多事情需要考慮。從高層來(lái)說(shuō),開(kāi)發(fā)者需要考慮:怎樣建立用戶接口(userinterfaces)?在哪里處理業(yè)務(wù)邏輯?和怎樣持久化應(yīng)用數(shù)據(jù)。這三層每一層都有它們各自的
2、問(wèn)題需要回答。各個(gè)層次應(yīng)該使用什么技術(shù)?怎樣才能把應(yīng)用程序設(shè)計(jì)得松耦合和能靈活改變?構(gòu)架允許層的替換不會(huì)影響到其它層嗎?應(yīng)用程序怎樣處理容器級(jí)的服務(wù)(containerlevelservices),比如事務(wù)處理(transactions)?本論文正是基于上述問(wèn)題出發(fā),以開(kāi)發(fā)一個(gè)信息交流平臺(tái)系統(tǒng)為背景,對(duì)基于 MVC 模式的 Struts 框架、Hibernate 的 ORM 機(jī)制和對(duì)持久對(duì)象持久化的管理以及 SpringIoC(控制反轉(zhuǎn))技術(shù)進(jìn)行了探討。并整合這三種框架:表現(xiàn)層使用 Struts;業(yè)務(wù)層使用 Spring;持久層使用 Hibernate 進(jìn)行系統(tǒng)的開(kāi)發(fā)。最后結(jié)合具體的事例對(duì)系統(tǒng)
3、的實(shí)現(xiàn)作了詳細(xì)的說(shuō)明,驗(yàn)證了實(shí)現(xiàn)方法的可行性。關(guān)鍵詞:J2EEStrutsHibernateSpring 模式框架Abstract WiththerapiddevelopmentofnetworktechnologyandthewideuseofJ2EEplatform,themultilayerwebstructurebaseonB/Shasdevelopedgradually.WEBtechniquesdevelopmenthaspromotedthedevelopmentofinformationization,ithasmadepeoplecanmunicateandshareinfo
4、rmationwithoutareaandspacelimitation.However,developingsuchkindofinformationmunicationplatformisjustthecaseinthisthesis.Buildingnon-trivialwebapplicationswithJavaisnotrivialtask.Therearemanythingstoconsiderwhenstructuringarchitecturetohouseanapplication.Fromahigh-level,developersarefacedwithdecision
5、sabouthowtheyaregoingtoconstructuserinterfaces,wherethebusinesslogicwillreside,andhowtopersistapplicationdata.Eachofthesethreelayershastheirownquestionstobeanswered.Whattechnologiesshouldbeimplementedacrosseachlayer?Howcantheapplicationbedesignedsothatitislooselycoupledandflexibletochange?Doesthearc
6、hitectureallowlayerstobereplacedwithoutaffectingotherlayers?Howwilltheapplicationhandlecontainerlevelservicessuchastransactions?Thisthesisisjustbaseonthesequestions,takinganinformationmunicationplatformsystemdevelopmentasbackground,basedonMVCarchitecture,discussedStrutsframe,HibernatorsORMmechanism,
7、persistentmanagementofpersistentobjectandSpringIoCtechniqueandbiningframeworksusingthreepopularopensourceframeworks:ForthepresentationlayerwewilluseStruts;forourbusinesslayerwewilluseSpring;andforourpersistencelayerwewilluseHibernate todevelopingthissystem.Attheendofthethesis,illustratethewayofreali
8、zingthesystembyaninstance,andvalidateitsfeasibility.Keywords:J2EEStrutsHibernateSpringPatternFramework目錄摘要Abstract第一章引言 11.1 研究目的和意義 11.2 研究?jī)?nèi)容 21.3 論文的章節(jié)安排 2第二章 Struts 框架分析 32.1MVC 模式介紹 32.2JSPModel142.3JSPModel242.4Struts 概述 52.5Struts 核心組件 62.6Struts 的工作流程 7第三章 Hibernate 技術(shù)介紹 93.1Hibernate 概述 93.2
9、ORM 介紹 93.3Hibernate 的核心接口 103.4Hibernate 的檢索方式 12 第四章 Spring 技術(shù)介紹 144.1Spring 框架概述 144.2SpringIoC(Inversionofcontrol)164.3SpringAOP17第五章 ICPS 系統(tǒng)的設(shè)計(jì) 205.1 系統(tǒng)簡(jiǎn)介 205.2 系統(tǒng)需求分析 205.3 框架設(shè)計(jì) 215.4 數(shù)據(jù)庫(kù)設(shè)計(jì) 245.5 模塊設(shè)計(jì) 28第六章 ICPS 系統(tǒng)的實(shí)現(xiàn) 306.1 域模塊層的實(shí)現(xiàn) 306.2 持久層的實(shí)現(xiàn) 306.2.1O/R 映射 316.2.2DAO 數(shù)據(jù)訪問(wèn)接口 326.2.3DAO 數(shù)據(jù)訪問(wèn)實(shí)現(xiàn)
10、 336.3 業(yè)務(wù)層的實(shí)現(xiàn) 346.3.1 業(yè)務(wù)邏輯處理類的實(shí)現(xiàn) 356.3.2Spring 框架的配置 376.4 表示層的實(shí)現(xiàn) 396.4.1View 層的實(shí)現(xiàn) 406.4.2Model 層的實(shí)現(xiàn) 426.4.3Controller 層的實(shí)現(xiàn) 43 6.5 小結(jié) 46第七章總結(jié)與展望 477.1 本文的總結(jié)與展望 47參考文獻(xiàn) 48致謝 50第一章引言1.1 研究目的和意義從來(lái)沒(méi)有任何事物的發(fā)展像互聯(lián)網(wǎng)那樣,對(duì)人類的活動(dòng)產(chǎn)生如此深刻的影響。人們?cè)絹?lái)越依賴于 Internet 進(jìn)行信息的交流與共享。隨著網(wǎng)絡(luò)的飛速發(fā)展,信息交流平臺(tái)在網(wǎng)絡(luò)上扮演角色越來(lái)越重要了。信息交流平臺(tái)從她誕生的那一刻起就
11、帶有十分明確的個(gè)性化的人文色彩,作為一種遠(yuǎn)程電子通訊手段,信息交流平臺(tái)允許一定范圍內(nèi)的用戶以十分廉價(jià)的方式,方便快捷地進(jìn)行信息和文件資源的共享,以信件和電子討論的形式進(jìn)行交流。毫不夸張的說(shuō),信息交流平臺(tái)是網(wǎng)民互動(dòng)交流的最佳紐帶,是互聯(lián)網(wǎng)的靈魂。信息交流平臺(tái)已成為主流網(wǎng)民不可缺少的一項(xiàng)基本生活內(nèi)容。它在新興的電子文化、信息咨詢和商業(yè)服務(wù)領(lǐng)域也勢(shì)必蘊(yùn)藏巨大的市場(chǎng)。比如信息交流平臺(tái)提供的信息布告區(qū)可為企業(yè)發(fā)布它的產(chǎn)品介紹、推廣、宣傳、服務(wù)等信息,能把企業(yè)的新產(chǎn)品快速的推向市場(chǎng)。所以對(duì)信息交流平臺(tái)的研究是完全有必要的。J2EE 是 SunONE 的重量級(jí)產(chǎn) 品,作為一種企業(yè)級(jí) Web 應(yīng)用程序開(kāi)發(fā)技術(shù)
12、,J2EE 是目前唯一在市場(chǎng)上得到了廣泛應(yīng)用的技術(shù)體系。J2EE 以 Java 為核心技術(shù),更接近或者滿足于互聯(lián)網(wǎng)在智能化 Web 服務(wù)上對(duì)分布性、開(kāi)放性和平臺(tái)無(wú)關(guān)性的要求,同時(shí)它在安全性、健壯性、組件化等方面也更為成熟穩(wěn)定,獲得了眾多 IT 廠商如 IBM、Oracle、BEA等配合制定標(biāo)準(zhǔn)并提供技術(shù)支持,因此具有強(qiáng)大的效用,是電子商務(wù)、遠(yuǎn)程教育等開(kāi)發(fā)的首選平臺(tái)。但是,即使我們用先進(jìn)的 J2EE 來(lái)開(kāi)發(fā) Web 應(yīng)用,也面臨著許多問(wèn)題需要考慮:怎樣建立用戶接口(userinterfaces)? 在 哪 里 處 理 業(yè) 務(wù) 邏 輯 和 怎 樣 持 久 化 應(yīng) 用 數(shù) 據(jù) ? Struts 、
13、Spring 、Hibernate 這三個(gè)基于 WEB 應(yīng)用開(kāi)發(fā)的開(kāi)源框架,可以為我們解決這些問(wèn)題。如何把一個(gè) WEB 應(yīng)用分層而整合 Struts、Spring、Hibernate 技術(shù),盡可能的將頁(yè)面顯示、業(yè)務(wù)邏輯和數(shù)據(jù)處理相分離,最大限度地降低系統(tǒng)各模塊之間的耦合性,從而增強(qiáng)系統(tǒng)的可擴(kuò)展性與可維護(hù)性,提高代碼重用率,使系統(tǒng)的層次結(jié)構(gòu)更加清晰,易于開(kāi)發(fā)人員的分工協(xié)作,充分發(fā)揮開(kāi)發(fā)人員的各自特長(zhǎng),這是一個(gè)值得研究探討的問(wèn)題。Struts 是基于 MVC 模式的框架技術(shù)。采用 Struts 可以簡(jiǎn)化遵循 MVC 設(shè)計(jì)模式的 Web 應(yīng)用的開(kāi)發(fā)工作,很好的實(shí)現(xiàn)代碼重用,使開(kāi)發(fā)人員從繁瑣的工作中解
14、脫出來(lái),快速開(kāi)發(fā)具有強(qiáng)可擴(kuò)展性的 Web 應(yīng)用,大大簡(jiǎn)化開(kāi)發(fā)過(guò)程,縮短開(kāi)發(fā)周期,提高開(kāi)發(fā)效率。Hibernate 是一項(xiàng)新興的 ORM 技術(shù),它把普通 java對(duì)象映射到關(guān)系數(shù)據(jù)庫(kù)表,并提供對(duì)對(duì)象的持久化操作。使得 Java 開(kāi)發(fā)者能夠高效地對(duì)關(guān)系數(shù)據(jù)庫(kù)表進(jìn)行增、刪、改、查操作而不用直接面對(duì) JDBC、SQL 語(yǔ)句,讓開(kāi)發(fā)人員把精力集中在如何解決實(shí)際業(yè)務(wù)處理問(wèn)題上。而借助于SpringIoC 和 AOP,使得應(yīng)用中對(duì)象的關(guān)系更加清晰、一致,而且還使得一切對(duì) 象可控。最重要的一點(diǎn)是,對(duì)象本身的生命周期及對(duì)象之間的關(guān)系不用再讓開(kāi)發(fā)者費(fèi)神了?;谏鲜龇治?研究實(shí)現(xiàn) Struts、Spring、Hib
15、ernate 三個(gè)框架的整合來(lái)解決Web 應(yīng)用開(kāi)發(fā)中所面臨的上述問(wèn)題,從而提高程序的開(kāi)發(fā)效率,增強(qiáng)系統(tǒng)的可擴(kuò)展性與可維護(hù)性,提高代碼重用率將會(huì)是一個(gè)很有意義的課題。1.2 研究?jī)?nèi)容以實(shí)現(xiàn)一個(gè)信息交流平臺(tái)為出發(fā)點(diǎn),設(shè)計(jì)了一個(gè)整合 Struts、Hibernate、Spring 技術(shù)的架構(gòu),把整個(gè)應(yīng)用系統(tǒng)分為四層:表示層,業(yè)務(wù)層,持久層,域模塊層。并分別用 Struts、Hibernate、Spring 實(shí)現(xiàn)了表示層,業(yè)務(wù)層,持久層,最終完成了本系統(tǒng)。1.3 論文的章節(jié)安排第一章引言部分對(duì)本文所要研究課題的研究目的及意義作了簡(jiǎn)要的闡述,說(shuō)明了課題的研究?jī)?nèi)容。第二章介紹了 MVC 設(shè)計(jì)模式及基于 M
16、VC 模式的 Struts 框架。對(duì) Struts 架構(gòu)的基本工作原理、核心組件的運(yùn)行機(jī)制以及其工作流程進(jìn)行了闡述。第三章介紹 Hibernate 技術(shù)。主要闡述了 ORM 映射機(jī)制、Hibernate 核心編程接口、Hibernate 的檢索方式。第四章介紹 Spring 框架。主要闡述了 Spring 框架的七個(gè)效用模塊以及SpringIoC、SpringAOP。第五章基于信息交流平臺(tái),在對(duì)其進(jìn)行需求分析的基礎(chǔ)上進(jìn)行了數(shù)據(jù)庫(kù)設(shè)計(jì)和模塊設(shè)計(jì),并設(shè)計(jì)了一個(gè)整合 Struts、Hibernate、Spring 技術(shù)的架構(gòu),對(duì)應(yīng)用 系統(tǒng)分層。第六章利用第五章所設(shè)計(jì)的 WEB 應(yīng)用開(kāi)發(fā)架構(gòu),實(shí)現(xiàn)了一
17、個(gè)信息交流平臺(tái)系統(tǒng)。并驗(yàn)證了所設(shè)計(jì)實(shí)現(xiàn)方法的正確性。第七章總結(jié)及下一步展望。第二章 Struts 框架分析作為對(duì)經(jīng)典的 MVC(Model-View-Controller,模型-視圖-控制器)設(shè)計(jì)模式的一種具體實(shí)現(xiàn),Struts 是建立在當(dāng)前 Web 開(kāi)發(fā)領(lǐng)域中 JSP、Servlet、XML 等相關(guān)開(kāi)發(fā)技術(shù)之上的一種主流的開(kāi)發(fā)架構(gòu),是一種基于 MVC 的經(jīng)典 MVC 設(shè)計(jì)模式框架。本章主要介紹了 MVC 設(shè)計(jì)模式、Struts 架構(gòu)的基本工作原理、核心組件以及 Struts 的工作流程。2.1MVC 模式介紹MVC 模式,即模型-視圖-控制器模式,其核心思想是將整個(gè)程序代碼分成相對(duì)獨(dú)立的而又
18、能協(xié)同工作的 3 個(gè)組成部分1,2。模型(Model):業(yè)務(wù)邏輯層。實(shí)現(xiàn)具體的業(yè)務(wù)邏輯、狀態(tài)管理的效用。視圖(View):表示層。即與用戶實(shí)現(xiàn)交互的界面,是應(yīng)用程序的外在表現(xiàn),通常實(shí)現(xiàn)數(shù)據(jù)的輸入和輸出效用???制 器 ( Controller ) : 控 制 層 。 起 到 控 制 整 個(gè) 業(yè) 務(wù) 流 程(FlowControl)的作用,實(shí)現(xiàn) View 和 Model 部分的協(xié)同工作。上述三個(gè)組成部分之間的關(guān)系如圖 2-1 所示。圖 2-1MVC 模式的結(jié)構(gòu) 在 MVC 設(shè)計(jì)模式中,事件一般是指客戶端 Web 瀏覽器提交的各種不同的請(qǐng)求,這些請(qǐng)求由控制器進(jìn)行處理,控制器根據(jù)事件的類型來(lái)改變模型
19、或各個(gè)視圖,視圖也可以接受模型發(fā)出的數(shù)據(jù)更新的通知,根據(jù)數(shù)據(jù)更新的結(jié)果調(diào)整視圖效果,展示給用戶。而模型也可以通過(guò)視圖所獲得的用戶提交的數(shù)據(jù)進(jìn)行具體業(yè)務(wù)邏輯的處理。2.2JSPModel1在 JSP 技術(shù)的發(fā)展初期,由于其便于快速開(kāi)發(fā)的優(yōu)點(diǎn),很快就成為創(chuàng)建 Web 應(yīng)用的熱門(mén)技術(shù)之一。在 JSP 頁(yè)面中可以很容易的同時(shí)實(shí)現(xiàn)內(nèi)容的顯示、業(yè)務(wù)邏輯的編寫(xiě)以及流程的控制,從而快速地完成應(yīng)用開(kāi)發(fā)。最初很多的 JavaWeb 應(yīng)用甚至全部由 JSP 頁(yè)面組成,這種以 JSP 為中心的開(kāi)發(fā)模型被稱為 Model1。其具體的實(shí)現(xiàn)方式如圖 2-2 所示。圖 2-2JSPModel1在 JSPModel1 中,JS
20、P 頁(yè)面負(fù)責(zé)接收處理客戶端 Web 瀏覽器發(fā)送的請(qǐng)求,并在處理后直接進(jìn)行響應(yīng)。正是由于 JSP 頁(yè)面本身同時(shí)充當(dāng)了 View 和 Controller 兩種角色,控制邏輯和表示層邏輯混雜在一起,導(dǎo)致代碼的可重用性和可擴(kuò)展性下降。2.3JSPModel2Model2 則是 MVC 設(shè)計(jì)模式的一種具體實(shí)現(xiàn)方式,如圖 2-3 所示。在 Model2 中采用 Servlet 作為控制器(Controller),負(fù)責(zé)接收客戶端 Web 瀏覽器發(fā)送來(lái)的所有請(qǐng)求,并根據(jù)處理的不同結(jié)果,轉(zhuǎn)發(fā)到對(duì)應(yīng)的 JSP 頁(yè)面(View)實(shí)現(xiàn)在瀏覽器客戶端的顯示。在 Servlet 中只包含了控制邏輯和一些簡(jiǎn)單的處理邏輯,
21、更加復(fù)雜的業(yè)務(wù)處理邏輯則借助特定的 JavaBean 具體實(shí)現(xiàn)。由于引入了 MVC 設(shè) 計(jì)模式,Model2 實(shí)際上是實(shí)現(xiàn)了基于組件的開(kāi)發(fā),在整個(gè)軟件開(kāi)發(fā)過(guò)程中實(shí)現(xiàn)了具體清晰的邏輯劃分,能夠有效的區(qū)分不同的角色,這就更適合于大規(guī)模系統(tǒng)的開(kāi)發(fā)和管理。圖 2-3JSPModel2Model2 實(shí)現(xiàn)了系統(tǒng)業(yè)務(wù)邏輯效用模塊、顯示模塊和數(shù)據(jù)持久層處理模塊的分離,同時(shí)還提高了應(yīng)用系統(tǒng)的可維護(hù)性、可擴(kuò)展性、可移植性和組件的可復(fù)用性。2.4Struts 概述作為基于 MVC 設(shè)計(jì)模式的 Web 應(yīng)用的一種典型體現(xiàn),Struts 架構(gòu)實(shí)際上是建立在 Model2 基礎(chǔ)之上的,對(duì) Model、View 和 Con
22、troller 都提供了現(xiàn)成組件,其實(shí)現(xiàn)方式如圖 2-4 所示。圖 2-4StrutsMVC 架構(gòu)從 Model 角度看,在 Struts 中,系統(tǒng)模型的狀態(tài)主要由 ActionFormBean 和值對(duì)象體現(xiàn)。從 View 角度看,Struts 提供了 java 類.ActionForm,Java 開(kāi)發(fā)者繼承該類來(lái)創(chuàng)建表單 bean。另一方面,Struts 提供了豐富的 JSP 標(biāo)記庫(kù),View 部分使用這些標(biāo)記庫(kù)可以實(shí)現(xiàn)與 Model 的有效交互并能增強(qiáng)顯示。從 Controller 角 度 看 , 在 Struts 體 系 機(jī) 構(gòu) 中 , Controller 主 要 是ActionSer
23、vlet,但是對(duì)于業(yè)務(wù)邏輯的操作則主要由 Action、ActionMapping、ActionForward 這幾個(gè)組件協(xié)調(diào)完成(也許這幾個(gè)組件,應(yīng)該劃分到模型中的業(yè)務(wù) 邏 輯 一 塊 ) 。 其 中 , Action 扮 演 了 真 正 的 控 制 邏 輯 的 實(shí) 現(xiàn) 者 , 而ActionMapping 和 ActionForward 則指定了不同業(yè)務(wù)邏輯或流程的運(yùn)行方向。 2.5Struts 核心組件對(duì)于 Struts 如何控制、處理客戶請(qǐng)求,讓我們通過(guò)對(duì) struts 的四個(gè)核心組件介紹來(lái)具體說(shuō)明。這幾個(gè)組件就是:ActionServlet,ActionClasses,ActionM
24、apping(包括 ActionForward),ActionFromBean。u StrutsActionServletActionServlet 繼承自.類,其在 Struts 框架中扮演的角色是中心控制器。它提供一個(gè)中心位置來(lái)處理全部的終端請(qǐng)求。控制器 ActionServlet 主要負(fù)責(zé)將HTTP 的客戶請(qǐng)求信息組裝后,根據(jù)配置文件的指定描述,轉(zhuǎn)發(fā)到適當(dāng)?shù)奶幚砥?。按?Servelt 的標(biāo)準(zhǔn),所有的 Servlet 必須在 web 配置文件()中聲明。同樣,ActoinServlet 必須在 WebApplication 配置文件()中描述。u StrutsActionClasses所
25、有的 Action 類都繼承自.Action,它是 Struts 架構(gòu)中控制器組件的重要組成部分。Action 類主要負(fù)責(zé)將客戶請(qǐng)求映射到處理這些請(qǐng)求的業(yè)務(wù)邏輯 Bean,再轉(zhuǎn)向生成響應(yīng)回送給客戶端的頁(yè)面,實(shí)際上充當(dāng)?shù)氖?Controller 和 Model 之間的一個(gè)適配器(Adaptor),其效用就是將請(qǐng)求與業(yè)務(wù)邏輯分開(kāi)。這樣的分離,使得客戶請(qǐng)求和 Action 類之間可以有多個(gè)點(diǎn)對(duì)點(diǎn)的映射。而且 Action 類通常還提供了其它的輔助效用,比如:認(rèn)證(authorization)、日志(logging)和數(shù)據(jù)驗(yàn)證(validation)。u StrutsActionMappingActi
26、onServlet 負(fù)責(zé)轉(zhuǎn)發(fā)客戶端請(qǐng)求給相應(yīng)的 Action 對(duì)象進(jìn)行處理,同時(shí) 還轉(zhuǎn)發(fā)了其他一些相關(guān)信息,這種請(qǐng)求和處理之間具體的映射關(guān)系保存在 XML配置文件(默認(rèn)是 struts-)中。在系統(tǒng)啟動(dòng)初始化的時(shí)候,會(huì)對(duì)這些配置信息進(jìn)行處理,系統(tǒng)針對(duì)每個(gè)元素都創(chuàng)建一個(gè)與之對(duì)應(yīng)的.ActionMapping 類的實(shí)例,以供 struts應(yīng)用程序運(yùn)行期間使用。當(dāng) ActionServlet 轉(zhuǎn)發(fā)請(qǐng)求時(shí),ActionMapping 實(shí)例被作為參數(shù)之一傳給相應(yīng)的 Action 對(duì)象的 execute()方法。u ActionForwardAction 類 的 execute ( ) 方 法 , 返 回
27、 值 即 為 ActionForward 類 型 。ActionForward 對(duì)象是一種配置對(duì)象,代表了 Web 資源,可以是 JSP 頁(yè)面、Servlet 以 及 Action 。 ActionForward 對(duì) 象 映 射 的 是 配 置 文 件 ( 默 認(rèn) 是struts-)中的元素,封裝了目標(biāo)響應(yīng)頁(yè)面的 URI。u StrutsActionFormBean在 Struts 架構(gòu)中,使用一種名為 ActionForm 的系統(tǒng)狀態(tài) Bean,來(lái)實(shí)現(xiàn)應(yīng)用系統(tǒng)的非持久性數(shù)據(jù)儲(chǔ)存和維護(hù)效用。具體來(lái)說(shuō),ActionFormBean 對(duì)象主要用于保存用戶請(qǐng)求表單中的數(shù)據(jù),并可保持其狀態(tài)的連續(xù)性,即
28、在不同的頁(yè)面間傳遞這些數(shù)據(jù)。為了實(shí)現(xiàn)自動(dòng)被填充和調(diào)用的機(jī)制,該 Bean 必須是 StrutsAPI 中定義的抽象類.ActionForm 的子類的實(shí)例。2.6Struts 的工作流程Struts 架構(gòu)從接收請(qǐng)求到返回響應(yīng)的工作流程如圖 2-5 所示。在應(yīng)用服務(wù)啟動(dòng)的時(shí)候,控制器(ActionServlet)進(jìn)行初始化工作,讀取配置文件(默認(rèn)是Struts-文件),為不同的 Struts 模塊初始化相應(yīng)的 ModuleConfig 對(duì)象。比如 配置文件中的 Action 映射定義都保存在 ActionConfig 集合中。控制器接受 Http 請(qǐng)求,并從 ActionConfig 中找到對(duì)應(yīng)于
29、該請(qǐng)求的 Action 子類,如果沒(méi)有對(duì)應(yīng)的 Action,控制器直接將請(qǐng)求轉(zhuǎn)發(fā)給 JSP 或者靜態(tài)頁(yè)面,否則控制器將請(qǐng)求分發(fā)至具體的 Action 類進(jìn)行處理。圖 2-5Struts 請(qǐng)求響應(yīng)流程在控制器調(diào)用具體的 Action 的 Execute 方法之前,ActionForm 對(duì)象將利用 Http 請(qǐng)求中的參數(shù)來(lái)填充自己。Struts 架構(gòu)將檢查 UserActionForm 是否存在 , 如 果 不 存 在 , 就 會(huì) 創(chuàng) 建 一 個(gè) 該 類 的 實(shí) 例 。 Struts 將 會(huì) 使 用HttpServLetRequest 的相應(yīng)字段來(lái)設(shè)置 UserActionForm 的狀態(tài)。此外,
30、還可以在 ActionForm 類中調(diào)用 Validate 方法來(lái)檢查請(qǐng)求參數(shù)的合法性,并且可以返回一個(gè)包含所有錯(cuò)誤信息的 ActionErrors 對(duì)象。如果執(zhí)行成功,ActionForm 自動(dòng) 將 這 些 參 數(shù) 信 息 以 JavaBean( 一 般 稱 之 為 FormBean) 的 方 式 保 存 在ServletContext 中,這樣它們就可以被其他 Action 對(duì)象或者 JSP 調(diào)用。Action 的 Execute 方法執(zhí)行完業(yè)務(wù)邏輯,返回一個(gè) ActionForward 對(duì)象??刂破鲝倪@個(gè)對(duì)象中獲取下一個(gè)視圖的路徑和重定向?qū)傩?最終將頁(yè)面顯示給用戶。第三章 Hiberna
31、te 技術(shù)介紹Hibernate 是目前非常流行的 ORM(Object/RelationMapping)工具,是一個(gè)基于 Java 的開(kāi)源代碼的持久化中間件,它對(duì) JDBC 進(jìn)行了輕量級(jí)封裝。本章主要介紹了 ORM 機(jī)制、Hibernate 的核心接口以及 Hibernate 的檢索方式。 3.1Hibernate 概述Hibernate 是一種適合于 Java 語(yǔ)言的對(duì)象-關(guān)系映射(ORM)解決方案。它提供一個(gè)易用的框架來(lái)實(shí)現(xiàn)把一個(gè)面向?qū)ο蟮挠蚰P陀成涞揭粋鹘y(tǒng)的關(guān)系數(shù)據(jù)庫(kù)。它不僅負(fù)責(zé)從 Java 類到數(shù)據(jù)庫(kù)表格(以及來(lái)自 Java 數(shù)據(jù)類型的 SQL 數(shù)據(jù)類型)的映射,而且還提供數(shù)據(jù)查詢和
32、檢索能力,并能大大減少花在 SQL 和 JDBC 手工數(shù)據(jù)處理上的開(kāi)發(fā)時(shí)間。Hibernate 技術(shù)本質(zhì)上是一個(gè)提供數(shù)據(jù)庫(kù)服務(wù)的中間件。它的架構(gòu)如 3-1 圖所示:圖 3-1Hibernate 架構(gòu)圖此圖顯示了 hibernate 的工作原理,它是利用數(shù)據(jù)庫(kù)以及其他一些配置文件如,XMLMapping 等來(lái)為應(yīng)用程序提供數(shù)據(jù)持久服務(wù)的。3.2ORM 介紹ORM(即對(duì)象-關(guān)系映射)模式指的是在單個(gè)組件中負(fù)責(zé)所有實(shí)體域?qū)ο蟮某志没?封裝數(shù)據(jù)訪問(wèn)細(xì)節(jié)。它提供了實(shí)現(xiàn)持久化層的一種模式:采用映射元數(shù)據(jù)來(lái)描述對(duì)象-關(guān)系映射細(xì)節(jié),使得 ORM 中間件能夠在任何一個(gè) Java 應(yīng)用的業(yè)務(wù)邏輯層和數(shù)據(jù)庫(kù)層之間充
33、當(dāng)橋梁。如下圖所示。圖 3-2ORM 充當(dāng)業(yè)務(wù)邏輯層和數(shù)據(jù)庫(kù)層之間充當(dāng)橋梁ORM 解決的主要問(wèn)題就是對(duì)象-關(guān)系的映射。域模型和關(guān)系模型都分別建立在概念模型的基礎(chǔ)上。域模型是面向?qū)ο蟮?而關(guān)系數(shù)據(jù)模型是面向關(guān)系的,一般情況下,一個(gè)持久化類和一個(gè)表對(duì)應(yīng),類的每個(gè)實(shí)例對(duì)應(yīng)表中的一條記錄。描述對(duì)象和關(guān)系數(shù)據(jù)庫(kù)之間映射細(xì)節(jié)的元數(shù)據(jù)通常采用 XML 格式,并且存放在專門(mén)的對(duì)象-關(guān)系映射文件中。映射語(yǔ)言是以 Java 為中心的,意味著映射 是按照持久化類的定義來(lái)創(chuàng)建的,而非表的定義。3.3Hibernate 的核心接口應(yīng)用程序可以直接通過(guò) HibernateAPI 訪問(wèn)數(shù)據(jù)庫(kù)。有 5 個(gè)核心接口幾乎在所有的
34、 Hibernate 應(yīng)用中都會(huì)用到。使用這些接口可以儲(chǔ)存和取出持久對(duì)象或?qū)κ聞?wù)進(jìn)行控制。圖 3-3 是這 5 個(gè)核心接口的類框圖。圖 3-3Hibernate 的核心接口的類框圖u Session 接口Session(會(huì)話)接口是 Hibernate 應(yīng)用使用最廣泛的接口。Session 也被稱為持久化管理器,它提供了和持久化相關(guān)的操作:保存、更新、刪除、加載和查詢對(duì)象。Session 不是線程安全的,因此在設(shè)計(jì)軟件架構(gòu)時(shí),應(yīng)該避免多個(gè)線程共享同一個(gè) Session 實(shí)例。會(huì)話接口的實(shí)例是輕量級(jí)的且創(chuàng)建和銷毀不需要消耗太多的資源。這意味著在程序中根據(jù)需要可以經(jīng)常創(chuàng)建或銷毀 Session 對(duì)
35、象。Hibernate 會(huì)話是一個(gè)介于連接和事務(wù)之間的概念。可以簡(jiǎn)單地認(rèn)為會(huì)話是對(duì)于一個(gè)單獨(dú)的工作單元已裝載對(duì)象的緩存或集合。Hibernate 可以檢測(cè)到這個(gè)工作單元中對(duì)象的改變。有時(shí)也將會(huì)話稱為持續(xù)性管理器,因?yàn)樗彩桥c持續(xù)性有關(guān)的操作例如存儲(chǔ)和取出對(duì)象的接口。u SessionFactory 接口應(yīng) 用 從 SessionFactory ( 會(huì) 話 工 廠 ) 里 獲 得 會(huì) 話 實(shí) 例 。 一 個(gè)SessionFactory 實(shí)例對(duì)應(yīng)一個(gè)數(shù)據(jù)存儲(chǔ)源。它是線程安全的,這意味著它的同一個(gè)實(shí)例可以被應(yīng)用的多個(gè)線程共享。會(huì)話工廠緩存了生成的 SQL 語(yǔ)句和 Hibernate 在運(yùn)行時(shí)使用的映
36、射元數(shù)據(jù)等。它也保存了在一個(gè)工作單元中讀入的數(shù)據(jù)并且可能在以后的工作單元中被重用(只有類和集合映射指定了這種二級(jí)緩存是想要的時(shí)才會(huì)如此)。所以它是重量級(jí)的,這意味著不能隨意創(chuàng)建或銷毀它的實(shí)例。如果應(yīng)用程序只訪問(wèn)一個(gè)數(shù)據(jù)庫(kù),只需要在應(yīng)用初始化的時(shí)候創(chuàng)建一個(gè)會(huì)話工廠實(shí)例。如果應(yīng)用同時(shí)訪問(wèn)多個(gè)數(shù)據(jù)庫(kù),則需要為每個(gè)數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)單獨(dú)的會(huì)話工廠實(shí)例。u Configuration 接口Configuration(配置)對(duì)象用來(lái)配置和引導(dǎo) Hibernate。Hibernate 使用一個(gè)配置實(shí)例來(lái)指定映射文件的位置和 Hibernate 的特定屬性,然后創(chuàng)建會(huì)話工廠。u Transaction 接口Tra
37、nsaction(事務(wù))接口是一個(gè)可選的 API。Hibernate 應(yīng)用可以選擇不使用這個(gè)接口,而是在它們自己的底層代碼中管理事務(wù)。事務(wù)將應(yīng)用代碼從下層的事務(wù)實(shí)現(xiàn)中抽象出來(lái)這可能是一個(gè) JDBC 事務(wù),一個(gè) JTA 用戶事務(wù)或者甚至是一個(gè)大眾對(duì)象請(qǐng)求代理結(jié)(CORBA)允許應(yīng)用通過(guò)一組一致的API 控制事務(wù)邊界。這有助于保持 Hibernate 應(yīng)用在不同類型的執(zhí)行環(huán)境或容器中的可移植性。u Query 和 Criteria 接口Query 和 Criteria 接口是 Hibernate 的查詢接口,用于向數(shù)據(jù)庫(kù)查詢對(duì)象 , 以 及 控 制 執(zhí) 行 查 詢 的 過(guò) 程 。 Query 實(shí)
38、例 包 裝 了 一 個(gè) HQL(HibernateQueryLanguage)查詢語(yǔ)句,HQL 查詢語(yǔ)句類似于 SQL 查詢語(yǔ)句,但HQL 查詢語(yǔ)句是面向?qū)ο蟮?它引用類名及類的屬性名,而不是表名及表的字段 名。Criteria 接口完全封裝了基于字符串形式的查詢語(yǔ)句,比 Query 接口更加面向?qū)ο?而且它擅長(zhǎng)于執(zhí)行動(dòng)態(tài)查詢。3.4Hibernate 的檢索方式從 數(shù)據(jù) 庫(kù) 中 檢 索 對(duì) 象 是 使 用 Hibernate 最 有 趣 (也 是 最復(fù) 雜 ) 的部 分 。Hibernate 提供了以下幾種檢索對(duì)象的方式:導(dǎo)航對(duì)象圖檢索方式。根據(jù)已經(jīng)加載的對(duì)象,導(dǎo)航到其他對(duì)象。例如通過(guò)像()
39、.getCity()的屬性訪問(wèn)器方法訪問(wèn)相關(guān)聯(lián)的對(duì)象。如果 Session 是打開(kāi)的,當(dāng)你導(dǎo)航圖時(shí),Hibernate會(huì)自動(dòng)裝載圖的節(jié)點(diǎn)。標(biāo)識(shí)符檢索方式。當(dāng)對(duì)象的唯一標(biāo)識(shí)符值是已知的時(shí)候,通過(guò)標(biāo)識(shí)符檢索是最方便最有性能的方法。Session 的 get()和 load()方法提供了這種效用。HQL 檢索方式。使用面向?qū)ο蟮?HQL 查詢語(yǔ)言。Session 的 find()方法用于執(zhí)行 HQL 查詢語(yǔ)句。此外,Hibernate 還提供了 Query 接口,它是 Hibernate 提供的專門(mén)的 HQL查詢接口,能夠執(zhí)行各種復(fù)雜的 HQL 查詢語(yǔ)句。這是 Hibernate 使用的最為廣泛的一
40、種檢索方式。QBC 檢索方式。使用 QBC(QueryByCriteria)API 來(lái)檢索對(duì)象。這種 API 封裝了基于字符串形式的查詢語(yǔ)句,提供了更加面向?qū)ο蟮慕涌?它主要由 Criteria 接口、Criterion 接口、和 Expression 類組成,支持在運(yùn)行式動(dòng)態(tài)生成查詢語(yǔ)句。 本地 SQL 檢索方式。使用本地?cái)?shù)據(jù)庫(kù)的 SQL 查詢,這種查詢 Hibernate 只關(guān)心把 JDBC 結(jié)果集映射到持久對(duì)象圖。第四章 Spring 技術(shù)介紹Spring 是一個(gè)以控制反轉(zhuǎn)(InversionofControl)原則為基礎(chǔ)的輕量級(jí)框架??刂品崔D(zhuǎn)是一個(gè)用于“基于組件的體系結(jié)構(gòu)”的設(shè)計(jì)模式,
41、它將“判斷依賴關(guān)系”的職責(zé)移交給容器,而不是由組件本身來(lái)判斷彼此之間的依賴關(guān)系。本章主要闡述了 Spring 框架的七個(gè)效用模塊:Spring 核心模塊、SpringAOP 模塊、Spring 上下文(Context)模塊、SpringWeb 模塊、SpringDAO 模塊、SpringORM模 塊 、 SpringWebMVC 模 塊 以 及 SpringIoC 、 SpringBean 的 封 裝 機(jī) 制 和SpringAOP。4.1Spring 框架概述Spring 框架是一個(gè)分層的 Java/J2EE 應(yīng)用程序框架,基于 ExpertOne-on-OneJ2EE 設(shè)計(jì)和發(fā)行的代碼。Spring 框架提供一種簡(jiǎn)單的開(kāi)發(fā)技術(shù),用于自動(dòng)化處理工程中大量的屬性文件和助理類。Spring 框架由 7 個(gè)定義良好的模塊組成。Spring 模塊構(gòu)建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理 bean 的方式,圖 4-1 所示。圖 4-1Spring 架構(gòu)組成 Spring 框架的每個(gè)模塊(或組件)都可以單獨(dú)存在,或者與其他一個(gè)或多個(gè)模塊聯(lián)合實(shí)現(xiàn)。每個(gè)模塊的效用如下: Spring 核心容器模塊:核心容器提供 Spring 框架的基本效用。核心容器的主要組件是 BeanFactory,它是工廠模式的實(shí)現(xiàn)。BeanFactory 使用
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版搬運(yùn)企業(yè)節(jié)能減排合同范本3篇
- 2025年度木材加工設(shè)備租賃及維護(hù)服務(wù)合同范本4篇
- 2025版民爆物品裝卸作業(yè)環(huán)境保護(hù)合同4篇
- 2025年度個(gè)人消費(fèi)分期付款合同范本(2025版)3篇
- 農(nóng)業(yè)機(jī)械化與農(nóng)村振興人才培育考核試卷
- 2025版事業(yè)單位聘用合同正規(guī)范本(含試用期)2篇
- 2025版人工智能研發(fā)中心錄用合同范本3篇
- 2025年公益活動(dòng)加盟合同
- 2025年大型活動(dòng)合作協(xié)議
- 2025年度高科技實(shí)驗(yàn)室租賃合同4篇
- 【探跡科技】2024知識(shí)產(chǎn)權(quán)行業(yè)發(fā)展趨勢(shì)報(bào)告-從工業(yè)轟鳴到數(shù)智浪潮知識(shí)產(chǎn)權(quán)成為競(jìng)爭(zhēng)市場(chǎng)的“矛與盾”
- 《中國(guó)政法大學(xué)》課件
- GB/T 35270-2024嬰幼兒背帶(袋)
- 遼寧省沈陽(yáng)名校2025屆高三第一次模擬考試英語(yǔ)試卷含解析
- 2024-2025學(xué)年高二上學(xué)期期末數(shù)學(xué)試卷(新題型:19題)(基礎(chǔ)篇)(含答案)
- 2022版藝術(shù)新課標(biāo)解讀心得(課件)小學(xué)美術(shù)
- Profinet(S523-FANUC)發(fā)那科通訊設(shè)置
- 醫(yī)學(xué)教程 常見(jiàn)化療藥物歸納
- 統(tǒng)編版九年級(jí)歷史下冊(cè)第一單元教案教學(xué)設(shè)計(jì)
- GB/T 25000.51-2016系統(tǒng)與軟件工程系統(tǒng)與軟件質(zhì)量要求和評(píng)價(jià)(SQuaRE)第51部分:就緒可用軟件產(chǎn)品(RUSP)的質(zhì)量要求和測(cè)試細(xì)則
- 外科學(xué)試題庫(kù)及答案(共1000題)
評(píng)論
0/150
提交評(píng)論