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