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

基于Spring與Hibernate的Web應(yīng)用開發(fā)研究

2017-05-31 08:58:46李曉靜魏振鋼
軟件導(dǎo)刊 2017年5期

李曉靜 魏振鋼

摘要摘要:Spring和Hibernate是輕量級(jí)J2EE應(yīng)用的開源框架,用于企業(yè)級(jí)應(yīng)用開發(fā)。針對(duì)傳統(tǒng)的Spring+Hibernate進(jìn)行項(xiàng)目開發(fā)時(shí),對(duì)用戶請(qǐng)求的處理都是通過Spring MVC實(shí)現(xiàn)的。大量controller需要使用XML配置文件編寫,造成了配置復(fù)雜和難以維護(hù)的弊端。由此提出Spring+Hibernate框架(NSH)通過注解和代理類實(shí)現(xiàn),不需要對(duì)每個(gè)控制器進(jìn)行配置,減少了配置的復(fù)雜性。通過結(jié)合后臺(tái)管理系統(tǒng)的開發(fā)經(jīng)驗(yàn),采用Spring注解技術(shù),對(duì)控制層和業(yè)務(wù)邏輯層進(jìn)行管理;為了進(jìn)一步提高Servlet訪問速度,提供了Servlet代理類實(shí)現(xiàn)請(qǐng)求的分發(fā);持久層使用Hibernate進(jìn)行數(shù)據(jù)的操作。應(yīng)用該方案降低了對(duì)Spring配置文件的依賴,提高了Web應(yīng)用程序的可維護(hù)性。

關(guān)鍵詞關(guān)鍵詞:Hibernate;Spring;注解;Web應(yīng)用開發(fā)

DOIDOI:10.11907/rjdk.162725

中圖分類號(hào):TP319

文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào)文章編號(hào):16727800(2017)005006903

0引言

隨著計(jì)算機(jī)技術(shù)的發(fā)展,電子商務(wù)、信息管理等Web應(yīng)用得到快速發(fā)展,J2EE是企業(yè)廣泛使用的信息平臺(tái),包括Hibernate、Spring和EJB等多種開源框架。但是,每一個(gè)框架都有自身的優(yōu)勢(shì)和不足,通過整合使框架充分發(fā)揮各自的特點(diǎn),實(shí)現(xiàn)高效率的開發(fā)是必然的選擇。Spring 框架是當(dāng)前流行的輕量級(jí)一站式企業(yè)應(yīng)用程序解決方案,具有易于維護(hù)、分層清楚等優(yōu)點(diǎn);Hibernate框架管理Java實(shí)體類到數(shù)據(jù)庫表之間的映射關(guān)系,并且提供數(shù)據(jù)查詢和獲取的方法,可以大幅縮短使用JDBC處理數(shù)據(jù)持久化的時(shí)間。在Hibernate和Spring的組合中,Spring負(fù)責(zé)事務(wù)管理和封裝Hibernate對(duì)象,Hibernate實(shí)現(xiàn)數(shù)據(jù)庫操作任務(wù)。但是,當(dāng)處理頁面提交請(qǐng)求時(shí),需要Spring MVC的協(xié)助,存在以下問題:①當(dāng)DispatchServlet將請(qǐng)求通過處理器映射(如SimpleUrlHandlerMapping)時(shí),需要在配置文件中管理,多種請(qǐng)求就會(huì)使配置文件臃腫、可讀性差;②即使通過@RequestMapping注解映射,也需要在每一個(gè)控制器類上配置地址,不僅麻煩,而且出現(xiàn)問題修改復(fù)雜;③控制器類需要交給Spring管理,bean配置繁瑣;④完成業(yè)務(wù)處理后,需要對(duì)返回的ModelAndView中的邏輯視圖名進(jìn)行解析,效率不高。

本文使用Spring+Hibernate框架(NSH),并用Servlet代理類進(jìn)行請(qǐng)求映射,不需要配置Spring文件。而且,使用注解管理控制器類,也省去了配置XML的麻煩,返回的對(duì)象直接通過Servlet響應(yīng)到頁面,效率高。同時(shí),此框架也應(yīng)用于后臺(tái)管理系統(tǒng)Web項(xiàng)目開發(fā)中。

1框架簡介

Hibernate是采用ORM映射機(jī)制進(jìn)行持久層數(shù)據(jù)開發(fā)的工具,它是Java 應(yīng)用程序和關(guān)系數(shù)據(jù)庫中間的橋梁,負(fù)責(zé)對(duì)Java 對(duì)象和關(guān)系型數(shù)據(jù)之間的映射。內(nèi)部封裝JDBC進(jìn)行訪問數(shù)據(jù)庫操作, 其向上層應(yīng)用對(duì)象提供面向?qū)ο蟮臄?shù)據(jù)庫訪問API,使開發(fā)者能充分運(yùn)用面向?qū)ο蟮木幊趟季S來操作數(shù)據(jù)庫, 而無需考慮底層數(shù)據(jù)庫操作[12]。

繼Spring 2.0對(duì)Spring MVC進(jìn)行升級(jí)后,Spring 2.5又為Spring MVC引入了注解驅(qū)動(dòng)功能。即無需讓Controller繼承任何接口,無需在 XML 配置文件中定義請(qǐng)求和 Controller 的映射關(guān)系,僅使用注解就可以讓一個(gè) POJO 具有Controller的絕大部分功能。相比傳統(tǒng)的繼承Controller體系中某些類的方式,Spring MVC的注解具有以下優(yōu)點(diǎn):①Controller不再需要繼承某個(gè)特定類,只是簡單的POJO;②請(qǐng)求映射的配置非常方便靈活;③參數(shù)綁定機(jī)制非常方便豐富;④可以根據(jù)不同的http方法或者參數(shù),細(xì)粒度處理不同的http請(qǐng)求[3]。

代理模式的主要作用是為其它對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問。在某些情況下,一個(gè)對(duì)象不想或者不能直接引用另一個(gè)對(duì)象,而代理對(duì)象可以在客戶端和目標(biāo)對(duì)象之間起到中介的作用。代理模式的思想是為了提供額外的處理或者不同的操作,而在實(shí)際對(duì)象與調(diào)用者之間插入一個(gè)代理對(duì)象[4]。

本文用到的NSH框架是由Spring和Hibernate兩個(gè)開源框架組合,并結(jié)合一個(gè)代理類實(shí)現(xiàn)。表現(xiàn)層通過JSP實(shí)現(xiàn);控制層通過代理類實(shí)現(xiàn)請(qǐng)求調(diào)度;業(yè)務(wù)層用Spring,Spring通過注解讓控制層調(diào)用業(yè)務(wù)邏輯層;持久層用Hibernate,Hibernate操作數(shù)據(jù)的訪問。首先用戶發(fā)送請(qǐng)求,服務(wù)器獲得請(qǐng)求后根據(jù)web.xml監(jiān)聽到*.do請(qǐng)求,并將地址提交給ServletToBeanProxy代理類處理,獲取需要的控制類名稱,通過Spring的管理找到控制類,調(diào)用Servlet(@Controller注解),在控制類中使用service(@Component注解)的相關(guān)方法,通過Hibernate處理數(shù)據(jù)庫操作,最后將返回的結(jié)果響應(yīng)到JSP頁面。框架處理請(qǐng)求流程如圖1所示。

2應(yīng)用實(shí)例

本文結(jié)合一個(gè)電子商務(wù)的后臺(tái)管理系統(tǒng)的開發(fā)經(jīng)驗(yàn)說明NSH框架的應(yīng)用。系統(tǒng)采用MVC設(shè)計(jì)模式,視圖層提交請(qǐng)求后,由Servlet代理類實(shí)現(xiàn)請(qǐng)求的轉(zhuǎn)發(fā)和業(yè)務(wù)邏輯的調(diào)度,最后由Hibernate操作數(shù)據(jù)庫等技術(shù)實(shí)現(xiàn)數(shù)據(jù)庫的持久化操作。

2.1業(yè)務(wù)邏輯層

Spring提供了強(qiáng)大的IOC容器來管理bean,這些bean構(gòu)成了Spring的配置文件。為了利用這個(gè)容器管理的服務(wù),需要配置bean,使它處于IOC容器的管理中[5]。添加商品品牌的業(yè)務(wù)邏輯類BrandService通過注解的方式把它實(shí)例化到Spring容器中,相當(dāng)于在applicationContext.xml文件中配置bean,這個(gè)bean對(duì)應(yīng)Spring容器里的java實(shí)例。當(dāng)使用Service時(shí),只需用@Resource注解就可調(diào)用service中的相關(guān)方法。

@Component("brandService")

public class BrandService{

public boolean AddBrand(String brandname){

......

//Hibernate操作數(shù)據(jù)庫,發(fā)送并執(zhí)行sql語句,進(jìn)行持久化操作

}

}

2.2控制層

控制層可以將獲得的客戶端請(qǐng)求參數(shù)等信息進(jìn)行處理并調(diào)用相關(guān)的業(yè)務(wù)邏輯類。在Servlet 3.0中,可以使用標(biāo)注(Annotation)來告知容器哪些Servlet會(huì)提供服務(wù)以及額外信息。當(dāng)管理員單擊添加品牌時(shí),調(diào)用BrandAddServlet,在BrandAddServlet類中使用@Controller注解,將這個(gè)類變成Spring管理的bean。通過使用此注解,就不需要在Spring配置文件中配置控制器類,減少了xml的臃腫。同時(shí),使用@Resource注解來激活一個(gè)命名資源的依賴注入,擁有與@Resource注解所提供名字相匹配的“bean name(bean名字)”的Spring管理對(duì)象會(huì)被注入,這樣就可以調(diào)用相關(guān)的業(yè)務(wù)邏輯方法。

2.3Servlet代理類

一般情況下,在應(yīng)用中普通的JavaPojo都是由Spring來管理的,所以使用autowire注解來進(jìn)行注入不會(huì)產(chǎn)生問題,但是也有例外:如Filter、Servlet,都是由Servlet容器來維護(hù)管理的,所以如果想和其它的Bean一樣使用Autowire來注入的話,需要做額外工作[6]。筆者實(shí)現(xiàn)了一個(gè)代理類ServletToBeanProxy用于實(shí)現(xiàn)其它bean的注入,然后使用代理Servlet來輔助配置和運(yùn)行,完成業(yè)務(wù)邏輯功能。這樣,不僅不需要urlMapping處理映射,配置Spring文件,降低了對(duì)配置文件的依賴,而且省去了使用@RequestMapping時(shí)對(duì)每一個(gè)控制器添加地址的弊端。

Servlet代理類先要繼承Servlet接口GenericServlet 主要用于定義和初始化Servlet,重寫相關(guān)方法處理用戶請(qǐng)求;然后在service方法中根據(jù)獲取到的請(qǐng)求地址解析出控制器類名稱,最后根據(jù)Spring的管理找到對(duì)應(yīng)控制器類,在控制器類中調(diào)用業(yè)務(wù)邏輯類實(shí)現(xiàn)操作。

2.4配置文件

(1) 在web.xml中配置好Servlet代理類,當(dāng)用戶的請(qǐng)求地址中出現(xiàn)*.do時(shí),到對(duì)應(yīng)的ServletToBeanProxy類中執(zhí)行。

<!--業(yè)務(wù)層和持久層的Spring配置文件,這些配置文件被父Spring容器所使用。在這里,通過contextConfigLocation參數(shù)指定業(yè)務(wù)層Spring容器的配置文件(多個(gè)配置文件使用逗號(hào)分隔),ContextLoaderListener是一個(gè)ServletContextListener,它通過contextConfigLocation參數(shù)所指定的Spring配置文件啟動(dòng)“業(yè)務(wù)層”的Spring容器[7]。 -->

3結(jié)語

本文闡述了Spring和Hibernate的概況,研究其技術(shù)特性,并結(jié)合理論,通過一個(gè)管理系統(tǒng)的開發(fā)經(jīng)驗(yàn),演示了完整的開發(fā)步驟。通過實(shí)例可以看出,使用NSH框架,減少了大量的bean配置,而且不需要了解配置中是如何放置的,不需要一遍遍地檢查配置文件的正確性。但是Spring注解有一個(gè)問題是加載順序,XML里定義的bean比在注解里定義的加載早,有時(shí)還得依賴XML。如果用了注解,那么在啟動(dòng)階段(listen和filter)則找不到bean;而且如果對(duì)注解進(jìn)行修改,需要重新編譯整個(gè)工程。因此,如何在Spring基本流程的基礎(chǔ)上,使Spring注解更好地加載和修改是進(jìn)一步研究的方向。

參考文獻(xiàn)參考文獻(xiàn):

[1]蔡雪燾.Hibernate 開發(fā)及整合應(yīng)用大全[M].北京:清華大學(xué)出版社,2006.

[2]朱慶偉,吳宇紅.一種對(duì)象/關(guān)系映射框架的分析和應(yīng)用[J].電子科技,2004,12(1):5457.

[3]springmvc注解配置詳解及其demo代碼下載[EB/OL].http://www.zuidaima.com/share/1751864352705536.htm.

[4]spring AoP學(xué)習(xí)——spring設(shè)計(jì)模式之代理模式[EB/OL].http://www.cnblogs.com/Qbright/archive/2012/07/25/2605235.html.

[5]GARY MAK,JOSH LONG.Spring enterprise recipes[M].Apress,2009:161.

[6]如何使用spring的autowire為servlet注入bean[EB/OL].http://blog.csdn.net/yaerfeng/article/details/7368541.

[7]陳雄華,林開雄.Spring 3.x企業(yè)應(yīng)用開發(fā)實(shí)戰(zhàn)[M].北京:電子工業(yè)出版社,2012.2.

[8][美]戴克.Spring MVC學(xué)習(xí)指南[M].林儀明,崔毅,譯.北京:人民郵電出版社,2015.5.

責(zé)任編輯(責(zé)任編輯:陳福時(shí))

主站蜘蛛池模板: 91小视频在线| 制服丝袜国产精品| 亚洲视频在线青青| 97在线公开视频| 日本午夜影院| 日本午夜三级| 国产视频久久久久| 国产精品偷伦视频免费观看国产| 国产成人综合亚洲网址| 2020国产免费久久精品99| 久久中文电影| 亚洲日本在线免费观看| 在线综合亚洲欧美网站| 国产天天色| 999精品在线视频| 免费人成视频在线观看网站| 免费在线观看av| 亚洲日本精品一区二区| 91视频区| 91九色视频网| 亚洲大尺码专区影院| 国产剧情国内精品原创| a级毛片毛片免费观看久潮| 成人毛片在线播放| 中文无码精品a∨在线观看| WWW丫丫国产成人精品| 亚洲欧美在线精品一区二区| 国产国产人在线成免费视频狼人色| 国产精品不卡永久免费| 国产91透明丝袜美腿在线| 夜夜拍夜夜爽| 亚洲国产第一区二区香蕉| 久久精品这里只有国产中文精品| 亚洲欧美激情另类| 亚洲国产精品一区二区高清无码久久| 国产丝袜第一页| 成人免费网站在线观看| 黄色成年视频| 国产亚洲欧美在线专区| 久久中文字幕2021精品| 国产va免费精品观看| 国产情精品嫩草影院88av| 亚洲日韩精品综合在线一区二区 | 国产成人资源| 美女一级免费毛片| 色欲色欲久久综合网| 91精品国产福利| 97se亚洲综合在线天天| 91网站国产| 91小视频在线观看免费版高清| 精品自拍视频在线观看| 国产精品成人AⅤ在线一二三四| 国产中文一区二区苍井空| 中字无码精油按摩中出视频| 五月婷婷伊人网| 婷婷色婷婷| 2021国产精品自产拍在线观看 | 国产99视频精品免费视频7| 日本手机在线视频| 中国一级特黄视频| 亚洲另类第一页| 亚洲人成网18禁| 日韩亚洲综合在线| 一级片一区| 亚洲人精品亚洲人成在线| 国产高清国内精品福利| 国内精品伊人久久久久7777人| 欧美午夜网| 欧美黑人欧美精品刺激| 四虎永久在线| 欧美专区在线观看| 国产欧美日韩视频一区二区三区| 国产亚洲现在一区二区中文| 亚洲精品色AV无码看| 2019年国产精品自拍不卡| 中文字幕佐山爱一区二区免费| 婷婷亚洲最大| 久久综合伊人 六十路| 色婷婷天天综合在线| 国产69精品久久久久妇女| 免费全部高H视频无码无遮掩| 一级毛片免费的|