最近學(xué)習(xí)struts與hibernate相關(guān)知識,下面是個(gè)人對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)的對象中。
2)用戶發(fā)出請求后,ActionServlet接收到請求,查找與請求匹配的Action映射對象(ActionMapping)對象是否存在,是:將請求以及Actionform對象傳遞給相應(yīng)的Action對象。
3)Action調(diào)用業(yè)務(wù)邏輯服務(wù)接口,結(jié)合ActionForm,對用戶的請求做出處理。
4)Action處理完畢返回ActionForward對象給ActionServlet。ActionForward對象包含了轉(zhuǎn)發(fā)目標(biāo)對象,可以是jsp或Action。
5)ActionServlet根據(jù)ActionForward對象的指向繼續(xù)轉(zhuǎn)發(fā)請求,重復(fù)從第2步進(jìn)行處理。
至此,我們對struts 的基本工作流程有個(gè)整體的認(rèn)識,但還沒提hibernate相關(guān)的任何知識,業(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的初始化,對持久化對象進(jìn)行存取,更新等操作。
下面簡要介始一下這些接口。
1、Configuration接口 是Hibernate應(yīng)用的入口,在開始使用Hibernate的各種功能之前需要先創(chuàng)建Configuration對象。它負(fù)責(zé)加載Hibernate 應(yīng)用配置文件,如Configuration cf = new Configuration.configure("com/myproj/hibernate/configs/hibernate.cfg.xml");
2、SessionFactory接口 緩存了Configuration對象所包含的配置信息,能根據(jù)映射信息自動(dòng)生成SQL語句,并提供生成Session對象的方法。
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();等等持久化操作。
至此,簡單介紹了hibernate 是怎樣工作的,其實(shí)我只想讓你清楚:“Hibernate是個(gè)獨(dú)立的框架,它不依賴任何的Web Server或Application Server,就是說不需要這些支持。”
那么,我們要回到主題來:如何集成struts與hibernate開發(fā)?答案很簡單:hibernate和struts本質(zhì)上是沒什么聯(lián)系的,只要你記住: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,對用戶的請求做出處理。”,不難得出:
用戶請求后,struts負(fù)責(zé)找到相應(yīng)的Action對象,Action調(diào)用業(yè)務(wù)邏輯服務(wù)接口,業(yè)務(wù)邏輯服務(wù)接口調(diào)用DAO接口(這里默認(rèn)的實(shí)現(xiàn)就用hibernate,當(dāng)然, 還可以有多種對數(shù)據(jù)庫操作的實(shí)現(xiàn))
hibernate充當(dāng)下面這張圖中的"持久層(DAO)"

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