最近學(xué)習(xí)struts與hibernate相關(guān)知識(shí),下面是個(gè)人對(duì)struts與hibernate集成開發(fā)的一些見解,寫出來跟大家共同討論、學(xué)習(xí),歡迎指教。
要集成struts與hibernate進(jìn)行開發(fā),首先應(yīng)該了解一下struts和hibernate框架各自的工作原理和模式般的開發(fā)流程。
首先介紹struts的大概工作流程,下面通過一張struts工作的時(shí)序圖來說明其工作流程:

Struts工作流程分析:
1)Web服務(wù)器啟動(dòng),初始化ActionServlet,讀取struts-config.xml文件配置信息,把這些信息分發(fā)到相應(yīng)的對(duì)象中。
2)用戶發(fā)出請(qǐng)求后,ActionServlet接收到請(qǐng)求,查找與請(qǐng)求匹配的Action映射對(duì)象(ActionMapping)對(duì)象是否存在,是:將請(qǐng)求以及Actionform對(duì)象傳遞給相應(yīng)的Action對(duì)象。
3)Action調(diào)用業(yè)務(wù)邏輯服務(wù)接口,結(jié)合ActionForm,對(duì)用戶的請(qǐng)求做出處理。
4)Action處理完畢返回ActionForward對(duì)象給ActionServlet。ActionForward對(duì)象包含了轉(zhuǎn)發(fā)目標(biāo)對(duì)象,可以是jsp或Action。
5)ActionServlet根據(jù)ActionForward對(duì)象的指向繼續(xù)轉(zhuǎn)發(fā)請(qǐng)求,重復(fù)從第2步進(jìn)行處理。
至此,我們對(duì)struts 的基本工作流程有個(gè)整體的認(rèn)識(shí),但還沒提hibernate相關(guān)的任何知識(shí),業(yè)務(wù)邏輯層也只是在第3)點(diǎn)微提一下。
接下來,我們來看下hibernate是怎樣工作的?(注:在這不是討論ORM的實(shí)現(xiàn),只討論怎讓hibernate這ORM中間件工作)
Hibernate是個(gè)獨(dú)立的框架,它不依賴任何的Web Server或Application Server,就是說不需要這些支持。
Hibernate有五個(gè)核心接口,分別為Configuratoin, SessionFactory, Session,Query及Criteria。通過這些接口就可以完成hibernate的初始化,對(duì)持久化對(duì)象進(jìn)行存取,更新等操作。
下面簡(jiǎn)要介始一下這些接口。
1、Configuration接口 是Hibernate應(yīng)用的入口,在開始使用Hibernate的各種功能之前需要先創(chuàng)建Configuration對(duì)象。它負(fù)責(zé)加載Hibernate 應(yīng)用配置文件,如Configuration cf = new Configuration.configure("com/myproj/hibernate/configs/hibernate.cfg.xml");
2、SessionFactory接口 緩存了Configuration對(duì)象所包含的配置信息,能根據(jù)映射信息自動(dòng)生成SQL語(yǔ)句,并提供生成Session對(duì)象的方法。
3、Session接口提供一系列持久化的操作。
到此,可以寫一小段代碼來加看下如何使用hibernate
Configuration cf = new Configuration.configure("com/myproj/hibernate/configs/hibernate.cfg.xml");//配置文件不在此作介紹
SessionFactory sessionFactory = cf.buildSessionFactory();
Session session = sessionFactory.openSession();
session.update();
session.save();等等持久化操作。
至此,簡(jiǎn)單介紹了hibernate 是怎樣工作的,其實(shí)我只想讓你清楚:“Hibernate是個(gè)獨(dú)立的框架,它不依賴任何的Web Server或Application Server,就是說不需要這些支持。”
那么,我們要回到主題來:如何集成struts與hibernate開發(fā)?答案很簡(jiǎn)單:hibernate和struts本質(zhì)上是沒什么聯(lián)系的,只要你記?。?span style="color: red">Hibernate是個(gè)獨(dú)立的框架,它不依賴任何的Web Server或Application Server。用DAO模式把hibernate持久化的操作封裝好,供業(yè)務(wù)邏輯服務(wù)類調(diào)用就可以?;剡^頭來看struts工作流時(shí)序圖的解釋的第三點(diǎn):“3)Action調(diào)用業(yè)務(wù)邏輯服務(wù)接口,結(jié)合ActionForm,對(duì)用戶的請(qǐng)求做出處理。”,不難得出:
用戶請(qǐng)求后,struts負(fù)責(zé)找到相應(yīng)的Action對(duì)象,Action調(diào)用業(yè)務(wù)邏輯服務(wù)接口,業(yè)務(wù)邏輯服務(wù)接口調(diào)用DAO接口(這里默認(rèn)的實(shí)現(xiàn)就用hibernate,當(dāng)然, 還可以有多種對(duì)數(shù)據(jù)庫(kù)操作的實(shí)現(xiàn))
hibernate充當(dāng)下面這張圖中的"持久層(DAO)"

由于本人對(duì)struts及hibernate認(rèn)識(shí)不深,寫這篇文章只是拋磚引玉,希望高手們發(fā)表意見指正錯(cuò)誤,多指教。