• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

      李曉靜 魏振鋼

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

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

      DOIDOI:10.11907/rjdk.162725

      中圖分類號:TP319

      文獻標識碼:A文章編號文章編號:16727800(2017)005006903

      0引言

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

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

      1框架簡介

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

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

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

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

      2應用實例

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

      2.1業(yè)務邏輯層

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

      @Component("brandService")

      public class BrandService{

      public boolean AddBrand(String brandname){

      ......

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

      }

      }

      2.2控制層

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

      2.3Servlet代理類

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

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

      2.4配置文件

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

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

      3結(jié)語

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

      參考文獻參考文獻:

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

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

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

      [4]spring AoP學習——spring設計模式之代理模式[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è)應用開發(fā)實戰(zhàn)[M].北京:電子工業(yè)出版社,2012.2.

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

      責任編輯(責任編輯:陳福時)

      拜城县| 建始县| 湖南省| 康保县| 启东市| 威海市| 尖扎县| 阜南县| 阳春市| 民勤县| 昌乐县| 阳西县| 吉安县| 贵州省| 那曲县| 任丘市| 喀什市| 稻城县| 陆良县| 安龙县| 绥德县| 礼泉县| 城固县| 简阳市| 咸宁市| 济南市| 东乌珠穆沁旗| 安徽省| 宁安市| 迭部县| 文山县| 山西省| 马关县| 阳曲县| 安福县| 乡宁县| 黎平县| 星子县| 敦煌市| 武城县| 固原市|