JEE開(kāi)發(fā)常用軟件體系架構(gòu)模式.ppt
《JEE開(kāi)發(fā)常用軟件體系架構(gòu)模式.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《JEE開(kāi)發(fā)常用軟件體系架構(gòu)模式.ppt(85頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
,J2EE開(kāi)發(fā)常用軟件體系架構(gòu)模式,華南師范大學(xué)軟件學(xué)院,作者:楊勁松,struts,hibernate,spring及其衍生框架,主要內(nèi)容:,1、軟件體系架構(gòu),——軟件無(wú)處不在,5/11/2020,華南師范大學(xué)軟件學(xué)院,3,1、軟件體系架構(gòu),——軟件開(kāi)發(fā)現(xiàn)狀,5/11/2020,華南師范大學(xué)軟件學(xué)院,4,1、軟件體系架構(gòu),——軟件危機(jī)的案例,5/11/2020,華南師范大學(xué)軟件學(xué)院,5,IBM公司的OS/360,共約100萬(wàn)條指令,花費(fèi)了5000個(gè)人年;經(jīng)費(fèi)達(dá)數(shù)億美元,而結(jié)果卻令人沮喪,錯(cuò)誤多達(dá)2000個(gè)以上,系統(tǒng)根本無(wú)法正常運(yùn)行。OS/360系統(tǒng)的負(fù)責(zé)人Brooks這樣描述開(kāi)發(fā)過(guò)程的困難和混亂:“…像巨獸在泥潭中作垂死掙扎,掙扎得越猛,泥漿就沾得越多,最后沒(méi)有一個(gè)野獸能夠逃脫淹沒(méi)在泥潭中的命運(yùn)?!?,1963年美國(guó)飛往火星的火箭爆炸,造成1000萬(wàn)美元的損失。原因是FORTRAN程序:DO5I=1,3誤寫(xiě)為:DO5I=1.3,,1967年蘇聯(lián)“聯(lián)盟一號(hào)”載人宇宙飛船在返航時(shí),由于軟件忽略一個(gè)小數(shù)點(diǎn),在進(jìn)入大氣層時(shí)因打不開(kāi)降落傘而燒毀,,1、軟件體系架構(gòu),——軟件為什么會(huì)失效,5/11/2020,華南師范大學(xué)軟件學(xué)院,6,1、軟件體系架構(gòu),——產(chǎn)生軟件危機(jī)的根源,5/11/2020,華南師范大學(xué)軟件學(xué)院,7,軟件規(guī)模越來(lái)越大、復(fù)雜度越來(lái)越高用戶需求不明確缺乏正確有效的理論及工程指導(dǎo)——對(duì)用戶要求、實(shí)現(xiàn)條件沒(méi)有完整準(zhǔn)確的分析就匆忙編寫(xiě)程序,是許多軟件開(kāi)發(fā)失敗的主要原因,在此種背景下,人們認(rèn)識(shí)到軟件體系架構(gòu)的重要性,軟件工程研究初期重點(diǎn)放在數(shù)據(jù)結(jié)構(gòu)和算法的選擇,如Knuth提出了數(shù)據(jù)結(jié)構(gòu)+算法=程序,1、軟件體系架構(gòu),——什么是軟件體系架構(gòu),DewaynePerry和A1exanderWo1f,軟件體系結(jié)構(gòu)是具有一定形式的結(jié)構(gòu)化元素,即構(gòu)件的集合,包括處理構(gòu)件、數(shù)據(jù)構(gòu)件和連接構(gòu)件。,處理構(gòu)件負(fù)責(zé)對(duì)數(shù)據(jù)進(jìn)行加工數(shù)據(jù)構(gòu)件是被加工的信息連接構(gòu)件把體系結(jié)構(gòu)的不同部分組組合連接起來(lái),MaryShaw和DavidGarlan,軟件體系結(jié)構(gòu)是軟件設(shè)計(jì)過(guò)程中的一個(gè)層次,這一層次超越計(jì)算過(guò)程中的算法設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),——關(guān)于整體系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和描述方面的一些問(wèn)題,如:全局組織和全局控制結(jié)構(gòu)關(guān)于通訊、同步與數(shù)據(jù)存取的協(xié)議,等,5/11/2020,華南師范大學(xué)軟件學(xué)院,8,1、軟件體系架構(gòu),——什么是軟件體系架構(gòu),Kruchten,軟件體系結(jié)構(gòu)有四個(gè)角度,它們從不同方面對(duì)系統(tǒng)進(jìn)行描述:,概念角度描述系統(tǒng)的主要構(gòu)件及它們之間的關(guān)系;模塊角度包含功能分解與層次結(jié)構(gòu);運(yùn)行角度描述了一個(gè)系統(tǒng)的動(dòng)態(tài)結(jié)構(gòu);代碼角度描述了各種代碼和庫(kù)函數(shù)在開(kāi)發(fā)環(huán)境中的組織,不同研究背景、應(yīng)用背景的人員從不同的角度給出了多達(dá)近百種定義,但有兩點(diǎn)共識(shí):,軟件體系結(jié)構(gòu)對(duì)于軟件開(kāi)發(fā)具有重要意義,必須采用良好的設(shè)計(jì)原則達(dá)到良好的結(jié)構(gòu)設(shè)計(jì)主流的定義都認(rèn)為:軟件體系結(jié)構(gòu)是用來(lái)表示軟件系統(tǒng)的總體結(jié)構(gòu)的,該結(jié)構(gòu)由軟件構(gòu)件和構(gòu)件之間的關(guān)系及約束構(gòu)成,5/11/2020,華南師范大學(xué)軟件學(xué)院,9,2、J2EE的體系架構(gòu),J2EE,為企業(yè)應(yīng)用系統(tǒng)的開(kāi)發(fā)提供了一種多層分布式企業(yè)應(yīng)用模型按應(yīng)用邏輯按功能不同可以劃分為不同類型的組件,5/11/2020,華南師范大學(xué)軟件學(xué)院,客戶層,運(yùn)行在客戶計(jì)算機(jī)上的組件。Web層,運(yùn)行在J2EE服務(wù)器上的組件。業(yè)務(wù)層,同樣是運(yùn)行在J2EE服務(wù)器上的組件。企業(yè)信息系統(tǒng)層(EIS),是指運(yùn)行在EIS服務(wù)器上的軟件系統(tǒng)。,J2EE分層結(jié)構(gòu),2、J2EE的體系架構(gòu),J2EE,5/11/2020,華南師范大學(xué)軟件學(xué)院,11,2、J2EE的體系架構(gòu),J2EE,5/11/2020,華南師范大學(xué)軟件學(xué)院,12,2、J2EE的體系架構(gòu),J2EE,5/11/2020,華南師范大學(xué)軟件學(xué)院,13,2、J2EE的體系架構(gòu),5/11/2020,華南師范大學(xué)軟件學(xué)院,14,——什么是模式?什么是框架?,模式,即pattern。其實(shí)就是解決某一類問(wèn)題的方法論。你把解決某類問(wèn)題的方法總結(jié)歸納到理論高度,那就是模式。模式分為:體系結(jié)構(gòu)模式設(shè)計(jì)模式框架,即framework。建立在體系結(jié)構(gòu)模式的基礎(chǔ)上。包括大量組件,設(shè)計(jì)模式,與某一領(lǐng)域的具體應(yīng)用無(wú)關(guān)。,C/S:以數(shù)據(jù)庫(kù)為中心B/S多層架構(gòu)將顯示、業(yè)務(wù)運(yùn)算、數(shù)據(jù)庫(kù)等功能完全分離,杜絕彼此的耦合與影響,從而實(shí)現(xiàn)松耦合和良好的可維護(hù)性。,3、SSH框架,5/11/2020,華南師范大學(xué)軟件學(xué)院,15,——SSH簡(jiǎn)介,Struts(表示層)+Spring(業(yè)務(wù)層)+Hibernate(持久層),5/11/2020,華南師范大學(xué)軟件學(xué)院,16,3、SSH框架,——SSH簡(jiǎn)介,Struts(表示層)+Spring(業(yè)務(wù)層)+Hibernate(持久層),5/11/2020,華南師范大學(xué)軟件學(xué)院,17,3、SSH框架,——SSH簡(jiǎn)介,Struts(表示層)+Spring(業(yè)務(wù)層)+Hibernate(持久層),5/11/2020,華南師范大學(xué)軟件學(xué)院,18,3、Struts,——Model1與Model2設(shè)計(jì)模式,以JSP為中心的開(kāi)發(fā)模型,稱為Model1(JSP+JAVABEAN)業(yè)務(wù)邏輯與表示邏輯混和,不利維護(hù)與重用HTML中嵌入了大量的JAVA代碼驗(yàn)證、流程控制、更新程序的狀態(tài)全部在JSP中完成,EnterpriseServers/DataSources,傳統(tǒng)的Model1(JSP+JAVABEAN),5/11/2020,華南師范大學(xué)軟件學(xué)院,19,3、Struts,——Model1與Model2設(shè)計(jì)模式,以servlet為中心的開(kāi)發(fā)模型,Model2(JSP+Servlet+JAVABEAN),Model2(JSP+Servlet+JAVABEAN),MVC是一種設(shè)計(jì)模式,它強(qiáng)制性地把應(yīng)用程序的輸入、處理和輸出分開(kāi)。MVC將應(yīng)用程序分成3部分:模型、視圖和控制器。,5/11/2020,華南師范大學(xué)軟件學(xué)院,20,3、Struts,——MVC模式,MVC模式模型(Model)是應(yīng)用程序的主體部分。模型表示業(yè)務(wù)數(shù)據(jù),或者業(yè)務(wù)邏輯。視圖(View)是應(yīng)用程序中用戶界面相關(guān)的部分,是用戶看到并與之交互的界面??刂破?Controller)工作就是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示和更新model對(duì)象狀態(tài)。,(控制器)接受用戶請(qǐng)求調(diào)用模型響應(yīng)用戶請(qǐng)求選擇視圖顯示響應(yīng)結(jié)果,(視圖)顯示模型狀態(tài)接受數(shù)據(jù)更新請(qǐng)求把用戶輸入數(shù)據(jù)傳給控制器,(模型)代表應(yīng)用程序狀態(tài)響應(yīng)狀態(tài)查詢處理業(yè)務(wù)流程通知視圖業(yè)務(wù)狀態(tài)更新,,方法調(diào)用,,事件,,,,,,,,,選擇視圖,業(yè)務(wù)處理,用戶請(qǐng)求,狀態(tài)查詢,通知數(shù)據(jù)更新,5/11/2020,華南師范大學(xué)軟件學(xué)院,21,3、Struts,——Struts框架概述,,,,Struts是一個(gè)現(xiàn)成的、優(yōu)秀的、基于MVC的Web應(yīng)用框架。,瀏覽器,Web服務(wù)器,ActionServlet,FormBean,(模型)JavaBeanEJB,Struts-config.xml,數(shù)據(jù)庫(kù),MessageResouse,JSP,,(視圖),(控制器),Servlet/JSP容器,Struts框架結(jié)構(gòu),5/11/2020,華南師范大學(xué)軟件學(xué)院,22,3、Struts,——Struts框架概述,,,,Struts是一個(gè)現(xiàn)成的、優(yōu)秀的、基于MVC的Web應(yīng)用框架。,瀏覽器,Web服務(wù)器,ActionServlet,FormBean,(模型)JavaBeanEJB,Struts-config.xml,數(shù)據(jù)庫(kù),MessageResouse,JSP,,(視圖),(控制器),Servlet/JSP容器,Struts框架結(jié)構(gòu),5/11/2020,華南師范大學(xué)軟件學(xué)院,23,3、Struts,——Struts框架概述,,,,Struts是一個(gè)現(xiàn)成的、優(yōu)秀的、基于MVC的Web應(yīng)用框架。,瀏覽器,Web服務(wù)器,ActionServlet,FormBean,(模型)JavaBeanEJB,Struts-config.xml,數(shù)據(jù)庫(kù),MessageResouse,JSP,,(視圖),(控制器),Servlet/JSP容器,Struts框架結(jié)構(gòu),5/11/2020,華南師范大學(xué)軟件學(xué)院,24,3、Struts,——Struts的程序流程,JavaBean,JSP頁(yè)面,Client,Action,ActionServlet,ActionForm,1.HTTP請(qǐng)求,2.填充FormBean,3.轉(zhuǎn)發(fā)HTTP請(qǐng)求,4.調(diào)用ActionForm,5.調(diào)用JavaBean,6.回送ActionForward,7.轉(zhuǎn)發(fā)HTTP請(qǐng)求,8.調(diào)用JavaBean,9.HTTP響應(yīng),Struts-config.xml,Struts的程序流程,5/11/2020,華南師范大學(xué)軟件學(xué)院,25,3、Struts,——Struts1.x實(shí)例,Struts1.x實(shí)例(實(shí)現(xiàn)用戶登錄操作)用戶將看到一個(gè)登錄頁(yè)面,要求用戶輸入用戶名以及密碼如果用戶名以及密碼都是admin,提示登錄成功否則提示登錄失敗,,,,Login.jsp,login_error.jsp,login_success.jsp,5/11/2020,華南師范大學(xué)軟件學(xué)院,26,3、Struts,——Struts1.x實(shí)例,Struts1.x實(shí)例(實(shí)現(xiàn)用戶登錄操作)下載并解壓Struts項(xiàng)目從Apache網(wǎng)站下載struts;將壓縮包解壓到一個(gè)目錄,此目錄為STRUTS_HOME目錄;安裝Struts將STRUTS_HOME/lib目錄下的所有.jar文件拷貝到剛創(chuàng)建的web項(xiàng)目的/WEB-INF/lib目錄下;配置web.xml,添加Servlet映射配置;編寫(xiě)Action類、編寫(xiě)ActionForm類Action類處理業(yè)務(wù)流程;ActionForm類不是必須的,如果要接收客戶端提交的數(shù)據(jù)時(shí)需要;配置struts-config.xml在struts-config.xml文件中配置Action和ActionForm;編寫(xiě)相應(yīng)JSP頁(yè)面,5/11/2020,華南師范大學(xué)軟件學(xué)院,27,3、Struts,——web.xml的配置,actionorg.apache.struts.action.ActionServletconfig/WEB-INF/struts-config.xml2action*.do,struts-config.xml存放路徑,在顯示層所有以*.do為擴(kuò)展名提交的URL,都會(huì)交由這個(gè)Servlet來(lái)處理。,5/11/2020,華南師范大學(xué)軟件學(xué)院,28,3、Struts,——struts-config.xml的配置,,指定Struts應(yīng)用中所有使用的ActionForm對(duì)象,ActionForm對(duì)象指定處理相關(guān)業(yè)務(wù)的Action,Action處理完業(yè)務(wù)后的跳轉(zhuǎn)頁(yè)面,5/11/2020,華南師范大學(xué)軟件學(xué)院,29,3、Struts,——LoginActionForm.java,publicclassLoginActionFormextendsActionForm{privateStringuserName;privateStringpassWord;publicStringgetUserName(){returnuserName;}publicvoidsetUserName(StringuserName){this.userName=userName;}publicStringgetPassWord(){returnpassWord;}publicvoidsetPassWord(StringpassWord){this.passWord=passWord;}},5/11/2020,華南師范大學(xué)軟件學(xué)院,30,3、Struts,——LoginAction.java,publicclassLoginActionextendsAction{publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{Stringpath="error";LoginActionFormloginActionForm=(LoginActionForm)form;StringuserName=loginActionForm.getUserName();StringpassWord=loginActionForm.getPassWord();if(null!=userName}},5/11/2020,華南師范大學(xué)軟件學(xué)院,31,3、Struts,——LoginAction應(yīng)用程序的流程圖,LoginAction應(yīng)用程序的流程圖,5/11/2020,華南師范大學(xué)軟件學(xué)院,32,3、Struts,——Struts1.x與Struts2.x,Struts2同為MVC設(shè)計(jì)模式的開(kāi)源框架在Struts2并不是在原有的Struts1.x基礎(chǔ)上的升級(jí)版本,而是來(lái)處另外一個(gè)非常有名的MVC框架WebWork。,官方描述:,Struts1.x存在的問(wèn)題:在表現(xiàn)層技術(shù)單一與ServletAPI耦合嚴(yán)重,不便于測(cè)試代碼嚴(yán)重依賴StrutsAPI單元測(cè)試?yán)щy令人頭痛的ActionForm,Struts2的特點(diǎn)無(wú)需與ServletAPI整合,更容易測(cè)試優(yōu)雅的請(qǐng)求參數(shù)封裝靈活的視圖技術(shù)豐富的表達(dá)式語(yǔ)言機(jī)動(dòng),靈活,簡(jiǎn)單的配置線程安全的控制器(Action),5/11/2020,華南師范大學(xué)軟件學(xué)院,33,3、Struts,——Struts2.x框架結(jié)構(gòu),Struts2框架結(jié)構(gòu)Struts2的體系與Struts1.x體系差別非常大,因?yàn)镾truts2使用了WebWork的設(shè)計(jì)核心(XWork)。在Struts2中使用攔截器來(lái)處理用戶請(qǐng)求,從而允許用戶業(yè)務(wù)邏輯控制器與ServletAPI分離。,5/11/2020,華南師范大學(xué)軟件學(xué)院,34,3、Struts,——Struts2.x框架結(jié)構(gòu),Struts2框架結(jié)構(gòu)Struts2的體系與Struts1.x體系差別非常大,因?yàn)镾truts2使用了WebWork的設(shè)計(jì)核心(XWork)。在Struts2中使用攔截器來(lái)處理用戶請(qǐng)求,從而允許用戶業(yè)務(wù)邏輯控制器與ServletAPI分離。,5/11/2020,華南師范大學(xué)軟件學(xué)院,35,3、Struts,——Struts2的核心思想,仍然是MVC設(shè)計(jì)模式Struts2的控制器由兩部分組成FilterDispatcher業(yè)務(wù)邏輯ActionStruts2提供了豐富的視圖展示JSPFreeMarker、VelocityJasperReport等報(bào)表類型AOP(AspectOrientedProgramming)面向方面編程實(shí)現(xiàn)在執(zhí)行Action的前后Structs2提供了大量攔截器來(lái)完成通用功能,5/11/2020,華南師范大學(xué)軟件學(xué)院,36,3、Struts,——補(bǔ)充:面向方面編程AOP,OOP選擇對(duì)象作為模塊的主要單元,將對(duì)象與系統(tǒng)的所有行為聯(lián)系起來(lái)對(duì)象成為問(wèn)題領(lǐng)域和計(jì)算過(guò)程的主要元素問(wèn)題:存在著許多橫切關(guān)注點(diǎn)(如安全性檢查、日志記錄、異常處理等)實(shí)現(xiàn)代碼和其他業(yè)務(wù)邏輯代碼混雜在一起、降低了模塊的可重用性AOP簡(jiǎn)介(也叫面向切面編程)目標(biāo):對(duì)業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離主要功能:日志記錄,性能統(tǒng)計(jì),安全控制,事務(wù)處理,異常處理等等主要意圖:將日志記錄等代碼從業(yè)務(wù)邏輯代碼中劃分出來(lái)通過(guò)對(duì)這些行為的分離,將它們獨(dú)立到非指導(dǎo)業(yè)務(wù)邏輯的方法中,進(jìn)而改變這些行為的時(shí)候不影響業(yè)務(wù)邏輯的代碼。,5/11/2020,華南師范大學(xué)軟件學(xué)院,37,3、Struts,——補(bǔ)充:面向方面編程AOP,AOP與OOP抽象類—Dog類Poodle繼承了Dog,Dog,Poodle,ObedientDog,定義標(biāo)識(shí)為ObedientDog的類,不是所有的Dogs都很馴服如果要ObedientDog類繼承Dog類,那么Poodle放在這個(gè)層次結(jié)構(gòu)中的哪個(gè)位置合適呢?,?,Obedient看作一個(gè)方面應(yīng)用到任何一類馴服的Dog我們反對(duì)以不恰當(dāng)?shù)姆绞綇?qiáng)制將該行為放在Dog層次結(jié)構(gòu)中,5/11/2020,華南師范大學(xué)軟件學(xué)院,38,3、Struts,——Struts2.x攔截器,攔截器(Interceptor)Struts2的核心組成部分例如文件的上傳和下載、國(guó)際化、轉(zhuǎn)換器和數(shù)據(jù)校驗(yàn)等,Struts2利用內(nèi)建的攔截器完成Struts2文檔中對(duì)攔截器的解釋為:攔截器是動(dòng)態(tài)攔截Action調(diào)用的對(duì)象;提供了一種機(jī)制,使開(kāi)發(fā)者可以定義一個(gè)特定的功能模塊這個(gè)模塊可以在Action執(zhí)行之前或者之后運(yùn)行也可以在一個(gè)Action執(zhí)行之前阻止Action執(zhí)行同時(shí)也提供了一種可以提取Action中可重用的部分的方式。攔截器是AOP的一種實(shí)現(xiàn),底層通過(guò)動(dòng)態(tài)代理模式完成。,5/11/2020,華南師范大學(xué)軟件學(xué)院,39,3、Struts,——Struts2.x攔截器,Struts2.x的攔截器,FilterDispatcher,,,ActionProxy,,類型轉(zhuǎn)換攔截器,,文件上傳攔截器等,Action,,Result,,,初始化并調(diào)用execute方法,攔截并處理用戶請(qǐng)求,然后到Action的execute方法處理用戶請(qǐng)求,,返回邏輯視圖,系統(tǒng)負(fù)責(zé)將邏輯視圖對(duì)應(yīng)的資源顯示給用戶,5/11/2020,華南師范大學(xué)軟件學(xué)院,40,3、Struts,——Struts2.x實(shí)例,Struts2.x實(shí)例(實(shí)現(xiàn)用戶登錄操作)導(dǎo)入Struts2類庫(kù)(以struts2.1.6為例),將其WEB-INF/lib目錄中的JAR拷貝到Project的WEB-INF/lib目錄下),5/11/2020,華南師范大學(xué)軟件學(xué)院,41,3、Struts,——Struts2.x實(shí)例,Struts2.x實(shí)例(實(shí)現(xiàn)用戶登錄操作)在web.xml文件中配置FilterDispatcher,struts2.0org.apache.struts2.dispatcher.FilterDispatcherstruts2.0/*,5/11/2020,華南師范大學(xué)軟件學(xué)院,42,3、Struts,——Struts2.x實(shí)例,Struts2.x實(shí)例(實(shí)現(xiàn)用戶登錄操作)在開(kāi)發(fā)Action,publicclassLoginAction{privateStringname;privateStringpassword;publicStringexecute()throwsException{if(this.name.equals(“admin")}setter/getter},實(shí)現(xiàn)業(yè)務(wù)邏輯處理,5/11/2020,華南師范大學(xué)軟件學(xué)院,43,3、Struts,——Struts2.x實(shí)例,Struts2.x實(shí)例(實(shí)現(xiàn)用戶登錄操作)配置struts.xml文件在WEB-INF/classes錄下創(chuàng)建struts.xml文件,/login_success.jsp/login_error.jsp,對(duì)Action類進(jìn)行配置,編寫(xiě)相關(guān)JSP文件,3、Hibernate,——ORM簡(jiǎn)介,對(duì)象關(guān)系映射(ObjectRelationalMapping,簡(jiǎn)稱ORM)ORM是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫(kù)存在的互不匹配的現(xiàn)象的技術(shù)。簡(jiǎn)單說(shuō),是將對(duì)象和對(duì)象之間的關(guān)系對(duì)應(yīng)的到數(shù)據(jù)庫(kù)表和表之間的關(guān)系。持久化和持久化層持久化,把內(nèi)存中的數(shù)據(jù)保存到數(shù)據(jù)庫(kù)(如關(guān)系數(shù)據(jù)庫(kù))或永久設(shè)備(如、硬盤(pán))中。,持久化,數(shù)據(jù)庫(kù),存儲(chǔ)設(shè)備,數(shù)據(jù),對(duì)象,,內(nèi)存,,裝載,持久化原理,5/11/2020,華南師范大學(xué)軟件學(xué)院,44,3、Hibernate,——持久化和持久化層,持久化和持久化層持久化層,專門負(fù)責(zé)持久化工作的邏輯層,由它統(tǒng)一與數(shù)據(jù)庫(kù)層打交道,不難發(fā)現(xiàn)持久層封裝了所有與數(shù)據(jù)庫(kù)有關(guān)的操作和細(xì)節(jié),5/11/2020,華南師范大學(xué)軟件學(xué)院,45,3、Hibernate,——實(shí)體域模型與關(guān)系數(shù)據(jù)模型,實(shí)體域模型與關(guān)系數(shù)據(jù)模型實(shí)體域模型是對(duì)真實(shí)世界物質(zhì)實(shí)體(如學(xué)生、老師、商品等)的抽象。關(guān)系數(shù)據(jù)模型則是對(duì)關(guān)系型數(shù)據(jù)庫(kù)中關(guān)系數(shù)據(jù)(如表、視圖等)的一種靜態(tài)描述。,5/11/2020,華南師范大學(xué)軟件學(xué)院,46,,City.java,City的數(shù)據(jù)表,實(shí)體域模型示面向?qū)ο蟮?,而關(guān)系數(shù)據(jù)模型是面向關(guān)系型數(shù)據(jù)庫(kù)的。他們之間的數(shù)據(jù)交換需要一個(gè)映射過(guò)程(對(duì)象-關(guān)系映射),3、Hibernate,——ORM簡(jiǎn)介,如何進(jìn)行對(duì)象-關(guān)系數(shù)據(jù)庫(kù)的匹配?,5/11/2020,華南師范大學(xué)軟件學(xué)院,47,使用JDBC手工轉(zhuǎn)換。使用ORM(對(duì)象關(guān)系映射)框架來(lái)解決,主流的ORM框架有Hibernate、iBATIS、OJB等。,3、Hibernate,——實(shí)體域模型與關(guān)系數(shù)據(jù)模型,實(shí)體域?qū)ο驝ity與關(guān)系數(shù)據(jù)表City之間可以通過(guò)Hibernate的映射文件City.hbm.xml進(jìn)行映射。,5/11/2020,華南師范大學(xué)軟件學(xué)院,48,,,Class元素定義了一個(gè)持久化類Name指定一個(gè)類名,table指定一個(gè)表名,,Id元素定義了屬性到數(shù)據(jù)庫(kù)表主鍵字段的映射,City.hbm.xml,3、Hibernate,——Hibernate簡(jiǎn)介,Hibernate簡(jiǎn)介,5/11/2020,華南師范大學(xué)軟件學(xué)院,49,一個(gè)面向Java環(huán)境的對(duì)象/關(guān)系數(shù)據(jù)庫(kù)映射工具;一個(gè)輕量級(jí)的ORM框架;用來(lái)把對(duì)象模型表示的對(duì)象映射到基于SQL的關(guān)系模型數(shù)據(jù)結(jié)構(gòu)中去;獨(dú)立的持久層框架,不與具體服務(wù)器相關(guān);除提供對(duì)象關(guān)系映射,同時(shí)提供了數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法。,Hibernate的優(yōu)缺點(diǎn):不需要編寫(xiě)的SQL語(yǔ)句移植性好實(shí)現(xiàn)了透明持久化代碼測(cè)試方便,Hibernate使用范圍:針對(duì)單個(gè)對(duì)象進(jìn)行修改編輯時(shí),適用對(duì)象之間有著很清晰的關(guān)系,適用批量性添加、修改時(shí),不適用要求使用數(shù)據(jù)庫(kù)中特定的功能時(shí),不適用,3、Hibernate,——Hibernate體系結(jié)構(gòu),Hibernate作為模型層/數(shù)據(jù)訪問(wèn)層。它通過(guò)配置文件(hibernate.cfg.xml或hibernate.properties)和映射文件(*.hbm.xml)把java對(duì)象或持久化對(duì)象(PersistentObject,PO)映射到數(shù)據(jù)庫(kù)中的數(shù)據(jù)表,然后通過(guò)操作PO,對(duì)數(shù)據(jù)庫(kù)中的表進(jìn)行各種操作。,5/11/2020,華南師范大學(xué)軟件學(xué)院,50,應(yīng)用程序,,數(shù)據(jù)庫(kù),持久化對(duì)象,Hibernate配置:如:hibernate.cfg.xml或hibernate.properties,Hibernatel體系結(jié)構(gòu),Hibernate映射:如:City.hbm.xml,3、Hibernate,——Hibernate實(shí)例,5/11/2020,華南師范大學(xué)軟件學(xué)院,51,Hibernate實(shí)例(實(shí)現(xiàn)用戶登錄操作),用拷貝支持lib和Hibernate應(yīng)用包到Struts應(yīng)用的WEB-INF\lib目錄下,創(chuàng)建數(shù)據(jù)庫(kù)表–REGISTEDUSERS,3、Hibernate,——Hibernate實(shí)例,5/11/2020,華南師范大學(xué)軟件學(xué)院,52,Hibernate實(shí)例(實(shí)現(xiàn)用戶登錄操作),用拷貝支持lib和Hibernate應(yīng)用包到Struts應(yīng)用的WEB-INF\lib目錄下,創(chuàng)建數(shù)據(jù)庫(kù)表–REGISTEDUSERS,創(chuàng)建創(chuàng)建持久化類–User,3、Hibernate,——Hibernate實(shí)例,5/11/2020,華南師范大學(xué)軟件學(xué)院,53,Hibernate實(shí)例(實(shí)現(xiàn)用戶登錄操作),用拷貝支持lib和Hibernate應(yīng)用包到Struts應(yīng)用的WEB-INF\lib目錄下,創(chuàng)建數(shù)據(jù)庫(kù)表–REGISTEDUSERS,創(chuàng)建創(chuàng)建持久化類–User,創(chuàng)建配置文件--User.hbm.xml,3、Hibernate,——Hibernate實(shí)例,5/11/2020,華南師范大學(xué)軟件學(xué)院,54,Hibernate實(shí)例(實(shí)現(xiàn)用戶登錄操作),用拷貝支持lib和Hibernate應(yīng)用包到Struts應(yīng)用的WEB-INF\lib目錄下,創(chuàng)建數(shù)據(jù)庫(kù)表–REGISTEDUSERS,創(chuàng)建創(chuàng)建持久化類–User,創(chuàng)建配置文件--User.hbm.xml,在Hibernate配置文件中增加映射內(nèi)容–hibernate.cfg.xml,3、Hibernate,——Hibernate實(shí)例,5/11/2020,華南師范大學(xué)軟件學(xué)院,55,Hibernate實(shí)例(實(shí)現(xiàn)用戶登錄操作),用拷貝支持lib和Hibernate應(yīng)用包到Struts應(yīng)用的WEB-INF\lib目錄下,創(chuàng)建數(shù)據(jù)庫(kù)表–REGISTEDUSERS,創(chuàng)建創(chuàng)建持久化類–User,創(chuàng)建配置文件--User.hbm.xml,在Hibernate配置文件中增加映射內(nèi)容,編寫(xiě)DAO接口和實(shí)現(xiàn),3、Hibernate,——Hibernate實(shí)例,5/11/2020,華南師范大學(xué)軟件學(xué)院,56,Hibernate實(shí)例(實(shí)現(xiàn)用戶登錄操作),用拷貝支持lib和Hibernate應(yīng)用包到Struts應(yīng)用的WEB-INF\lib目錄下,創(chuàng)建數(shù)據(jù)庫(kù)表–REGISTEDUSERS,創(chuàng)建創(chuàng)建持久化類–User,創(chuàng)建配置文件--User.hbm.xml,在Hibernate配置文件中增加映射內(nèi)容,編寫(xiě)DAO接口和實(shí)現(xiàn),3、Hibernate,——Hibernate實(shí)例,5/11/2020,華南師范大學(xué)軟件學(xué)院,57,Hibernate實(shí)例(實(shí)現(xiàn)用戶登錄操作),用拷貝支持lib和Hibernate應(yīng)用包到Struts應(yīng)用的WEB-INF\lib目錄下,創(chuàng)建數(shù)據(jù)庫(kù)表–REGISTEDUSERS,創(chuàng)建創(chuàng)建持久化類–User,創(chuàng)建配置文件--User.hbm.xml,在Hibernate配置文件中增加映射內(nèi)容,編寫(xiě)DAO接口和實(shí)現(xiàn),在Struts的ActionBean中訪問(wèn)DAO接口,5/11/2020,華南師范大學(xué)軟件學(xué)院,58,讀取并解析配置文件讀取并解析映射信息,創(chuàng)建SessionFactory打開(kāi)Sesssion創(chuàng)建事務(wù)Transation持久化操作提交事務(wù)關(guān)閉Session關(guān)閉SesstionFactory,3、Hibernate,——Hibernate工作流程,Hibernate工作流程,3、Hibernate,——Hibernate工作流程,5/11/2020,華南師范大學(xué)軟件學(xué)院,59,Hibernate工作流程,啟動(dòng)hibernate,構(gòu)建configuration實(shí)例,初始化該實(shí)例中的所有變量,加載hibernate.cfg.xml文件至該實(shí)例(內(nèi)存),通過(guò)hibernate.cfg.xml文件中的mapping節(jié)點(diǎn)配置加載*.hbm.xml至該實(shí)例(內(nèi)存),,,,利用configuration實(shí)例創(chuàng)建一個(gè)工廠類SessionFactory實(shí)例,SessionFactory類創(chuàng)建連接,SessionFactory實(shí)例創(chuàng)建事務(wù)接口,通過(guò)session接口提供的各種方法操縱數(shù)據(jù)庫(kù),提交數(shù)據(jù)庫(kù)事務(wù),關(guān)閉session,,,,,,,,,,3、Spring,——Spring簡(jiǎn)介,5/11/2020,華南師范大學(xué)軟件學(xué)院,60,Spring為企業(yè)應(yīng)用的開(kāi)發(fā)提供了一個(gè)輕量級(jí)的解決方案目標(biāo):使現(xiàn)有技術(shù)更加易用,推進(jìn)編碼最佳實(shí)踐內(nèi)容:依賴注入,AOP實(shí)現(xiàn)(聲明式事務(wù)),DAO/ORM支持,Web集成等框架的主要優(yōu)勢(shì)之一就是其分層架構(gòu)由7個(gè)定義良好的模塊組成。Spring模塊構(gòu)建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理bean的方式。,SpringAOP,SpringORM,SpringDAO,Springweb,Springcontext,SpringWebMVC,Springcore,Spring框架的7個(gè)模塊,3、Spring,——Spring框架,5/11/2020,華南師范大學(xué)軟件學(xué)院,61,SpringAOP,SpringORM,SpringDAO,Springweb,Springcontext,SpringWebMVC,Springcore,提供Spring框架的基本功能主要組件是BeanFactory,它是工廠模式的實(shí)現(xiàn),一個(gè)配置文件向Spring框架提供上下文信息,提供了有意義的異常層次結(jié)構(gòu)可用該結(jié)構(gòu)來(lái)管理異常處理和不同數(shù)據(jù)庫(kù)供應(yīng)商拋出的錯(cuò)誤消息,通過(guò)配置管理特性集成了面向方面的編程功能,提供了ORM的對(duì)象關(guān)系工具,為基于Web的應(yīng)用程序提供了上下文,全功能的構(gòu)建Web應(yīng)用程序的MVC實(shí)現(xiàn),Spring框架,3、Spring,——工廠模式通過(guò)把JSF與EJB3.0組件合并在一起,從而為開(kāi)發(fā)基于Web的企業(yè)應(yīng)用程序提供一個(gè)最新的模式。Seam可以讓你把EJB組件直接綁定到JSF頁(yè)面。Seam能夠統(tǒng)一和集成現(xiàn)有的開(kāi)源技術(shù)集成如Facelets、Hibernate、jBPM、Drools、Groovy、JavaPortlets、BPM、AJAX、iText等ExpressoFramework一個(gè)基于開(kāi)放標(biāo)準(zhǔn)的J2EE體系框架,可以讓開(kāi)發(fā)者專注于應(yīng)用程序邏輯;是一個(gè)可擴(kuò)展JavaServer應(yīng)用程序框架組件庫(kù),用于創(chuàng)建基于開(kāi)放標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)的Web應(yīng)用程序;Expresso和ApacheJakartaStruts集成在一起,后者強(qiáng)調(diào)表達(dá)和應(yīng)用的配置并為Expresso提供了一個(gè)功能強(qiáng)大的標(biāo)簽庫(kù)。,5、書(shū)籍推薦,《輕量級(jí)JavaEE企業(yè)應(yīng)用實(shí)戰(zhàn):Struts2+Spring+Hibernate整合開(kāi)發(fā)》作者:李剛著,《Spring3.x企業(yè)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)》作者:陳雄華,謝謝觀看,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- JEE 開(kāi)發(fā) 常用軟件 體系 架構(gòu) 模式
鏈接地址:http://zhongcaozhi.com.cn/p-12559869.html