版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第24章 綜合Struts+Spring+Hibernate開發(fā)圖書管理系統(tǒng),本章將要實現(xiàn)的是一個簡單圖書管理系統(tǒng),由用戶登錄和圖書館里兩部分組成。本系統(tǒng)將采用三層架構(gòu)的模式分為表現(xiàn)層、業(yè)務層、持久化成。在開發(fā)過程中利用了Struts來實現(xiàn)Web層,這里遵循了經(jīng)典的MVC模式;使用Hibernate來實現(xiàn)數(shù)據(jù)訪問和持久化層;使用Spring來實現(xiàn)業(yè)務層和整合工作。通過本章的學習將體會到三個框架結(jié)合的力量,在這里1+1+1要遠遠大于3。 說明:本章學習的重點在于整合三個框架和如何面對實際應用,某些技術(shù)細節(jié)可以查閱前面的章節(jié)。,24.1 概述,在本節(jié)中首先將介紹圖書館里系統(tǒng)的基本功能也就是明確本章
2、要實現(xiàn)的目標,其次對開發(fā)環(huán)境需要的資源做一個簡單描述,使讀者就可在閱讀本章前提前做好準備。最后就是說明開發(fā)文件和目錄應該如何組織。明確了這些大框架就會避免再出現(xiàn)諸如“找不到文件”、“類未加載”等惱人的錯誤,那么跟隨本章實現(xiàn)這個實用的實例就會輕松許多了。,24.1.1 系統(tǒng)功能預覽,在本系統(tǒng)中主要包含兩個模塊:登錄和圖書管理。具體實現(xiàn)的用例圖如圖。 對于圖書管理模塊,主要分為對圖書的維護:新增圖書、修改圖書、刪除圖書和對圖書的檢索,條件查詢兩部組成。這些都將在以后的章節(jié)詳細介紹,首先請看主頁面圖,如圖所示,對這個系統(tǒng)有一個初步的感官認識。,24.1.2 系統(tǒng)結(jié)構(gòu),在本例中采用了三層結(jié)構(gòu),分別由S
3、truts2實現(xiàn)Web表現(xiàn)層、Spring實現(xiàn)業(yè)務層、Hibernate來實現(xiàn)數(shù)據(jù)訪問層。分層是一個很重要的設計方法,使結(jié)構(gòu)更加清晰,在每層中只集中解決特定的問題,有利于發(fā)揮不同框架的作用。本例中結(jié)構(gòu)圖如圖所示。 分層的另一個好處是可以剪斷層與層之間的耦合關(guān)系,修改某一層中的實現(xiàn)不會影響到其他層。,24.1.3 所需資源,雖然這個實例不大,但包含的內(nèi)容相當?shù)娜妫簲?shù)據(jù)庫、OR工具、J2ee服務器、模板引擎,從這個意義上說它不次于一個中等規(guī)模的項目 (1)數(shù)據(jù)庫仍然采用Mysql數(shù)據(jù)庫,對于MySQL數(shù)據(jù)庫的安裝和使用請參考“Hibernate入門”一章中有詳細介紹。 (2)JSP服務器還是采用
4、Tomcat服務器。對于MySQL數(shù)據(jù)庫的安裝和使用請參考“Struts入門”一章中有詳細介紹。 (3)引入資源。在MyEclipse中創(chuàng)建一個Web Project。在右鍵菜單中給這個Project增加Hibernate和Spring特性。前文已經(jīng)介紹過,MyEclipse還沒有對Struts2支持,這里需要手工添加Struts2的資源包。最后需要的資源如圖所示。,24.1.4 源代碼目錄組織,在進行程序設計和開發(fā)之前,要設計目錄和包的結(jié)構(gòu)。良好的結(jié)構(gòu)會使代碼邏輯清楚且容易閱讀。一般一個設計良好的結(jié)構(gòu)都有其共同的特點,就是邏輯清楚。本系統(tǒng)的目錄結(jié)構(gòu)如圖23.5所示。在這個目錄結(jié)構(gòu)中,end是
5、項目的根目錄也是項目的名稱。其下src目錄用于存放原文件,所有的Java 類都定義在這個文件夾下。 WebRoot目錄在創(chuàng)建Web工程自動生成的目錄,在發(fā)布時這個目錄將被直接發(fā)布到應用服務器中。其下放置JSP 頁面,WEB-INF 目錄下存放系統(tǒng)的配置文件,如web.xml等。,24.2 給Web服務器配置web.xml,對于一個Web系統(tǒng)來說,系統(tǒng)配置和框架的加載一般都是在web.xml中完成的。在本例中需要在web.xml中加載Struts,而且要完成Struts與Spring的整合工作,使Spring可以通過web路徑獲得Spring的上下文(applicationContext),24
6、.2.1 添加Struts2配置,在Struts2一篇中曾經(jīng)有過詳細介紹,在Struts2中是采用過濾器(filter)來實現(xiàn)Struts加載的代碼如: struts2 org.apache.struts2.dispatcher.FilterDispatcher config struts-plugin.xml,struts.xml,struts_login.xml,struts_books.xml struts2 /* ,24.2.2 添加Spring配置,整合Spring來控制Struts還需要修改一下web.xml文件,讓Spring能參與到sevlet的執(zhí)行中去。 (1)配置Sprin
7、g監(jiān)聽器。是系統(tǒng)加載Spring框架,啟動Spring的IoC容器。 (2)默認情況下,容器會到WEB-INF目錄下面去尋找applicationContext.xml文件。,24.2.3 定義編碼轉(zhuǎn)化器(解決中文問題),在進行Web 開發(fā)時,經(jīng)常會遇到中文顯示出現(xiàn)亂碼的情況,這是因為Java 內(nèi)置的字符集與頁面顯示的字符集不一致造成的。為了解決這個問題,開發(fā)人員需要轉(zhuǎn)化字符編碼,但是如果對所有的輸入輸出信息都做編碼轉(zhuǎn)化顯然比較麻煩。通過定義一個Filter 來自動的實現(xiàn)字符編碼的轉(zhuǎn)化是一個比較好的方法。,24.2.4 定義Log的輸出,Log4j是一個開源的Java日志記錄組件,也是歸屬于由
8、Apache組織。Log4j允許開發(fā)人員以任意的精細程度控制哪些日志說明被輸出。通過使用外部的配置文件,可以在運行時配置它。幾乎所有的Java應用都要使用Log4J作為日志輸出。 無論是Struts和Hibernate還是Spring日志控制都是由Log4J來定義的。在Spring中支持在Web.xml中加載Log4J配置文件的方法,24.3 用Struts2實現(xiàn)Web表現(xiàn)層,Struts在Web表現(xiàn)中強大的支持已經(jīng)在前面的章節(jié)有過描述。在本例中并沒有使用Struts的高級功能,主要是利用了Struts的前端表現(xiàn)能力,如標簽庫、國際化、自動校驗。與Spring結(jié)合吧Action類的實例化交給S
9、pring的IoC容器來完成。,24.3.1 Struts的配置文件,在本例中采用一個模塊一個Struts配置文件的做法,這也是在實際開發(fā)中經(jīng)常采用的做法。本例中一共分為三個文件: struts.xm負責全局配置、struts_login.xml登錄模塊配置、struts_books.xml圖書管理模塊配置。 (1)全局配置:全局配置寫在struts.xml文件中,使用元素來定義靜態(tài)全局的屬性。代替了perties文件的作用。 (2)登錄模塊配置。 (3)圖書管理模塊配置:在這個配置文件中定義了頁面上的所有操作,包括查詢(list)、編輯(edit)、刪除(delete)、
10、保存(save)。,24.3.2 圖書館里的Action類,在前面的章節(jié)曾經(jīng)作過重點的介紹,無論是在Struts1.x還是Struts中Action類都是的最重要最核心所在。在本例中有意安排兩個Action以不同的驅(qū)動模式來實現(xiàn),LoginAction是Model-Driven(模型驅(qū)動的)方式來實現(xiàn)的,它包含一個User值對象來參與傳遞數(shù)據(jù)。而BooksAction是以Property-Driven(屬性驅(qū)動)方式實現(xiàn)的,沒有值對象參與。,24.3.3 在添加圖書中采用自動校驗,在saveAction中配置文件定義兩個過濾器,兩個Struts2內(nèi)置的過濾其作用就是實現(xiàn)自動校驗: ,24.3.
11、4 使用標簽實現(xiàn)在圖書維護頁面,Struts2的提供了眾多可選擇的標簽庫資源,引入方式如: 在本例中主要使用了兩種常用的標簽:邏輯標簽和表單標簽。,24.4 用Hibernate實現(xiàn)數(shù)據(jù)層,數(shù)據(jù)庫設計是系統(tǒng)設計中非常重要的一個環(huán)節(jié)。數(shù)據(jù)是一切系統(tǒng)設計的基礎(chǔ),通俗的說數(shù)據(jù)庫設計就像高樓大廈的根基一樣,如果設計不合理、不完善,將在系統(tǒng)開發(fā)過程中、甚至到后期的系統(tǒng)維護、功能變更和功能擴充時,引起較多問題,嚴重時甚至要重新設計,重做大量已完成工作。,24.4.1 創(chuàng)建數(shù)據(jù)庫,在本例中數(shù)據(jù)庫設計并不復雜,本章重點介紹的是縱向的鏈接關(guān)系,如何將使用Struts、Hibernate、Spring來搭建三層結(jié)
12、構(gòu)的業(yè)務處理。復雜的域?qū)ο笾g的關(guān)系并不是本章的重點。,24.4.2 配置數(shù)據(jù)源,在本例程中將Hibernate與Spring完全整合在一起,把hibernate.cfg.xml中的配置轉(zhuǎn)移到Spring的配置文件中來。如“Spring實戰(zhàn)In MyEcplise”一章中介紹的,可以使用MyEclipse提供的的Datasource SessionFactory向?qū)硗瓿蛇@個配置。,24.4.3 持久化類和映射文件,在本例中沒有包含復雜的關(guān)聯(lián)關(guān)系,持久化類和映射文件都可以直接用MyEclipse提供的工具從數(shù)據(jù)表直接反向生成。工具的使用請參考前面“Hibernate實戰(zhàn) in MyEclips
13、e”一章中有詳細介紹。,24.4.4 實現(xiàn)圖書館里和登錄管理的DAO類,DAO也是一個經(jīng)典的設計模式,使用這種模式可以解決數(shù)據(jù)訪問代碼與業(yè)務代碼之間的耦合關(guān)系,業(yè)務代碼只對接口進行操作,并不關(guān)心具體實現(xiàn)是依賴如JDBC還是Hibernate還是其他OR工具。 在Spring的IoC容器中這種模式就更加方便的實行,實現(xiàn)接口的方式由原來的工廠方法改為由Spring來反向控制。一切都在配置文件中完成的,也是就說如果想改變數(shù)據(jù)層實現(xiàn)方式(如從Hibernate框架改為以ibatis)不必對Service類做任何改變。,24.5 Spring整合業(yè)務層,在本例程中利用Spring的IoC容器整合了表現(xiàn)層
14、、業(yè)務層和數(shù)據(jù)訪問層,使用AOP實現(xiàn)了DAO類的事務控制。歸納起來有以下幾個步驟: (1)接管的Struts中Action的實例化。 (2)給Action注入Service類實現(xiàn)。 (3)給Service注入DAO類。 (4)加載Hibernate模塊,提供數(shù)據(jù)源。 (5)添加事務管理。,24.5.1 配置Bean文件,在把公共部分寫寫到applicationContext.xml中去,每個模塊一個beans.xml。引入方法如下: ,24.5.2 實現(xiàn)業(yè)務類,業(yè)務類的邏輯并不負責,在這里僅僅是起到了Action與DAO類的連接作用,在實際項目中往往需要在業(yè)務類中實現(xiàn)更復雜的應用邏輯,需要更多
15、的業(yè)務來支持系統(tǒng)。,24.5.3 保存圖書中的事務管理,在本例中同樣適用了Spring的聲明式的事務管理,并不需要添加任何代碼,只需要在applicationContext.xml中作事務聲明即可。關(guān)于Spring的事務管理請參考“用Spring整合其他應用”一章中的詳細描述,,24.5.4 瀏覽圖書的分頁處理,在本例中提供了一個非常有用的模塊:分頁處理。在網(wǎng)頁查詢中這是一個必不可少的功能項。本例使用的是最簡單的實現(xiàn),依賴于DAO中分頁函數(shù)處理,這里也是因為有了Hibernate才能如何簡單實現(xiàn)。,24.6 發(fā)布與測試,本例仍然使用Tomcat作為JSP服務器,當然本例并沒有特意針對Tomcat,因此在任何一個JSP服務器中都可以直接部署。,24.6.1 在MyEclipse中發(fā)布應用,利用MyEclipse提供的發(fā)布工具,可以方便的把應用程序發(fā)布到服務器中,并可以在開發(fā)工具中調(diào)試。發(fā)布過程如圖所示。,2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 騰訊企業(yè)主要制度規(guī)范
- 拆袋規(guī)范現(xiàn)場管理制度
- 美國藥品審核制度規(guī)范
- 視頻錄像調(diào)取制度規(guī)范
- 快遞網(wǎng)點衛(wèi)生制度規(guī)范
- 試料收費制度規(guī)范要求
- 服務規(guī)范相關(guān)制度匯編
- 規(guī)范業(yè)務歸口管理制度
- 規(guī)范工資發(fā)放比例制度
- 溫室氣體報告制度規(guī)范
- 2026年共青團中央所屬單位招聘66人備考題庫及答案詳解一套
- 人民警察法培訓課件
- 2026年哈爾濱職業(yè)技術(shù)學院單招職業(yè)適應性考試題庫參考答案詳解
- 2025云南昆明巫家壩建設發(fā)展有限責任公司及下屬公司第四季度社會招聘31人歷年真題匯編帶答案解析
- 輸尿管切開取石課件
- 小貓絕育協(xié)議書
- 66kV及以下架空電力線路設計標準
- 人工搬運培訓課件
- 2025年浙江乍浦經(jīng)濟開發(fā)區(qū)(嘉興港區(qū))區(qū)屬國有公司公開招聘28人筆試考試備考試題及答案解析
- 胃腸外科危重患者監(jiān)護與護理
- 2025年榆林神木市信息產(chǎn)業(yè)發(fā)展集團招聘備考題庫(35人)及答案詳解(新)
評論
0/150
提交評論