亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Struts,Hibernate和Spring的J2EE架構(gòu)研究

        2009-05-12 03:14:34王恩東張素寧
        現(xiàn)代電子技術(shù) 2009年2期

        趙 洋 張 麗 王恩東 張素寧

        摘 要:介紹Struts,Hibernate和Spring三個(gè)開(kāi)源框架及它們對(duì)MVC設(shè)計(jì)模式的實(shí)現(xiàn),闡述如何更好地將三者結(jié)合起來(lái)構(gòu)建一個(gè)健壯、高效、易于擴(kuò)展的J2EE分層架構(gòu),并給出該架構(gòu)的結(jié)構(gòu)圖,分析它的優(yōu)缺點(diǎn),并且通過(guò)網(wǎng)上購(gòu)物系統(tǒng)給出了這一框架的實(shí)現(xiàn)。

        關(guān)鍵詞:Struts;MVC;Hibernate;Spring;J2EE;購(gòu)物系統(tǒng)

        中圖分類號(hào):TP311.52文獻(xiàn)標(biāo)識(shí)碼:A

        文章編號(hào):1004 373X(2009)02 107 04

        Research of J2EE Based on Struts,Hibernate and Spring

        ZHAO Yang,ZHANG Li,WANG Endong,ZHANG Suning

        (Shenyang Institute of Chemical Technology,Shenyang,110042,China)

        Abstract:Three frameworks of Struts,Hibernate and Spring are introduced.The implement for MVC model based on the three frameworks is introduced.How to use the three frameworks more efficiency in building a strong,high efficiency and easy expanded J2EE,and the picture of this framework is given.The advantages and disadvantages are analyzed.Finally,the online shopping system,which is based on this framework is realized.

        Keywords:Struts;MVC;Hibernate;Spring;J2EE;shopping system

        0 引 言

        目前,為了降低成本及開(kāi)發(fā)系統(tǒng)的復(fù)雜性,加快應(yīng)用程序的開(kāi)發(fā)和設(shè)計(jì),面向企業(yè)應(yīng)用的體系結(jié)構(gòu)J2EE 平臺(tái),提供了一種基于組件的方法,對(duì)于一個(gè)多層的應(yīng)用模型根據(jù)功能將其應(yīng)用邏輯劃分成組件。

        MVC 設(shè)計(jì)模式,最早是在Smalltalk-80中被提出的。MVC即:模型(Model)、視圖(View)、控制器(Controller)。模型表示業(yè)務(wù)邏輯;視圖是應(yīng)用程序中用戶界面相關(guān)的部分;控制器的作用是從客戶端接收請(qǐng)求,并且選擇執(zhí)行相應(yīng)的業(yè)務(wù)邏輯,然后把響應(yīng)結(jié)果送回到客戶端[1]。這種設(shè)計(jì)模式把應(yīng)用邏輯、處理過(guò)程和顯示邏輯分成不同的組件實(shí)現(xiàn),通過(guò)三者之間的分離達(dá)到層間的松散耦合以及各層內(nèi)部的緊密內(nèi)聚,以實(shí)現(xiàn)代碼重用和易于修改,以此來(lái)提高系統(tǒng)的靈活性、可重用性和可維護(hù)性,達(dá)到提高軟件質(zhì)量的目的。

        1 開(kāi)源框架Struts,Hibernate和Spring簡(jiǎn)介

        1.1 Web開(kāi)發(fā)框架Struts

        Struts是在JSP Model2的基礎(chǔ)上實(shí)現(xiàn)的一個(gè)MVC 模式的應(yīng)用程序的框架。它提供Controller 組件并且整合了其他技術(shù)實(shí)現(xiàn)Model和View。對(duì)于Model,Struts可以使用標(biāo)準(zhǔn)數(shù)據(jù)訪問(wèn)技術(shù),如JDBC和EJB, 也可以使用第三方工具, 如Hibernate,iBETIS,O/R 橋。至于View,Struts支持JSP 技術(shù),支持JSTL(JSP Standard Tag Liberary)和JSF(Java Server Faces),也可以使用Velocity模板、XSLT(the Extensible Stylesheet Langusge Transformations)及其他表示系統(tǒng)。此外,Struts 提供的自定義的標(biāo)簽庫(kù)可以輔助JSP進(jìn)行表示層的設(shè)計(jì)。

        Struts 的核心組件有ActionServlet,Action,ActionForm,ActionMapping,ActionForward及Taglib配置文件等。

        1.2 對(duì)象關(guān)系映射工具Hibernate

        Hibernate是目前流行的ORM(Object Relation Mapping)框架。它對(duì)JDBC進(jìn)行了輕量級(jí)的對(duì)象封裝,使得Java程序員可以使用面向?qū)ο缶幊趟季S來(lái)操作后臺(tái)關(guān)系數(shù)據(jù)庫(kù),而不用再去關(guān)心繁瑣的SQL語(yǔ)句。

        Hibernate采用運(yùn)行時(shí)反射(Runtime Reflection) 來(lái)決定一個(gè)類的持久化屬性[2] 。在企業(yè)級(jí)應(yīng)用中,由于需要頻繁地與數(shù)據(jù)庫(kù)交互,開(kāi)發(fā)者往往在應(yīng)用和數(shù)據(jù)庫(kù)之間建立一個(gè)“持久層”(Persistence Layer),它負(fù)責(zé)應(yīng)用到數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ),也負(fù)責(zé)數(shù)據(jù)的檢索和更新。在J2EE 的應(yīng)用中,這個(gè)持久層使用JDBC、實(shí)體Beans、JDO等技術(shù)來(lái)建立。但是JDBC中數(shù)據(jù)訪問(wèn)對(duì)象(Databese Access Object,DAO)和SQL語(yǔ)句直接綁定在一起降低了可維護(hù)性,且不支持繼承和多態(tài)。Hibernate 的出現(xiàn)讓使用者又多了一個(gè)選擇,可以選用Hibernate 這種框架來(lái)實(shí)現(xiàn)對(duì)象、關(guān)系之間的映射和數(shù)據(jù)的持久化。Hibernate擁有強(qiáng)大的查詢語(yǔ)言(Hibernate Query Language,HQL),HQL完全是面向?qū)ο蟮模?]。

        Hibernate的核心接口一共有5個(gè),分別是:Session,SessionFactory,Configuration,Transaction和Query(或Criteria)。通過(guò)這些接口,不僅可以對(duì)持久化對(duì)象進(jìn)行存取,還能夠進(jìn)行事務(wù)控制。

        1.3 Web開(kāi)發(fā)框架Spring

        Spring也是一個(gè)優(yōu)秀的Web開(kāi)發(fā)框架。它解決了許多在J2EE開(kāi)發(fā)中常見(jiàn)的問(wèn)題的強(qiáng)大框架。它提供了管理業(yè)務(wù)對(duì)象的一致方法,并且鼓勵(lì)對(duì)接口的編程而不是對(duì)類編程的習(xí)慣。Spring的架構(gòu)基礎(chǔ)是基于使用JavaBean屬性的Inversion of Control容器,數(shù)據(jù)訪問(wèn)架構(gòu)集成了Hibernate和其他O/R mapping解決方案,同時(shí)提供了對(duì)Struts的支持。它是一個(gè)分層的框架,由7個(gè)模塊組成[3]。Spring模塊構(gòu)建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理Bean的方式,如圖1所示。

        組成Spring框架的每個(gè)模塊(或組件)都可以單獨(dú)存在,或者與其他一個(gè)或多個(gè)模塊聯(lián)合實(shí)現(xiàn)。

        1.4 Struts,Hibernate和Spring對(duì)MVC模式的實(shí)現(xiàn)

        Struts和Spring都是當(dāng)前流行的MVC實(shí)現(xiàn)框架,其中Struts 在View上實(shí)現(xiàn)較為突出,Spring在業(yè)務(wù)層實(shí)現(xiàn)較好,Hibernate在數(shù)據(jù)持久層實(shí)現(xiàn)較好。因此將三者結(jié)合起來(lái),很好地實(shí)現(xiàn)了MVC 的設(shè)計(jì)模式,如圖2所示。

        在這種結(jié)構(gòu)中,用戶從瀏覽器發(fā)出請(qǐng)求,該請(qǐng)求首先將被Struts的ActionServlet接收,然后ActionServlet會(huì)根據(jù)用戶的Struts配置確定應(yīng)觸發(fā)哪一個(gè)具體的Action。Action的主要任務(wù)是調(diào)用某一個(gè)業(yè)務(wù)邏輯對(duì)象BO(Business Object)已完成相應(yīng)的業(yè)務(wù)操作[4]。由于在該框架中考慮引入了Spring,因此Action將不必直接創(chuàng)建具體的BO,而是通過(guò)Spring框架利用反向注入的原理(Ioc)來(lái)得到BO的實(shí)例。

        2 基于Struts,Hibernate和Spring三種框架的J2EE架構(gòu)

        在項(xiàng)目開(kāi)發(fā)中采用基于Struts,Hibernate和Spring三種框架的J2EE架構(gòu), 用JSP技術(shù)結(jié)合Struts強(qiáng)大的Taglib來(lái)實(shí)現(xiàn)表示層;Spring負(fù)責(zé)中間的業(yè)務(wù)層;Hibernate完成對(duì)象和關(guān)系的映射,并借助數(shù)據(jù)庫(kù)存儲(chǔ)技術(shù)來(lái)實(shí)現(xiàn)整個(gè)J2EE應(yīng)用。

        分層設(shè)計(jì)思想是軟件設(shè)計(jì)中的一個(gè)重要的設(shè)計(jì)思想。在項(xiàng)目中,也利用這種分層的思想,設(shè)計(jì)出一種分層架構(gòu)?;赟truts,Hibernate和Spring框架的J2EE分層架構(gòu)如圖3所示。

        由圖3可以看出,對(duì)于基于Struts,Hibernate和Spring框架的J2EE分層架構(gòu),基本上劃分了5層,詳細(xì)地說(shuō),來(lái)自客戶層的Web請(qǐng)求送到Struts框架中的控制器ActionServlet等候處理。ActionServlet包括一組基于配置的ActionMapping對(duì)象,每個(gè)ActionMapping對(duì)象實(shí)現(xiàn)了一個(gè)請(qǐng)求到一個(gè)具體的Model 部分中Action處理器對(duì)象之間的映射。ActionServlet接收客戶端的請(qǐng)求, 并將請(qǐng)求交與RequestProcessor來(lái)處理。RequestProcessor根據(jù)請(qǐng)求的URL,從ActionMapping中得到相應(yīng)的Action,并根據(jù)請(qǐng)求的參數(shù)實(shí)例化相應(yīng)的ActionForm,進(jìn)行form驗(yàn)證。驗(yàn)證通過(guò),則調(diào)用Action的Execute方法。在方法體內(nèi),調(diào)用業(yè)務(wù)邏輯模塊,由Hibernate在“幕后”完成與數(shù)據(jù)庫(kù)的交互。業(yè)務(wù)邏輯類里Hibernate把HQL轉(zhuǎn)換為SQL,通過(guò)O/R映射文件實(shí)現(xiàn)具體對(duì)數(shù)據(jù)源的操作,即穿過(guò)持久層映射到具體的數(shù)據(jù)庫(kù)表。Execute方法執(zhí)行后須返回ActionForward。ActionServlet接收Execute方法返回的ActionForward對(duì)象,轉(zhuǎn)發(fā)到ActionForward指定的源。

        3 基于這種框架的系統(tǒng)實(shí)現(xiàn)

        該購(gòu)物系統(tǒng)采用這種基于Struts,Hibernate和Spring三種框架的J2EE架構(gòu)設(shè)計(jì)思想,采用Tomcat 5.0作為應(yīng)用服務(wù)器,以Eclipse 3.2作為前端開(kāi)發(fā)工具。

        (1) 購(gòu)物車(chē)的實(shí)現(xiàn)。網(wǎng)上購(gòu)物不同于一般的網(wǎng)上操作,客戶在瀏覽多個(gè)商品頁(yè)面,購(gòu)物車(chē)維持的是整個(gè)購(gòu)物過(guò)程結(jié)束之前的一系列狀態(tài)數(shù)據(jù),因此必須保證購(gòu)物車(chē)實(shí)例在Session范圍內(nèi)有效。該系統(tǒng)運(yùn)用的是將購(gòu)物車(chē)封裝進(jìn)有效性為Session范圍的ActionForm中的方式。采用List類型變量存儲(chǔ)購(gòu)物信息Shoplist,購(gòu)物車(chē)Cart中存放的是每件商品的條目信息,而每件商品的信息在相應(yīng)的商品文件ProductItemDetail中。

        (2) 訂單的設(shè)計(jì)。訂單是商務(wù)活動(dòng)中的一個(gè)實(shí)體,是永久性、持續(xù)性對(duì)象,該系統(tǒng)訂單通過(guò)訂單表直接創(chuàng)建,由用戶提交后,直接寫(xiě)入后臺(tái)數(shù)據(jù)庫(kù),此時(shí)標(biāo)識(shí)訂單狀態(tài)為Unverified,然后由管理員處理訂單。檢查客戶賬戶余額,用戶檢驗(yàn)通過(guò)后,發(fā)送確認(rèn)Email,表示訂單已成功,最后改變訂單狀態(tài)為Submited。該系統(tǒng)主要分為兩個(gè)部分:前臺(tái)客戶應(yīng)用系統(tǒng);后臺(tái)數(shù)據(jù)處理系統(tǒng)。

        3.1 系統(tǒng)業(yè)務(wù)流程及總體結(jié)構(gòu)

        相對(duì)應(yīng)于功能模塊,系統(tǒng)主要分兩部分業(yè)務(wù):系統(tǒng)應(yīng)用和后臺(tái)管理。系統(tǒng)總體結(jié)構(gòu)圖如圖4所示。

        說(shuō)明:該系統(tǒng)共分為5個(gè)部分,首先是客戶端瀏覽部分,然后是Struts負(fù)責(zé)請(qǐng)表轉(zhuǎn)發(fā)和調(diào)Spring業(yè)務(wù)處理邏輯,之后是業(yè)務(wù)邏輯層,有一個(gè)業(yè)務(wù)邏輯的接口和一個(gè)數(shù)據(jù)庫(kù)操作接口,主要是實(shí)現(xiàn)業(yè)務(wù)邏輯,再次是Hhibernate層,主要是利用hibernate實(shí)現(xiàn)具體的數(shù)據(jù)庫(kù)操作,最后就是數(shù)據(jù)庫(kù)管理系統(tǒng)。

        3.2 系統(tǒng)實(shí)現(xiàn)的部分代碼及最終結(jié)果

        (1) Struts核心配置文件struts-config.xml

        <form-beans>//Actionform Beans的配置

        …</form-beans>

        </action>…//設(shè)置action類

        <action path="/login" //使用此Action的路徑是/login.do

        <controller />//對(duì)于template插件的設(shè)置

        <plug-in className="org.apache.struts.tiles.TilesPlugin">

        <set-property property="definitions-config"

        (2) Hibernate配置文件hibernate.cfg.xml

        說(shuō)明:對(duì)于Hibernate的配置文件主要是對(duì)JDBC進(jìn)行數(shù)據(jù)庫(kù)連接的一些基本配置

        <property name="connection.username">root</property>//數(shù)據(jù)庫(kù)登錄名

        <property name="connection.url">//數(shù)據(jù)庫(kù)連接地址

        <property name="myeclipse.connection.profile">

        shoppstore</property>//數(shù)據(jù)庫(kù)名

        com.mysql.jdbc.Driver</property>//數(shù)據(jù)庫(kù)的jdbc驅(qū)動(dòng)

        <mapping resource="jsp/shopstore/hibernate/hibernate.cfg.xml" /><mapping

        resource="jsp/shopstore/hibernate/front/Userinfo.hbm.xml" />//設(shè)置對(duì)應(yīng)數(shù)據(jù)庫(kù)表的xml文件路徑

        (3) Spring配置文件bean.xml

        <beans><!設(shè)置數(shù)據(jù)源對(duì)象-->

        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">

        <value> jdbc:mysql://localhost:3306/shopstore</value>

        …<!--配置sessionFactory-->

        <bean id="sessionFactory" class="">……<bean>

        <!--配置事務(wù)管理器--><bean id="transactionManager"…

        </beans>

        (4) 購(gòu)物車(chē)部分實(shí)現(xiàn)代碼

        HttpSession session=request.getSession();//取得用戶session

        List li=(List) session.getAttribute("shopcat");//取得用戶已選商品信息

        if(li==null){ li=new ArrayList();}

        String id=shop_cartForm.getId1();

        IBL ibl=new IBLImpl();

        Object obj=ibl.productItemDetail(id);

        return mapping.findForward("suc");//返回到成功跳轉(zhuǎn)頁(yè)面

        系統(tǒng)實(shí)現(xiàn)的最終形式如圖5所示。

        4 結(jié) 語(yǔ)

        在項(xiàng)目開(kāi)發(fā)中選擇Struts,Hibernate和Spring來(lái)搭建J2EE架構(gòu)。由于層次之間松散耦合和各層內(nèi)部的高內(nèi)聚,在開(kāi)發(fā)過(guò)程中,層與層之間的工作幾乎是完全獨(dú)立的。三者的結(jié)合體現(xiàn)了良好的設(shè)計(jì)思想:Struts和Spring是基于MVC的框架,兩者的結(jié)合很好地分離業(yè)務(wù)邏輯和表示層;Hibernate是一個(gè)小巧的實(shí)現(xiàn)對(duì)象關(guān)系映射的工具,把面向?qū)ο蟮脑O(shè)計(jì)開(kāi)發(fā)與關(guān)系數(shù)據(jù)庫(kù)聯(lián)系起來(lái)。

        基于這三種框架的架構(gòu)也并非沒(méi)有缺點(diǎn),如:Struts中Action的映射非常復(fù)雜;Hibernate的對(duì)象、關(guān)系之間的映射工作量很大;兩者的配置文件都很復(fù)雜等等。其實(shí),這正是其靈活之處。因?yàn)榘迅鲗佣纪耆蛛x了所以才易于重用和可擴(kuò)展,因而其靈活映射的配置文件才會(huì)很復(fù)雜。

        參考文獻(xiàn)

        [1]黃煙波,張紅宇,李建華.基于Struts和Hibernate的J2EE架構(gòu)[J].計(jì)算機(jī)時(shí)代,2004(10):29-30.

        [2]宋漢增,沈琳.利用Hibernate對(duì)象持久化服務(wù)簡(jiǎn)化Java數(shù)據(jù)庫(kù)訪問(wèn)[J].計(jì)算機(jī)應(yīng)用,2003(12):135-137.

        [3]計(jì)磊,李里,周偉.J2EE-Eclipse struts Hibernate Spring整合應(yīng)用案例[M].北京:人民郵電出版社,2006.

        [4]黃海,朱躍龍.J2EE設(shè)計(jì)模式與框架技術(shù)的應(yīng)用研究[J].計(jì)算機(jī)與現(xiàn)代化,2006(5):114-115.

        [5]趙小穗,李建民,林振榮.基于Hibernate和Struts的Web應(yīng)用系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)與現(xiàn)代化,2007(6):76-80.

        [6]Cay S Horstmann.Gary Cornell Java 2核心技術(shù) (卷I):基礎(chǔ)知識(shí)[M].北京:機(jī)械工業(yè)出版社,2006.

        [7]Bruce Eckel.Java編程思想[M].北京:機(jī)械工業(yè)出版社,2005.

        [8]Arnold Doray.Struts基礎(chǔ)教程[M].北京:人民郵電出版社,2007.

        [9]戎偉,張雙.Struts-Java流行服務(wù)器、框架、工具及整合應(yīng)用[M].北京:人民郵電出版社,2006.

        [10]邵麗萍,紹光亞,張后揚(yáng).Java語(yǔ)言程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2005.

        作者簡(jiǎn)介

        趙 洋 男,1974年出生,遼寧撫順人,講師,碩士。主要從事計(jì)算機(jī)軟件的研究工作。

        張 麗 女,1979年出生,教師,碩士,助教。主要從事計(jì)算機(jī)軟件的研究工作。

        王恩東 男,1978年出生,教師,碩士,助教。主要從事計(jì)算機(jī)軟件的研究工作。

        張素寧 女,1984年出生,河北衡水人,在讀碩士研究生。主要從事計(jì)算機(jī)軟件的研究工作。

        偷拍一区二区盗摄视频| 久久免费的精品国产v∧| 亚洲男人天堂2017| 胳膊肘上有白色的小疙瘩| 精品粉嫩国产一区二区三区| 成人影院视频在线播放| 日本免费一区二区三区影院| 人与禽性视频77777| 欧美最猛黑人xxxx黑人表情 | 国产一区二区丁香婷婷| 国产中文字幕亚洲精品| 欧美性白人极品1819hd| 波多野结衣的av一区二区三区| 亚洲成在人线av| 日韩久久久黄色一级av| av免费看网站在线观看| 亚洲视频免费一区二区 | 久久久久亚洲精品美女| 国产精品国产三级国产在线观| 国产在线精品成人一区二区三区| 成人免费无遮挡在线播放| 久久亚洲sm情趣捆绑调教| 亚洲熟女av超清一区二区三区| 国产av一区网址大全| 91九色人妻精品一区二区三区 | 亚洲乱亚洲乱妇| 国产精品无码一区二区三区免费| 亚洲七七久久综合桃花| 亚洲红杏AV无码专区首页| 亚洲国产成人久久精品美女av | 久久精品有码中文字幕1| 亚洲中文字幕在线第六区| 本道天堂成在人线av无码免费| 国产人妻丰满熟妇嗷嗷叫| 亚洲乱妇老熟女爽到高潮的片| 亚洲天堂av免费在线看| 强迫人妻hd中文字幕| 国产精品美女久久久网av| 色偷偷av男人的天堂| 99热成人精品热久久66| 少妇人妻出水中文字幕乱码|