<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    如何學(xué)好java

    如何學(xué)好java,其實(shí)很簡單,只要用心體會,慢慢積累!
    posts - 106, comments - 7, trackbacks - 0, articles - 3
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    MVC三層模型(struts+spring+hibernate)總結(jié)

    Posted on 2011-05-20 17:00 哈希 閱讀(313) 評論(0)  編輯  收藏 所屬分類: java 常用框架

    簡單的說:

    struts 控制用的

    hibernate 操作數(shù)據(jù)庫的

    spring 用解耦的

    詳細(xì)的說:

    STRUTS 在 SSH 框架中起控制的作用 , 其核心是 Controller, 即 ActionServlet, 而 ActionServlet 的核心就是 Struts-confi g.xml. 主要控制邏輯關(guān)系的處理 .

    hibernate 是數(shù)據(jù)持久化層 , 是一種新的對象、關(guān)系的映射工具 , 提供了從 Java 類到數(shù)據(jù)表的映射,也提供了數(shù)據(jù)查詢和恢復(fù)等機(jī)制 , 大大減少數(shù)據(jù)訪問的復(fù)雜度。把對數(shù)據(jù)庫的直接操作 , 轉(zhuǎn)換為對持久對象的操作 .

    SPRING 是一個輕量級的控制反轉(zhuǎn) (IoC) 和面向切面 (AOP) 的容器框架 , 面向接口的編程 , 由容器控制程序之間的(依賴)關(guān)系,而非傳統(tǒng)實(shí)現(xiàn)中,由程序代碼直接操控。這也就是所謂 “ 控制反轉(zhuǎn) ” 的概念所在:(依賴)控制權(quán)由應(yīng)用代碼中轉(zhuǎn)到了外部容器,控制權(quán)的轉(zhuǎn)移,是所謂反轉(zhuǎn)。依賴注入,即組件之間的依賴關(guān)系由容器在運(yùn)行期決定,形象的來說,即由容器動態(tài)的將某種依賴關(guān)系注入到組件之中

    起到的主要作用是解耦

    Struts 、 spring 、 Hibernate 在各層的作用

    1 ) struts 負(fù)責(zé) web 層 .

    ActionFormBean 接收網(wǎng)頁中表單提交的數(shù)據(jù),然后通過 Action 進(jìn)行處理,再 Forward 到對應(yīng)的網(wǎng)頁。

    在 struts-config.xml 中定義 <action-mapping>, ActionServlet 會加載。

    2 ) spring 負(fù)責(zé)業(yè)務(wù)層管理,即 Service (或 Manager).

    1 . service 為 action 提供統(tǒng)計(jì)的調(diào)用接口,封裝持久層的 DAO.

    2 .可以寫一些自己的業(yè)務(wù)方法。

    3 .統(tǒng)一的 javabean 管理方法

    4 .聲明式事務(wù)管理(http://www.cnblogs.com/rushoooooo/archive/2011/08/28/2155960.html

    5. 集成 Hiberante

    3 ) Hiberante ,負(fù)責(zé)持久化層,完成數(shù)據(jù)庫的 crud 操作

    hibernate 為持久層,提供 OR/Mapping 。

    它有一組 .hbm.xml 文件和 POJO, 是跟數(shù)據(jù)庫中的表相對應(yīng)的。然后定義 DAO ,這些是跟數(shù)據(jù)庫打交道的類,它們會使用 PO 。

    在 struts+spring+hibernate 的系統(tǒng)中,

    對象的調(diào)用流程是: jsp-> Action - > Service ->DAO ->Hibernate 。

    數(shù)據(jù)的流向是 ActionFormBean 接受用戶的數(shù)據(jù), Action 將數(shù)據(jù)從 ActionFromBean 中取出,封裝成 VO 或 PO,

    再調(diào)用業(yè)務(wù)層的 Bean 類,完成各種業(yè)務(wù)處理后再 forward 。而業(yè)務(wù)層 Bean 收到這個 PO 對象之后,會調(diào)用 DAO 接口方法,進(jìn)行持久化操作。

     

     

     

    spring:Aop管理事務(wù)控制,IoC管理各個組件的耦合,DaoTemplate作為常規(guī)持久層的快速開發(fā)模板!

    struts:控制層Action,頁面標(biāo)簽和Model數(shù)據(jù),調(diào)用業(yè)務(wù)層

    Hibernate:負(fù)責(zé)數(shù)據(jù)庫和對象的映射,負(fù)責(zé)DAO層(Data Access Object:數(shù)據(jù)訪問)

     

    spring整合hibernate和struts,只要在配好了applicationContext.xml,在struts的action中直接調(diào)用就可以了。hibernate訪問數(shù)據(jù)庫的操作都在spring中實(shí)現(xiàn)了,spring的調(diào)用又在stuts的action中實(shí)現(xiàn)了。這個ssh框架就連到了一起……

     

     

    1 SSH在開發(fā)中的位置

    現(xiàn)在J2EE的開源框架多的數(shù)不清楚,目前(已經(jīng)、正在)比較流行的常用框架大概有struts,spring,hibernate,jsf,webwork,而 struts+spring+hibernate(SSH)這種輕量級架構(gòu)被譽(yù)為“黃金組合”。spring和hibernate更是被許多人認(rèn)為是未來五年內(nèi)不會被淘汰的技術(shù),猶如當(dāng)年的struts,今天的開發(fā)中依然被廣泛采用。

    2 為什么使用SSH  

    其實(shí),就算用Java建造一個不是很煩瑣的web應(yīng)用,也不是件輕松的事情。 在構(gòu)架的一開始就有很多事情要考慮。從高處看,擺在開發(fā)者面前有很多問題:要考慮是怎樣建立用戶接口?在哪里處理業(yè)務(wù)邏輯? 怎樣持久化的數(shù)據(jù)。 而這三層構(gòu)架中,每一層都有他們要仔細(xì)考慮的。 各個層該使用什么技術(shù)?怎樣的設(shè)計(jì)能松散耦合還能靈活改變? 怎樣替換某個層而不影響整體構(gòu)架?應(yīng)用程序如何做各種級別的業(yè)務(wù)處理(比如事務(wù)處理)?

        構(gòu)架一個Web應(yīng)用需要弄明白好多問題。 幸運(yùn)的是,已經(jīng)有不少開發(fā)者已經(jīng)遇到過這類問題,并且建立了處理這類問題的框架。 一個好框架具備以下幾點(diǎn):減輕開發(fā)者處理復(fù)雜的問題的負(fù)擔(dān)("不重復(fù)發(fā)明輪子");內(nèi)部有良好的擴(kuò)展; 并且有一個支持它的強(qiáng)大的用戶團(tuán)體。 好的構(gòu)架一般有針對性的處理某一類問題,并且能將它做好(Do One Thing well)。 然而,你的程序中有幾個層可能需要使用特定的框架,已經(jīng)完成的UI(用戶接口) 并不代表你也可以把你的業(yè)務(wù)邏輯和持久邏輯偶合到你的UI部分。 舉個例子,你不該在一個Controller(控制器)里面寫JDBC代碼作為你的業(yè)務(wù)邏輯, 這不是控制器應(yīng)該提供的。 一個UI 控制器應(yīng)該委派給其它給在UI范圍之外的輕量級組件。 好的框架應(yīng)該能指導(dǎo)代碼如何分布。 更重要的是,框架能把開發(fā)者從編碼中解放出來,使他們能專心于應(yīng)用程序的邏輯(這對客戶來說很重要)。 

    他們里面有很我優(yōu)秀的設(shè)計(jì)理念及模式應(yīng)用。比如, struts屬于MVC框架,關(guān)鍵是要了解MVC的概念及大致原理,掌握就很容易了;而hibernate屬于orm系統(tǒng),屬于持久層的解決方案,同樣需要對ORM的概念及原理有一個總體的了解,必要時可以去查查EJB1及EJB2里面用于持久層的Entity Bean的使用。而spring屬于應(yīng)用程序框架,其核心是IOC容器以及AOP,把這兩個核心概念(也可稱為大模式)了解以后,再加上一定的內(nèi)力修為,其它就都不難了。Spring中還集成了很多適用東西(不過這些東西80%的在某一個項(xiàng)目中可能一直用不上),比如對JDBC的封裝、自己的MVC、對動態(tài)語言的簡潔訪問等,這些你根據(jù)自己的項(xiàng)目情況來選擇學(xué)習(xí),用到的時候再看看他的文檔,一個項(xiàng)目下來應(yīng)該就能把握。

    3 對于SSH的理解

    在SSH框架中,struts用來解決MVC中顯示、請求控制部分,spring主要負(fù)責(zé)訪問數(shù)據(jù)庫DAO類的事務(wù)控制以及它被人稱譽(yù)的IOC思想在業(yè)務(wù)類中的恰當(dāng)運(yùn)用,hibernate主要是充當(dāng)數(shù)據(jù)訪問層組件。由于spring對hibernate的良好支持,在DAO類主要由spring來完成,hibernate更多關(guān)注的應(yīng)是O/R影射文件上的配置,如級聯(lián)關(guān)系,延遲加載等如何設(shè)置才能使效率更高。見圖1 (框架組合示意圖)

    4 收獲和問題

    4.1 actionform,PO,VO三對象的運(yùn)用

    討論最多的是actionform,PO,VO三對象的運(yùn)用,本人傾向的觀點(diǎn)是:在SSH框架中,PO和VO可以不必區(qū)分,即業(yè)務(wù)層和持久層都可以使用hibernate產(chǎn)生的PO對象,我暫時把對象分成actionform和po兩種來分析,action 應(yīng)該是actionform和po的分界點(diǎn),po不能穿透業(yè)務(wù)層,突破action到達(dá)頁面顯示層,同樣actionform也不能突破action傳到后臺業(yè)務(wù)、持久層。(原因:po是持久對象,到達(dá)頁面后就脫離了session成為無狀態(tài)(暫理解為脫管態(tài))的對象,而hibernate的持久對象是有狀態(tài)(包含數(shù)據(jù)庫主鍵)的,無狀態(tài)的對象傳到后臺在調(diào)用hibernate的保存方法時會出錯,一定要把無狀態(tài)的對象先轉(zhuǎn)化成持久態(tài)對象才能保存)在action中應(yīng)該對兩對象進(jìn)行轉(zhuǎn)化,轉(zhuǎn)化的方法目前我還沒發(fā)現(xiàn)有什么非常好的方法(歡迎高手不惜賜教),最普通的就是用get(),set()方法,也可以使用struts提供的屬性復(fù)制方法BeanUtils類,但這個好象只支持單個類的轉(zhuǎn)化,對于集合對象不行,需要我們自己擴(kuò)展。

    4.2 spring事務(wù)管理

    在配置spring的事務(wù)管理中,最好把事務(wù)控制配置在業(yè)務(wù)類上,而不要配置在DAO類(需要保證多個原子事務(wù)操作同時失敗回滾時這是一種解決辦法);

    4.3 action如何獲取業(yè)務(wù)類

    action中如何獲取業(yè)務(wù)類:寫一個父類action,在父類中通過spring的webapplicationcontent獲得業(yè)務(wù)類的實(shí)例。struts中的具體action繼承該父類,通過調(diào)用父類的getService()直接獲得業(yè)務(wù)類的實(shí)例。

    4.4 理解AOP思想

    深入理解AOP思想,我暫時感覺到的就是盡量面向接口編程,不管是域?qū)ο筮€是業(yè)務(wù)類或者是DAO類都設(shè)計(jì)出接口,在各方法中我們盡量傳入對象的接口,這對我們重用這些方法,擴(kuò)展是很有好處的。

    4.5 分頁處理 level

    5 系統(tǒng)包劃分

    主站蜘蛛池模板: 久久九九AV免费精品| 少妇性饥渴无码A区免费| 69成人免费视频| 亚洲日韩在线视频| 成年黄网站色大免费全看| 亚洲精品私拍国产福利在线| 久久免费美女视频| 亚洲狠狠久久综合一区77777| 一级毛片免费播放| 亚洲人成影院在线高清| 成人黄页网站免费观看大全| 亚洲乱亚洲乱妇无码| 国产午夜鲁丝片AV无码免费| 一级a性色生活片久久无少妇一级婬片免费放| 免费A级毛片无码久久版| 男人和女人高潮免费网站 | 亚洲人成小说网站色| 日韩一区二区a片免费观看 | 国产免费阿v精品视频网址| 亚洲A∨无码一区二区三区| 亚洲视频在线免费看| 亚洲日韩中文字幕一区| 亚洲精品国产自在久久 | 久久夜色精品国产噜噜噜亚洲AV| 1a级毛片免费观看| 亚洲国产欧美一区二区三区| 亚洲一区视频在线播放| 精品熟女少妇a∨免费久久| 亚洲成av人片在www鸭子| 国产亚洲精品激情都市| 精品国产污污免费网站aⅴ| 亚洲AV无码AV吞精久久| 亚洲国产成人一区二区精品区 | 99久久精品日本一区二区免费| 亚洲熟妇丰满xxxxx| 亚洲综合激情另类专区| 波多野结衣中文字幕免费视频| 美女的胸又黄又www网站免费| 亚洲av永久无码精品表情包| 无码高潮少妇毛多水多水免费| 香蕉视频在线免费看|