亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇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框架簡(jiǎn)介

        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è)特定類,只是簡(jiǎn)單的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í))

        亚洲一区二区女优视频| 女色av少妇一区二区三区| 国产精品美女久久久网av| 亚洲av日韩精品久久久久久a| 高潮抽搐潮喷毛片在线播放| 丰满少妇被粗大猛烈进人高清| 帮老师解开蕾丝奶罩吸乳网站| 欧美内射深喉中文字幕| 精品无码一区在线观看| 激情久久av一区av二区av三区| 亚洲啪啪综合av一区| 久久精品国产9久久综合| 国产91福利在线精品剧情尤物| 中文字幕日韩人妻在线| 国产女主播福利一区二区| 日本一二三区在线观看视频| 国产精品亚洲欧美大片在线看| 国产特级全黄一级毛片不卡| 北岛玲中文字幕人妻系列| 一区二区在线观看日本免费| 国产大屁股喷水视频在线观看| 人妻夜夜爽天天爽三区麻豆av网站| 免费国产黄网站在线观看| 国产无套视频在线观看香蕉| 无码国产一区二区色欲| 亚洲精品国产二区在线观看| 激情五月开心五月啪啪| 精品亚洲一区二区区别在线观看| 国产精品久久久久久av| 国产激情电影综合在线看| 97久久精品人人妻人人| 国产黄色看三级三级三级| 国语对白精品在线观看| 亚洲一区二区女搞男| 无码人妻黑人中文字幕| 国产日韩欧美网站| 精品国产亚洲av麻豆尤物| 国产自拍精品在线免费观看| 日产亚洲一区二区三区| 日本免费人成视频播放| 亚洲都市校园激情另类|