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