999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于J2EE的輕量級(jí)SSH框架應(yīng)用

2017-11-09 11:25:07曹靜李梅付惠茹李沂橋嚴(yán)開(kāi)
電子技術(shù)與軟件工程 2017年19期

曹靜++李梅++付惠茹++李沂橋++嚴(yán)開(kāi)

摘 要針對(duì)當(dāng)前Web應(yīng)用程序開(kāi)發(fā)面臨的問(wèn)題,結(jié)合目前比較流行的開(kāi)源框架Spring、Struts和Hibernate,提出了一種開(kāi)發(fā)J2EE Web應(yīng)用的輕量級(jí)解決方案,以幫助開(kāi)發(fā)人員在短期內(nèi)搭建結(jié)構(gòu)清晰、可復(fù)用性好、維護(hù)方便的Web應(yīng)用程序。通過(guò)分析Struts、Spring、Hibernate各個(gè)框架自身的特點(diǎn),優(yōu)勢(shì)和不足,依照需求對(duì)框架進(jìn)行組合搭建,以MVC分層思想實(shí)現(xiàn)Web系統(tǒng)上的不同分層,表示層用Struts實(shí)現(xiàn),用Hibernate框架將實(shí)現(xiàn)數(shù)據(jù)的持久化,業(yè)務(wù)邏輯層用Spring框架實(shí)現(xiàn),同時(shí)對(duì)SSH整合框架的整體性能進(jìn)行了改進(jìn)和優(yōu)化。引入框架技術(shù),大大降低了企業(yè)的開(kāi)發(fā)成本,同時(shí)提高了開(kāi)發(fā)效率。

【關(guān)鍵詞】SSH J2EE 面向?qū)ο?Web開(kāi)發(fā)

大型企業(yè)級(jí)Web應(yīng)用系統(tǒng)的開(kāi)發(fā)通常要求有一個(gè)良好的軟件架構(gòu)、便于協(xié)作開(kāi)發(fā)和擴(kuò)展升級(jí),而傳統(tǒng)的開(kāi)發(fā)模式不能很好地滿(mǎn)足這些要求。本文針對(duì)當(dāng)前Web應(yīng)用程序開(kāi)發(fā)面臨的問(wèn)題,結(jié)合目前比較流行的開(kāi)源框架SSH(Spring、Struts、Hibernate),提出一種開(kāi)發(fā)J2EE 企業(yè)級(jí)Web應(yīng)用的輕量級(jí)解決方案,并通過(guò)案例具體說(shuō)明如何將這一方案應(yīng)用到實(shí)際項(xiàng)目中。

1 框架技術(shù)

框架一般具有即插即用的可重用性、成熟的穩(wěn)定性以及良好的團(tuán)隊(duì)協(xié)作性。J2EE復(fù)雜的多層結(jié)構(gòu)決定了大型的J2EE項(xiàng)目需要運(yùn)用框架和設(shè)計(jì)模式來(lái)控制軟件質(zhì)量。目前,市場(chǎng)上出現(xiàn)了一些商業(yè)的、開(kāi)源的基于J2EE的應(yīng)用框架,其中主流的框架技術(shù)有:基于MVC模式的Struts框架和基于IoC模式的Spring框架以及對(duì)象/關(guān)系映射框架Hibernate等。

1.1 表示層框架Struts

Struts是一個(gè)在JSP Model2基礎(chǔ)上實(shí)現(xiàn)的MVC框架,主要分為模型(Model)、視圖(Viewer)和控制器(Controller)三部分,其主要的設(shè)計(jì)理念是通過(guò)控制器將表現(xiàn)邏輯和業(yè)務(wù)邏輯解耦,以提高系統(tǒng)的可維護(hù)性、可擴(kuò)展性和可重用性。Struts框架的體系結(jié)構(gòu)如下:

1.1.1 視圖

視圖部分主要由JSP頁(yè)面組成,其中沒(méi)有流程邏輯、業(yè)務(wù)邏輯和模型信息,只有標(biāo)記。Struts自身包含了一組標(biāo)記庫(kù)(TagLib),這也是Struts的精華之一,靈活運(yùn)用它們可以簡(jiǎn)化JSP頁(yè)面的代碼,提高開(kāi)發(fā)效率。

1.1.2 控制器

Struts中的Controller主要是其自身提供的ActionServlet。ActionServlet接收所有來(lái)自客戶(hù)端的請(qǐng)求并根據(jù)配置文件(struts-config.xml)中的定義將控制轉(zhuǎn)移到適當(dāng)?shù)腁ction對(duì)象。

1.1.3 模型

Struts沒(méi)有定義具體Model層的實(shí)現(xiàn),Model層通常是和業(yè)務(wù)邏輯緊密相關(guān)的,有持續(xù)化的要求。目前在商業(yè)領(lǐng)域和開(kāi)源世界,都有一些優(yōu)秀的工具可以為Model層的開(kāi)發(fā)提供便利。

1.2 業(yè)務(wù)邏輯層框架Spring

Spring是一個(gè)解決了許多J2EE開(kāi)發(fā)中常見(jiàn)問(wèn)題并能夠替代EJB技術(shù)的強(qiáng)大的輕量級(jí)框架。這里所說(shuō)的輕量級(jí)指的是Spring框架本身,而不是指Spring只能用于輕量級(jí)的應(yīng)用開(kāi)發(fā)。Spring的輕盈體現(xiàn)在其框架本身的基礎(chǔ)結(jié)構(gòu)以及對(duì)其他應(yīng)用工具的支持和裝配能力。與EJB這種龐然大物相比,Spring可使程序研發(fā)人員把各個(gè)技術(shù)層次之間的風(fēng)險(xiǎn)降低。

Spring框架的核心是控制翻轉(zhuǎn)IoC(Inversion of Control)/依賴(lài)注入DI(Dependence Injection)機(jī)制。IoC是指由容器中控制組件之間的關(guān)系(這里,容器是指為組件提供特定服務(wù)和技術(shù)支持的一個(gè)標(biāo)準(zhǔn)化的運(yùn)行時(shí)的環(huán)境)而非傳統(tǒng)實(shí)現(xiàn)中由程序代碼直接操控,這種將控制權(quán)由程序代碼到外部容器的轉(zhuǎn)移,稱(chēng)為“翻轉(zhuǎn)”。DI是對(duì)IoC更形象的解釋?zhuān)从扇萜髟谶\(yùn)行期間動(dòng)態(tài)地將依賴(lài)關(guān)系(如構(gòu)造參數(shù)、構(gòu)造對(duì)象或接口)注入到組件之中。Spring采用設(shè)值注入(使用Setter方法實(shí)現(xiàn)依賴(lài))和構(gòu)造子注入(在構(gòu)造方法中實(shí)現(xiàn)依賴(lài))的機(jī)制,通過(guò)配置文件管理組建的協(xié)作對(duì)象,創(chuàng)建可以構(gòu)造組件的IoC容器。這樣,不需要編寫(xiě)工廠(chǎng)模式、單例模式或者其他構(gòu)造的方法,就可以通過(guò)容器直接獲取所需的業(yè)務(wù)組件。

1.3 數(shù)據(jù)持久層框架Hibernate

O/R mapping技術(shù)是為了解決關(guān)系型數(shù)據(jù)庫(kù)和面向?qū)ο蟮某绦蛟O(shè)計(jì)之間不匹配的矛盾而產(chǎn)生的。Hibernate是目前最為流行的O/R mapping框架,它在關(guān)系型數(shù)據(jù)庫(kù)和Java對(duì)象之間做了一個(gè)自動(dòng)映射,使得程序員可以以非常簡(jiǎn)單的方式實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作。

Hibernate通過(guò)對(duì)JDBC的封裝,向程序員屏蔽了底層的數(shù)據(jù)庫(kù)操作,使程序員專(zhuān)注于OO程序的開(kāi)發(fā),有助于提高開(kāi)發(fā)效率。程序員訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)所需要做的就是為持久化對(duì)象編制xml映射文件。

底層數(shù)據(jù)庫(kù)的改變只需要簡(jiǎn)單地更改初始化配置文件(hibernate.cfg.xml或者h(yuǎn)ibernate.properties)即可,不會(huì)對(duì)應(yīng)用程序產(chǎn)生影響。

Hibernate有自己的面向?qū)ο蟮牟樵?xún)語(yǔ)言HQL,HQL功能強(qiáng)大,支持目前大部分主流的數(shù)據(jù)庫(kù),如Oracle、DB2、MySQL、Microsoft SQL Server等,是目前應(yīng)用最廣泛的O/R映射工具。Hibernate為快速開(kāi)發(fā)應(yīng)用程序提供了底層的支持。

2 集成SSH的新型,輕量級(jí)的J2EE架構(gòu)

集成SSH框架的系統(tǒng)從職責(zé)上分為四層:表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層和域模塊層。其中使用Struts作為系統(tǒng)的整體基礎(chǔ)架構(gòu),負(fù)責(zé)MVC的分離,在Struts框架的模型部分,利用Hibernate框架對(duì)持久層提供支持,業(yè)務(wù)層用Spring支持。具體做法是:用面向?qū)ο蟮姆治龇椒ǜ鶕?jù)需求提出一些模型,將這些模型實(shí)現(xiàn)為基本的Java對(duì)象,然后編寫(xiě)基本的DAO接口,并給出Hibernate的DAO實(shí)現(xiàn),采用Hibernate架構(gòu)實(shí)現(xiàn)的DAO類(lèi)來(lái)實(shí)現(xiàn)Java類(lèi)與數(shù)據(jù)庫(kù)之間的轉(zhuǎn)換和訪(fǎng)問(wèn),最后由Spring完成業(yè)務(wù)邏輯。

系統(tǒng)的基本業(yè)務(wù)流程是: 在表示層中,首先通過(guò)JSP頁(yè)面實(shí)現(xiàn)交互界面,負(fù)責(zé)傳送請(qǐng)求(Request)和接收響應(yīng)(Response),然后Struts根據(jù)配置文件(struts-config.xml)將ActionServlet接收到的Request委派給相應(yīng)的Action處理。在業(yè)務(wù)層中,管理服務(wù)組件的Spring IoC容器負(fù)責(zé)向Action提供業(yè)務(wù)模型(Model)組件和該組件的協(xié)作對(duì)象數(shù)據(jù)處理(DAO)組件完成業(yè)務(wù)邏輯,并提供事務(wù)處理、緩沖池等容器組件以提升系統(tǒng)性能和保證數(shù)據(jù)的完整性。而在持久層中,則依賴(lài)于Hibernate的對(duì)象化映射和數(shù)據(jù)庫(kù)交互,處理DAO組件請(qǐng)求的數(shù)據(jù),并返回處理結(jié)果。

采用上述開(kāi)發(fā)模型,不僅實(shí)現(xiàn)了視圖、控制器與模型的徹底分離,而且還實(shí)現(xiàn)了業(yè)務(wù)邏輯層與持久層的分離。這樣無(wú)論前端如何變化,模型層只需很少的改動(dòng),并且數(shù)據(jù)庫(kù)的變化也不會(huì)對(duì)前端有所影響,大大提高了系統(tǒng)的可復(fù)用性。而且由于不同層之間耦合度小,有利于團(tuán)隊(duì)成員并行工作,大大提高了開(kāi)發(fā)效率。

通過(guò)查找文獻(xiàn)發(fā)現(xiàn)已經(jīng)應(yīng)用的組合框架有struts與spring組合和spring與hibernate組合。

2.1 struts與spring

優(yōu)點(diǎn):當(dāng)需要修改大量代碼時(shí),只需要修改spring的配置文件即可,提高代碼的復(fù)用性和可移植性,大大節(jié)省了開(kāi)大的周期。

缺點(diǎn):Action將會(huì)和Spring耦合在一起。如果有多個(gè)Action類(lèi)都繼承MappingDispatchActionSupport的話(huà)你將會(huì)每次都需要調(diào)用getWebApplicationContext()獲取ApplicationContext的實(shí)例。這樣如果放棄使用spring的話(huà),所要修改的代碼量將非常大。

2.2 Spring與hibernate

優(yōu)點(diǎn):Spring提供的是框架級(jí)的事務(wù)管理,在使用session.beginTransaction()或tx.commit()的時(shí)候就是使用了hibernate的API,這樣代碼就和hibernate耦合了。如果以后想用或JPA來(lái)代替hibernate做持久化工作,太多代碼需要改動(dòng),如果使用spring的事務(wù)控制,就不再需要在代碼中是用hibernate的API,同樣是用JTA或JPA來(lái)代替hibernate,只需要修改spring的配置文件就可以替換了持久層框架。

缺點(diǎn):由于對(duì)持久層封裝過(guò)于完整,導(dǎo)致開(kāi)發(fā)人員無(wú)法對(duì)SQL進(jìn)行優(yōu)化,無(wú)法靈活使用JDBC的原生SQL,Hibernate封裝了JDBC,所以沒(méi)有JDBC直接訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)效率高。要使用數(shù)據(jù)庫(kù)的特定優(yōu)化機(jī)制的時(shí)候,不適合用Hibernate 。

對(duì)于框架組合的一般方式進(jìn)行總結(jié)歸納,分析各自的優(yōu)缺點(diǎn)和適用條件,通過(guò)Spring與hibernate的組合方式,可以發(fā)現(xiàn)無(wú)法進(jìn)行SQL優(yōu)化,增加數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)時(shí)間等缺點(diǎn),針對(duì)這種組合存在的問(wèn)題,結(jié)合具體的需求實(shí)踐,我們提出了struts,spring,iBatis和struts,spring,jdbc的組合方式,然后結(jié)合具體實(shí)現(xiàn)的系統(tǒng)驗(yàn)證該組合模式的有效性。并通過(guò)后面的學(xué)習(xí)和實(shí)踐,分析和驗(yàn)證其他的框架組合模式。

3 研究方案及準(zhǔn)備采取的技術(shù)路線(xiàn)、擬解決的關(guān)鍵問(wèn)題

3.1 研究方案

根據(jù)Struts、Spring、Hibernate各個(gè)框架的功能和分層結(jié)構(gòu),對(duì)比研究分析出每個(gè)框架的適用條件和適用屬性,并且以一個(gè)具體實(shí)現(xiàn)的系統(tǒng)展現(xiàn)每個(gè)框架的應(yīng)用:

采用以下開(kāi)發(fā)工具:MyEclipse,Tomcat和MySQL數(shù)據(jù)庫(kù)

客戶(hù)端:采用jQuery標(biāo)簽和Struts框架為主要展示層,提供豐富的用戶(hù)交互UI功能,跨平臺(tái)的使用為用戶(hù)帶來(lái)無(wú)限便捷,并且為用戶(hù)帶來(lái)各種新穎的用戶(hù)體驗(yàn)。

數(shù)據(jù)交互通信層:采用Spring框架,使用統(tǒng)一的接口,實(shí)現(xiàn)數(shù)據(jù)由前端到后端的傳輸,增強(qiáng)數(shù)據(jù)的時(shí)效性。

數(shù)據(jù)存儲(chǔ)管理層:采用MySQL數(shù)據(jù)庫(kù)和Hibernate框架,對(duì)數(shù)據(jù)進(jìn)行持久化和SQL注入,通過(guò)Hibernate框架讓系統(tǒng)對(duì)數(shù)據(jù)庫(kù)的操作更簡(jiǎn)單方便。

3.2 技術(shù)路線(xiàn)

對(duì)比Struts、Spring、Hibernate各自框架的優(yōu)缺點(diǎn)、設(shè)計(jì)原則和運(yùn)行流程,分析各種組合框架的適用性。

Struts和Spring的整合,首先通過(guò)加載Spring的應(yīng)用環(huán)境Application,自動(dòng)獲取了Spring中設(shè)置的bean對(duì)象,將Struts中ActionServlet請(qǐng)求Action納入Spring容器中的方法將Struts和Spring整合起來(lái)。

Hibernate和Spring的整合主要是Spring對(duì)SessionFactory的管理。

3.3 擬解決的關(guān)鍵問(wèn)題

(1)采用jQuery和Struts框架技術(shù)實(shí)現(xiàn)頁(yè)面展示部分;

(2)搭建SSH框架,使框架可以運(yùn)行;

(3)采用Spring的IOC(控制反轉(zhuǎn)和依賴(lài)注入)技術(shù)實(shí)現(xiàn)容器動(dòng)態(tài)地將某種依賴(lài) 關(guān)系注入到組件之中;

(4)采用Hibernate技術(shù)實(shí)現(xiàn)對(duì)數(shù)據(jù)的持久化和對(duì)對(duì)象的直接操作;

(5)根據(jù)業(yè)務(wù)需求條件的不同,采用合適的框架組合。

4 結(jié)論

為了解決傳統(tǒng)基于J2EE架構(gòu)的Web應(yīng)用系統(tǒng)中的一些弊端,找到適用于企業(yè)級(jí)應(yīng)用軟件系統(tǒng)需求的特點(diǎn)和開(kāi)發(fā)方法,通過(guò)分析J2EE多層分布式架構(gòu)應(yīng)用模型,采用輕量級(jí)的SSH組合框架,并對(duì)組合框架的性能進(jìn)行改進(jìn)和優(yōu)化,最大化各個(gè)框架的自身優(yōu)勢(shì),以得到具備以下優(yōu)點(diǎn)的框架:

(1)重用設(shè)計(jì),用來(lái)簡(jiǎn)化設(shè)計(jì)的復(fù)雜性;

(2)重用代碼,用來(lái)減少編碼和測(cè)試的時(shí)間,縮短軟件開(kāi)發(fā)周期,提高開(kāi)發(fā)效率;

(3)提高應(yīng)用系統(tǒng)的可擴(kuò)展性、可維護(hù)性和可移植性;

(4)降低各層之間的藕合度。

為Web應(yīng)用開(kāi)發(fā)人員提供了一個(gè)能夠統(tǒng)一使用的開(kāi)發(fā)模式和軟件包,開(kāi)發(fā)人員不必關(guān)系底層的實(shí)現(xiàn)細(xì)節(jié),將工作重心放在應(yīng)用的業(yè)務(wù)邏輯處理上。減輕了開(kāi)發(fā)人員處理復(fù)雜問(wèn)題的負(fù)擔(dān),提高開(kāi)發(fā)效率。其次,在應(yīng)用和分析架構(gòu)的基礎(chǔ)上,可以進(jìn)行擴(kuò)展和改進(jìn),以適應(yīng)當(dāng)前應(yīng)用的需要,為以后的擴(kuò)展和維護(hù)奠定了基礎(chǔ)。

參考文獻(xiàn)

[1]萬(wàn)助盛,侯文永.J2EE企業(yè)計(jì)算平臺(tái)[J].計(jì)算機(jī)應(yīng)用研究,2013(12):38-40.

[2]張友生.軟件體系結(jié)構(gòu)[M].北京:北京清華大學(xué)出版社,2011(10).

[3]劉瑜,王立福.軟件框架開(kāi)發(fā)過(guò)程研究[J].計(jì)算機(jī)工程與應(yīng)用,2014.

[4]劉曉華,陳亞強(qiáng).應(yīng)用開(kāi)發(fā)詳解[M].北京:電子工業(yè)出版社,2015.

[5]葉娜.J2EE Web應(yīng)用開(kāi)發(fā)中Struts框架的研究與擴(kuò)展[J].西安建筑科技大學(xué),2012.

[6]趙強(qiáng),喬新亮.J2EE應(yīng)用開(kāi)發(fā)[M].北京:電子工業(yè)出版社,2013.

[7]張友生.軟件體系結(jié)構(gòu)[M].北京:清華大學(xué)出版社,2014(10).

[8]薩師煊,王珊.數(shù)據(jù)庫(kù)系統(tǒng)概論(第三版)[M].北京:高等教育出版社,2013(12).

[9]熊偉.Java EE模式框架在中小企業(yè)Web實(shí)施應(yīng)用中的研究[D].成都:成都理工大學(xué),2015(06).

[10]孫鑫.Java Web開(kāi)發(fā)詳解[M].北京:電子工業(yè)出版社,2015.

[11]寇毅,吳力文.基于MVC設(shè)計(jì)模式的Struts框架的應(yīng)用方法[J].計(jì)算機(jī)應(yīng)用,2013.

作者簡(jiǎn)介

曹靜(1989-),女,貴州省貴陽(yáng)市人。貴州大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院。主要研究方向?yàn)镴ava Web開(kāi)發(fā)。

作者單位

貴州大學(xué) 貴州省貴陽(yáng)市 550025

主站蜘蛛池模板: 日韩国产一区二区三区无码| 久久一本精品久久久ー99| 国产高颜值露脸在线观看| 深爱婷婷激情网| 无码又爽又刺激的高潮视频| 国产高潮流白浆视频| 日本不卡在线播放| 国产精品国产三级国产专业不| 欧美国产日韩一区二区三区精品影视| 精品夜恋影院亚洲欧洲| 99精品国产自在现线观看| 中文字幕在线观看日本| 亚洲欧洲日产无码AV| av天堂最新版在线| 啦啦啦网站在线观看a毛片| 国产成人免费视频精品一区二区| 国产h视频在线观看视频| 国产黑丝一区| 国产精品lululu在线观看| 国产日韩欧美视频| 丰满的少妇人妻无码区| 日韩人妻精品一区| 亚洲伦理一区二区| 久久精品这里只有国产中文精品| 中日韩欧亚无码视频| 国产一区二区免费播放| 精品视频在线观看你懂的一区 | 正在播放久久| 在线亚洲小视频| 精品一区二区三区水蜜桃| 在线免费看片a| 国产成人精品一区二区| 美女免费黄网站| 日本三级欧美三级| 久久精品中文字幕免费| 亚洲国产无码有码| 好紧太爽了视频免费无码| 欧美人人干| 在线日韩日本国产亚洲| 精品無碼一區在線觀看 | 国产真实二区一区在线亚洲| 人与鲁专区| 黄色国产在线| 91小视频版在线观看www| 亚洲三级色| 国产免费观看av大片的网站| 国产一级一级毛片永久| 国产女人在线观看| 久久女人网| 国产一级毛片高清完整视频版| 99ri国产在线| 亚洲视频免费播放| 伊人AV天堂| 欧美人与性动交a欧美精品| 久久成人免费| 国产99免费视频| 亚洲第一成年免费网站| 色综合天天娱乐综合网| 超清无码熟妇人妻AV在线绿巨人| 亚洲无卡视频| 99国产精品国产高清一区二区| 欧美区一区二区三| 精品国产黑色丝袜高跟鞋| 久久精品国产在热久久2019| 国产精品视频猛进猛出| 人人澡人人爽欧美一区| 婷婷丁香色| 韩日免费小视频| 91久久天天躁狠狠躁夜夜| 午夜精品福利影院| 538国产视频| 久久精品一卡日本电影| 亚洲欧洲日产国产无码AV| 成人午夜视频免费看欧美| 依依成人精品无v国产| 免费又黄又爽又猛大片午夜| 人妻少妇乱子伦精品无码专区毛片| 久久国产乱子| 一级毛片免费观看不卡视频| 一本色道久久88| 8090午夜无码专区| 91无码人妻精品一区二区蜜桃|