林 躍 楊 倩 蓋志靜 張志坤
(山東科技大學(xué),山東濟(jì)南 250000)
SSH框架的系統(tǒng)從功能上可分為三層:表示層(View)、業(yè)務(wù)邏輯層(Service)、數(shù)據(jù)持久層(Dao),便于開發(fā)人員短期時(shí)間內(nèi)搭建比較清晰、可復(fù)用性好的、利于維護(hù)的Web應(yīng)用程序。其中Struts技術(shù)實(shí)現(xiàn)控制業(yè)務(wù)跳轉(zhuǎn),Hibernate實(shí)現(xiàn)與數(shù)據(jù)庫(kù)交互,實(shí)現(xiàn)對(duì)數(shù)據(jù)的持久化工作,Spring則對(duì)Struts和Hibernate進(jìn)行統(tǒng)一的管理。
我們現(xiàn)在用的Struts框架一般來講是指Struts2框架,Struts2與Struts1兩者雖然名字相似,但設(shè)計(jì)思想有很大不同,在技術(shù)上沒有任何關(guān)系。Struts2是以WebWork為核心發(fā)展而來的,采用攔截器的機(jī)制來處理客戶端的請(qǐng)求,也正是這樣的設(shè)計(jì)方式使業(yè)務(wù)邏輯控制器和Servlet API完全脫離,降低程序的耦合性。在Struts2中,最重要的配置文件是struts.xml,需要編寫Action類來實(shí)現(xiàn)跳轉(zhuǎn),每個(gè)Action類中都有不同的方法返回不同的返回值,根據(jù)struts.xml所配置的result指向的JSP或者Action類進(jìn)行跳轉(zhuǎn)。
Spring是一款一站式開源輕量級(jí)框架,在SSH框架中扮演著“管家”的作用,它可以對(duì)Struts和Hibernate進(jìn)行統(tǒng)一的管理。Spring中有兩個(gè)核心概念分別為控制反轉(zhuǎn)(IOC)和依賴注入(DI),控制反轉(zhuǎn)就是將對(duì)象的生產(chǎn)權(quán)和創(chuàng)建權(quán)全部托管給Spring容器管理,依賴注入是指Spring創(chuàng)建對(duì)象的過程中,將對(duì)象和屬性通過配置注入到程序中。
Spring還能實(shí)現(xiàn)對(duì)Hibernate中數(shù)據(jù)庫(kù)連接信息的配置,它的主要配置文件是ApplicationContext.xml,可以實(shí)現(xiàn)對(duì)數(shù)據(jù)源里面包括數(shù)據(jù)庫(kù)連接名、驅(qū)動(dòng)名、用戶名及密碼的配置。Spring還支持AOP編程,可以把實(shí)現(xiàn)相同功能的代碼橫向抽取出來形成公共代碼。
Hibernate是一個(gè)和數(shù)據(jù)庫(kù)連接,負(fù)責(zé)和數(shù)據(jù)庫(kù)打交道并完成數(shù)據(jù)的持久化工作的框架,它解決了一個(gè)核心的問題就是ORM即對(duì)象關(guān)系映射。Hibernate的使用需要配置四個(gè)方面的內(nèi)容,hibernate.cfg.xml、bean.hbm.xml、JavaBean實(shí)體類、核心業(yè)務(wù)邏輯。hibernate.cfg.xml主要配置了數(shù)據(jù)庫(kù)的連接名、驅(qū)動(dòng)名、用戶名、密碼、數(shù)據(jù)庫(kù)方言等以及實(shí)體類映射文件的引入;bean.hbm.xml稱為實(shí)體類映射文件,里面包含了實(shí)體類對(duì)象和數(shù)據(jù)庫(kù)表的對(duì)應(yīng)關(guān)系即實(shí)體類對(duì)象屬性對(duì)應(yīng)數(shù)據(jù)庫(kù)表中的字段。實(shí)體類包含三種對(duì)應(yīng)關(guān)系:一對(duì)一、多對(duì)一、多對(duì)多。在實(shí)體類映射文件中配置的過程就是把數(shù)據(jù)庫(kù)中二維表轉(zhuǎn)化為實(shí)體類對(duì)象的過程。
在Hibernate核心業(yè)務(wù)中需要使用到一個(gè)重要的類——Session,先通過Configuration類初始化配置得到會(huì)話工廠類SessionFactory,然后再通過會(huì)話工廠類得到Session,這樣就可以通過Session的對(duì)象調(diào)用內(nèi)置的方法來實(shí)現(xiàn)對(duì)數(shù)據(jù)的增刪改查操作,調(diào)用get()/load()方法實(shí)現(xiàn)數(shù)據(jù)的查詢,調(diào)用delete()方法實(shí)現(xiàn)對(duì)數(shù)據(jù)的刪除,通過實(shí)體類的對(duì)象的set()方法加session的save()方法實(shí)現(xiàn)對(duì)數(shù)據(jù)的插入。
在Java Web開發(fā)中,三大框架SSH之間是互相關(guān)聯(lián)的。Struts利用Action類和JSP頁(yè)面配置在struts.xml中進(jìn)行展示實(shí)現(xiàn)邏輯跳轉(zhuǎn)處理;而多個(gè)不同的JavaBean形成了Service層的內(nèi)容;而Hibernate在Dao層則實(shí)現(xiàn)了數(shù)據(jù)的持久化操作,上述內(nèi)容均被統(tǒng)一配置在Spring容器中管理,從而使項(xiàng)目代碼的維護(hù)更加容易。
目前在國(guó)內(nèi)的大多數(shù)企業(yè)中,SSH框架編寫的項(xiàng)目依然在很多公司中的許多項(xiàng)目中存在,考慮到這些軟件、項(xiàng)目仍在運(yùn)營(yíng),直接整體換成新框架也會(huì)損失一定的成本,也不切實(shí)際,雖然新的Java Web框架在源源不斷地出現(xiàn),但SSH框架也不失為一款非常經(jīng)典且實(shí)用的框架。