spring框架范文
時(shí)間:2023-03-18 03:28:10
導(dǎo)語:如何才能寫好一篇spring框架,這就需要搜集整理更多的資料和文獻(xiàn),歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。
篇1
Abstract: This thesis introduced spring framework. Present tier uses Struts technique which is integrated into Spring through the configuration. Define the transaction management based on AOP technique in business tier in order to enhance the stability and flexibility of system. Define the base DAO class and configure in Spring framework in data tier to provide the standard exception types.
關(guān)鍵詞: 軟件架構(gòu);可維護(hù)性;事務(wù)管理
Key words: software architecture;maintainability;transaction management
中圖分類號(hào):TP392文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1006-4311(2010)16-0158-02
0引言
為了高效的完成業(yè)務(wù)功能需要系統(tǒng)具有良好的穩(wěn)定性、可維護(hù)性和易于擴(kuò)展的特點(diǎn)。以Spring為核心,以Struts為前端web表示層開發(fā),以Hibernate為O/R映射的工具,建立了松散耦合軟件架構(gòu),使系統(tǒng)的靈活性大大的提高。
1系統(tǒng)的架構(gòu)設(shè)計(jì)
1.1 系統(tǒng)的架構(gòu)分層MVC是一種經(jīng)典的軟件架構(gòu),其生成結(jié)構(gòu)嚴(yán)謹(jǐn)?shù)淖酉到y(tǒng)化應(yīng)用程序的有效性已得到證實(shí)[1]。本系統(tǒng)架構(gòu)按照MVC的設(shè)計(jì)模式分為三層分別是表示層(Presentation)、商務(wù)層(Business)、數(shù)據(jù)層(Data)[2]。
表示層使用Struts應(yīng)用框架作為實(shí)現(xiàn)框架,并將Spring的Web Application配置到Struts中。Struts最早是作為Apache Jakarta項(xiàng)目的組成部分問世運(yùn)作。項(xiàng)目的創(chuàng)立者希望通過對(duì)該項(xiàng)目的研究,改進(jìn)和提高Java Serve Pages (JSP) ,Servlet,標(biāo)簽庫以及面相對(duì)象的技術(shù)水準(zhǔn)[3]。
商務(wù)層和數(shù)據(jù)層使用Spring框架和Hibernate。處理了BO和DAO的依賴,處理了接口和實(shí)現(xiàn)類的依賴,事務(wù)處理,在DAO層對(duì)Hibernate API的包裝,在DAO層的異常包裝轉(zhuǎn)換。Hibernate完成ORM功能。
基于Spring的表示層、商務(wù)層、數(shù)據(jù)層分層設(shè)計(jì)即使實(shí)現(xiàn)三層的松散耦合,又提供了集中配置的功能,使系統(tǒng)的各層功能明確,使系統(tǒng)的可維護(hù)性大大提高。
1.2 層間的調(diào)用的規(guī)約禁止表示層,商務(wù)邏輯層,數(shù)據(jù)訪問層的跨層調(diào)用。數(shù)據(jù)信息的跨層傳遞可以使用DTO,如果PO信息量滿足要求也可以把PO直接當(dāng)作DTO使用,DTO類型不限可以使Java Bean,Map。DAO,BO必須聲明接口,并且在編碼中只允許使用接口類型,不允許出現(xiàn)實(shí)現(xiàn)類,增強(qiáng)系統(tǒng)可維護(hù)性,減少耦合性。
2數(shù)據(jù)訪問層
2.1 設(shè)計(jì)的目的和方法主要目的是能夠清晰地劃分出應(yīng)用層次而不管使用何種數(shù)據(jù)訪問和事務(wù)管理技術(shù);使應(yīng)用對(duì)象之間的耦合松散。業(yè)務(wù)對(duì)象不再依賴于數(shù)據(jù)訪問和事務(wù)策略;不再有硬編碼的lookup;不再有難于替換的singletons;不再有自定義的服務(wù)注冊(cè)。從而增強(qiáng)了系統(tǒng)可維護(hù)性。設(shè)計(jì)的方法是采用Spring和Hibernate相結(jié)合的方法。
基于O/R(Oriented/Relation)映射數(shù)據(jù)存取技術(shù)的Hibernate,在大型項(xiàng)目中被廣泛地使用,它將應(yīng)用系統(tǒng)邏輯和數(shù)據(jù)存儲(chǔ)邏輯分開,而且它將所有數(shù)據(jù)存儲(chǔ)邏輯都封裝在持久層的類中,對(duì)應(yīng)用系統(tǒng)開發(fā)者隱藏了數(shù)據(jù)存儲(chǔ)的實(shí)現(xiàn)細(xì)節(jié)。應(yīng)用系統(tǒng)開發(fā)者只要通過持久層提供的接口,以自己熟知的處理方法,向?qū)ο蟀l(fā)送數(shù)據(jù)存儲(chǔ)或數(shù)據(jù)裝載信息,就可以完成對(duì)象持久化的工作。暫態(tài)對(duì)象和持久對(duì)象之間的區(qū)別也被隱藏起來,應(yīng)用系統(tǒng)開發(fā)者使用同樣的處理方式來對(duì)待暫態(tài)對(duì)象和持久對(duì)象。所以選擇Hibernate作為底層數(shù)據(jù)持久化工具。
在Spring框架中可以集成了Hibernate,同時(shí)提供了的Hibernate的DAO的抽象類,將異常封裝成一致的異常層次。Spring引進(jìn)了DAO異常體系,主要目的是為了夠清晰地劃分出應(yīng)用層次而不管使用何種數(shù)據(jù)訪問和事務(wù)技術(shù)。
2.2 配置與定義在系統(tǒng)的數(shù)據(jù)訪問層的設(shè)計(jì)中,為了提供統(tǒng)一的異常處理方式和統(tǒng)一的事務(wù)處理方式。在配置文件中定義Hibernate的Session Factory這樣可以為所有的Spring中定義的Bean調(diào)用。根據(jù)IoC的原則,采用聲明式的方式配置定義的Base DAO。Base DAO是Spring不可裝載的基類,其主要的功能是負(fù)責(zé)其他的DAO提供Session Factory。這樣可以為Hibernate Sessio Factroy提供統(tǒng)一的維護(hù),增強(qiáng)系統(tǒng)的可維護(hù)性。用戶自定義的DAO類要繼承于Hibernate Dao Support類或其子類。并要定義用戶自定義DAO的接口,在接口的定義中展現(xiàn)用戶自定義類的方法,這樣才能由Spring利用java反射機(jī)制生成其相應(yīng)的DAO類的實(shí)體。這樣所有的DAO子類就可以選擇直接通過Hibernate Template來初始化,并將特定的異常轉(zhuǎn)換為unchecked異常體系。
3業(yè)務(wù)層
業(yè)務(wù)層是整個(gè)系統(tǒng)的核心,其中包含著核心的商業(yè)邏輯,需要完善的日志操作日志,全面的事務(wù)管理。在本節(jié)將介紹在spring框架下配置BO和進(jìn)行事務(wù)管理的配置。
3.1 Spring事務(wù)管理的概念Spring提供了一致的事物管理抽象。這個(gè)抽象是Spring最重要的抽象之一,它有如下的優(yōu)點(diǎn):
①為不同的事務(wù)API提供一致的編程模型,如JDBC、Hibernate、iBatis數(shù)據(jù)庫層和JDO。提供比大多數(shù)事務(wù)API更簡單的,易于使用的編程式事物管理API。②整合Spring數(shù)據(jù)訪問抽象。③支持Spring聲明式事物管理。
事物管理抽象為Plateform Transaction Manager,它的實(shí)現(xiàn)和定義同其他Spring容器中的對(duì)象一樣都是由容器管理的。這個(gè)好處是即使使用JTA,也是有很有價(jià)值的抽象:事務(wù)代碼可以比直接使用JTA更加容易測(cè)試。在Spring中,Transaction Exception是unchecked的。底層的事務(wù)失敗幾乎是致命的,很少有情況可以從他們中恢復(fù),開發(fā)者依然可以撲獲并處理Transaction Exception。Transaction Definition接口用來定義事務(wù)的,可以設(shè)定如下內(nèi)容:
事務(wù)隔離程度:當(dāng)前的事務(wù)和其他事物的隔離的程度。
事務(wù)傳播程度:通常在一個(gè)事務(wù)中執(zhí)行的所有代碼都會(huì)在這個(gè)事務(wù)中運(yùn)行。但是,如果一個(gè)事務(wù)上下文已經(jīng)存在,有幾個(gè)選項(xiàng)可以指定一個(gè)事務(wù)性方法執(zhí)行行為。例如,簡單的在現(xiàn)有的事務(wù)中運(yùn)行,或者掛起現(xiàn)有的事務(wù),創(chuàng)建一個(gè)新事務(wù)。
事務(wù)超時(shí)程度:事務(wù)在超時(shí)前能夠運(yùn)行多久。
只讀狀態(tài):只讀事務(wù)不需要修改任何數(shù)據(jù)。在只讀的某些情況下是一種非常有用的優(yōu)化。
Transaction Status接口為處理事物的代碼提供一個(gè)簡單的控制事務(wù)執(zhí)行和查詢狀態(tài)的方法。通過get Transaction Status方法可以獲得Transaction Status對(duì)象,他可能代表一個(gè)新的或已經(jīng)存在的事務(wù)。如同J2EE事務(wù)上下文一樣,Transaction Status也是和執(zhí)行的線程相關(guān)聯(lián)的,用來反映事務(wù)的狀態(tài)。
3.2 基于AOP的事務(wù)管理的實(shí)現(xiàn)根據(jù)分析,決定使用Spring框架結(jié)合Hibernate實(shí)現(xiàn)事務(wù)管理的業(yè)務(wù)。Spirng和Hibernate本身不具備事務(wù)的管理的功能。Spring對(duì)Hibernate進(jìn)行了封裝,Hibernate 是JDBC 的輕量級(jí)封裝。在事務(wù)管理過程中,Spring將事務(wù)委托給Hibernate,后者又將其委托給底層的JDBC或者JTA,以實(shí)現(xiàn)事務(wù)管理和調(diào)度功能。Hibernate的默認(rèn)事務(wù)處理機(jī)制基于JDBC Transaction。JDBC的事務(wù)處理功能簡單、易用。JTA的功能強(qiáng)大其管理的事務(wù)可以跨越connection,但其資源消耗較大。所以決定采用Hibernate的事物管理的默認(rèn)實(shí)現(xiàn)。
通過以上的配置將Spring框架的事務(wù)管理功能映射到Hibernate的默認(rèn)事務(wù)管理功能。并且自定義了異常類型Tmj Business Exception,當(dāng)該異常被拋時(shí),事務(wù)將進(jìn)行回滾操作。
3.3 BO的基類的定義BO負(fù)責(zé)業(yè)務(wù)邏輯的對(duì)象,不及數(shù)據(jù)持久化的調(diào)用允許在BO拋出異常。BO內(nèi)有一個(gè)或多個(gè)DAO Interface的成員變量,DAO初始化是通過Spring框架在xml文件配置的。A_BO調(diào)用B_BO必須把B_BO作為A_BO的屬性,同時(shí)配置到Spring的配置文件中事務(wù)處理是控制在BO層,事務(wù)模型屬于聲明型事務(wù)。
采用AOP的編程的方法的,當(dāng)在BO中的方法中拋出Business Exception時(shí),事務(wù)自動(dòng)回滾。在Trace Interceptor類中引用Tmj Logger類將用戶的操作的行為記錄如日記文件。在BO中利用面向方面的編程方法使事務(wù)管理和日志的記錄一致的,增強(qiáng)了系統(tǒng)的穩(wěn)定性,提高了系統(tǒng)的維護(hù)性。
4表示層的設(shè)計(jì)
表示層是同用戶交互的界面,負(fù)責(zé)將數(shù)據(jù)表示。表示使用廣泛使用的Struts應(yīng)用框架架構(gòu)。
Struts應(yīng)用框架通過“Plug-in”元素同Spring框架結(jié)合起來。
Base Action的定義:Base Action對(duì)Action進(jìn)行封裝,減少了系統(tǒng)的冗余性。 Base Action主要提供如下的功能:get Bean()的將在Application Context中聲明的bean引入到Web Application中,便于在表現(xiàn)層引用。
check Login()判斷用戶是否已經(jīng)登錄。
log AccessInfo()將用戶的信息、訪問時(shí)間和訪問的頁面ID等信息寫入日志文件中。
5總結(jié)
在實(shí)現(xiàn)過程中,根據(jù)Spring提供的AOP的功能,配置完善的事務(wù)管理程序?yàn)橄到y(tǒng)提供了統(tǒng)一的透明的事務(wù)管理方法;使異常更容易的被分類處理,并記入日志,便于系統(tǒng)管理員分析錯(cuò)誤;使系統(tǒng)的穩(wěn)定性大大提高。
參考文獻(xiàn):
[1]Richard Jensen. Mapping Classes to Relational Tables. Java Pro, 2004, (4):11-12.
篇2
關(guān)鍵詞:持久化,對(duì)象/關(guān)系映射,J2EE
隨著計(jì)算機(jī)網(wǎng)絡(luò)的普及以及計(jì)算機(jī)技術(shù)的普遍應(yīng)用,近年來出現(xiàn)了越來越多的Web 應(yīng)用,應(yīng)用范圍包括信息管理、在線交易、工作流及協(xié)作環(huán)境、網(wǎng)絡(luò)社區(qū)等。這些應(yīng)用系統(tǒng)的共同特點(diǎn)是Web 頁面多、導(dǎo)航困難、業(yè)務(wù)邏輯復(fù)雜。而在現(xiàn)在B/S 結(jié)構(gòu)的大型Web 開發(fā)中, 可重用的、易維護(hù)和擴(kuò)展的, 并且性能良好的組件, 是至關(guān)重要的。Hibernate+Struts+Spring (HSS) 框架。這種框架使用Struts 實(shí)現(xiàn)表示層,Spring實(shí)現(xiàn)業(yè)務(wù)層,Hibernate 實(shí)現(xiàn)持久層,然后把三者無縫地整合起來,應(yīng)用到項(xiàng)目開發(fā)中。勞資管理是一項(xiàng)政策性很強(qiáng),工作量很繁復(fù)的工作,其主要包括2 年1 次的正常晉級(jí)、職務(wù)變動(dòng)等勞動(dòng)工資的調(diào)整及各類人員績效工資情況的統(tǒng)計(jì)。由于它牽扯到每一個(gè)員工的切身利益,所以其準(zhǔn)確性要求極高, 特別是要查找某人歷年的工資變動(dòng)情況時(shí),非常繁瑣,費(fèi)時(shí)費(fèi)力。本文將Web 環(huán)境下的Hibernate+Struts+Spring 框架應(yīng)用于勞資管理工作中。
1 MVC 模式
MVC(Model- View-Control, 模型- 視圖- 控制器)模式是XeroxPARC 在20 世紀(jì)80 年代為編程語言Smalltalk―80 設(shè)計(jì)的一種軟件設(shè)計(jì)模式, 至今已被廣泛使用, 并被推薦為Sun 公司J2EE 平臺(tái)的設(shè)計(jì)模式, 其為開發(fā)交互式應(yīng)用系統(tǒng)提供了一個(gè)優(yōu)秀的設(shè)計(jì)模式, 受到越來越多開發(fā)者的歡迎。MVC 要由3 部分組成:模型、視圖和控制器,
模型(Model)包括業(yè)務(wù)邏輯和業(yè)務(wù)規(guī)則等, 在MVC 的三個(gè)部件中擁有最多的處理任務(wù)。它可以用JavaBean 和EJB 等組件技術(shù)來處理數(shù)據(jù)庫的訪問。模型能為多個(gè)視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫一次就可以被多個(gè)視圖重用, 所以減少了代碼的重復(fù)性。
視圖(View)是屏幕上的顯示。模型進(jìn)行操作之后, 其結(jié)果就是通過視圖來顯示的。在視圖中其實(shí)沒有真正的處理發(fā)生, 只是作為一種輸出數(shù)據(jù)并允許用戶操作的方式。控制器用于管理用戶與視圖發(fā)生的交互。一旦用戶想對(duì)模型進(jìn)行處理時(shí), 它不能直接去執(zhí)行模型, 而是通過控制器來間接地實(shí)現(xiàn)。
控制器(Control)能從視圖中取值, 然后將相應(yīng)的值傳給模型進(jìn)行處理。控制器接受用戶的輸入并調(diào)用模型和視圖去完成用戶的需求。論文大全。
MVC 模式的處理過程是:首先由控制器接收用戶的請(qǐng)求, 并決定應(yīng)該調(diào)用哪個(gè)模型來進(jìn)行處理, 然后模型用業(yè)務(wù)邏輯來處理用戶的請(qǐng)求并返回?cái)?shù)據(jù), 最后控制器用相應(yīng)的視圖返回?cái)?shù)據(jù), 并通過表達(dá)層呈現(xiàn)給用戶。MVC 本身就是一個(gè)非常復(fù)雜的系統(tǒng), 所以采用MVC 實(shí)現(xiàn)Web 應(yīng)用時(shí),最好選一個(gè)現(xiàn)成的MVC 框架, 在此之下進(jìn)行開發(fā), 從而取得事半功倍的效果。現(xiàn)在有很多可供使用的MVC 框架, 由Struts有完整的文檔并且相對(duì)來講比較簡單, 所以用它開發(fā)MVC 系統(tǒng)還是比較方便地。
2 Struts+ Hibernate+ Spring
Struts 提供了Controller組件并且整合了其它技術(shù)來實(shí)現(xiàn)Model 和View。對(duì)于Model,Struts 可以使用標(biāo)準(zhǔn)數(shù)據(jù)訪問技術(shù),如JDBC 和EJB,也可以使用第三方工具,如Hibernate。至于View,Struts 支持JSP 技術(shù)、JSTL 和JSF,也可以使用Velocity模板,XSLT 及其它表示系統(tǒng)。此外Struts 提供了自定義的標(biāo)記庫,可以輔助JSP 進(jìn)行表示層的設(shè)計(jì),通過這些自定義標(biāo)記可以和系統(tǒng)的Model 部分進(jìn)行交互。Struts 的核心組件有:
ActionServlet、Action、ActionForm、ActionMapping、ActionForword、TagLib 以及配置文件等。我們用JSP 技術(shù)結(jié)合Struts 強(qiáng)大的TagLib 來實(shí)現(xiàn)我們的表示層[3]。
在企業(yè)級(jí)的應(yīng)用中,由于需要頻繁的與數(shù)據(jù)庫交互,開發(fā)者往往在應(yīng)用和數(shù)據(jù)庫之間建立一個(gè)“持久層”,它負(fù)責(zé)應(yīng)用到數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ),也負(fù)責(zé)數(shù)據(jù)的檢索和更新。在J2EE 的應(yīng)用中,這個(gè)持久層通常使用DBC,實(shí)體Beans,JDO 等等技術(shù)來建立。但由于JDBC 中數(shù)據(jù)訪問對(duì)象(DAO) 和SQL 語句直接綁定在一起,且不支持繼承和多態(tài),而且還需要額外的EJB 容器,這就降低了系統(tǒng)的可維護(hù)性。Hibernate 是一個(gè)實(shí)現(xiàn)對(duì)象和關(guān)系之間映射(objectrelation mapping,ORM)的開源框架。它對(duì)JDBC 進(jìn)行了輕量級(jí)的對(duì)象封裝,使得JAVA程序員可以使用面向?qū)ο蟮木幊趟季S來操作關(guān)系數(shù)據(jù)庫。如果在軟件開發(fā)中采用面向?qū)ο蟮姆绞竭M(jìn)行設(shè)計(jì),而使用的是關(guān)系數(shù)據(jù)庫,就可以選用Hibernate 這種框架來實(shí)現(xiàn)對(duì)象和關(guān)系之間的映射和數(shù)據(jù)的持久化。Hibernate擁有一種功能非常強(qiáng)大的查詢語言HQL,這種語言與SQL 相似,而且完全是面向?qū)ο蟮摹K樵兊氖浅志没瘜?duì)象,而不是數(shù)據(jù)庫的記錄,而且它可以支持多態(tài)、繼承、關(guān)聯(lián)等關(guān)系[3]。
Spring 是一個(gè)以依賴注入(inversionof control,IoC)原則和面向方面編程思想(aspect-oriented programming,AOP)為基礎(chǔ)的輕量級(jí)框架。Spring 既是一個(gè)AOP 框架,也是一個(gè)IoC 容器。運(yùn)用AOP 可以創(chuàng)建“橫切關(guān)注點(diǎn)”(CrosscuttingConcerns),在應(yīng)用時(shí)將它們插入代碼中,使得代碼有良好的可重用性。IoC 容器允許在需要生成對(duì)象的地方創(chuàng)建一個(gè)應(yīng)用上下文,然后將這些對(duì)象傳遞給它們的合作對(duì)象。它可以很容易地替換業(yè)務(wù)對(duì)象,只要用Java Bean 屬性和配置文件加入依賴性,然后就可以很容易地在需要時(shí)替換具有類似接口的協(xié)作對(duì)象[3]。
Spring 還提供了可以和總體的IoC 容器集成的強(qiáng)大而靈活的MVCWeb 框。Spring 是一個(gè)輕型容器,其核心是Bean 工廠,用以構(gòu)造我們所需要的Model。在此基礎(chǔ)之上,Spring 提供了AOP的實(shí)現(xiàn),用它來提供非管理環(huán)境下申明方式的事務(wù)、安全等服務(wù);對(duì)Bean 工廠的擴(kuò)展ApplicationContext 更加方便我們實(shí)現(xiàn)J2EE的應(yīng)用;DAO/ORM 的實(shí)現(xiàn)也更方便我們進(jìn)行數(shù)據(jù)庫的開發(fā);Web MVC 和Spring Web 提供了JavJava Web 應(yīng)用的框架或能夠與其它流行的Web 框架進(jìn)行集成[5]。
Spring 使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring 的用途不僅限于服務(wù)器端的開發(fā),從簡單性、可測(cè)試性和松耦合的角度而言,任何Java 應(yīng)用都可以從Spring 中受益。
3 系統(tǒng)設(shè)計(jì)
經(jīng)過對(duì)勞資管理系統(tǒng)進(jìn)行詳細(xì)的系統(tǒng)分析,系統(tǒng)需要實(shí)現(xiàn)全動(dòng)態(tài)、分布式的信息傳輸與處理機(jī)制,實(shí)現(xiàn)系統(tǒng)出勤信息按部門和權(quán)限進(jìn)行動(dòng)態(tài)和更新。Web 瀏覽器是集成所有信息服務(wù)的最終平臺(tái),因此該系統(tǒng)是基于三層的瀏覽器/服務(wù)器(B/S) 體系結(jié)構(gòu)。
其中表現(xiàn)層用JSP 技術(shù)結(jié)合Struts 強(qiáng)大的TagLib 來實(shí)現(xiàn),業(yè)務(wù)層由Spring 實(shí)現(xiàn)業(yè)務(wù)組件的組裝關(guān)聯(lián),通過依賴注入、A O P應(yīng)用、面向接口編程,來降低業(yè)務(wù)系統(tǒng)開發(fā)環(huán)境:Netbeans;后臺(tái)數(shù)據(jù)庫:SQL Server2000;Web服務(wù)器:Tomcat5.0。系統(tǒng)總體設(shè)計(jì)如下:
圖1 系統(tǒng)總體設(shè)計(jì)圖
考勤模塊:此模塊可以由各部門通過網(wǎng)絡(luò)訪問,將本部門的各員工的本月出勤情況,加班情況上報(bào)人事部門。經(jīng)人事審核后存入系統(tǒng)數(shù)據(jù)庫。
工資計(jì)算:此模塊由人事部門使用,包括崗位工資,技能工資,月獎(jiǎng),年終獎(jiǎng)的計(jì)算方法設(shè)置,系統(tǒng)根據(jù)人事部門設(shè)定的計(jì)算日期自動(dòng)計(jì)算當(dāng)月各員工工資。
政策管理:此模塊負(fù)責(zé)有關(guān)各項(xiàng)人事法規(guī)、工資法規(guī)的設(shè)置,根據(jù)這些法規(guī)設(shè)置工資調(diào)整,工資的計(jì)算法則。
工資查詢:由各員工通過網(wǎng)絡(luò)訪問進(jìn)行月度工資的計(jì)算;財(cái)務(wù)部門也可以通過此模塊進(jìn)行工資核實(shí)。此系統(tǒng)在當(dāng)月工資計(jì)算完畢驚人是審核后會(huì)自動(dòng)傳遞到財(cái)務(wù)部門的財(cái)務(wù)系統(tǒng),接受財(cái)務(wù)審核。
用戶管理:此模塊負(fù)責(zé)該系統(tǒng)用戶的使用權(quán)限的分配和管理。
4 結(jié)束語
本文針對(duì)勞資管理的特點(diǎn),利用企業(yè)流行的Struts+Hibernate+Spring 應(yīng)用技術(shù),設(shè)計(jì)出基于J2EE 平臺(tái)的電子政務(wù)系統(tǒng)。論文大全。論文大全。在系統(tǒng)建模中,通過采用Struts 的設(shè)計(jì)充分地體現(xiàn)了MVC 的架構(gòu),其維護(hù)起來會(huì)非常方便。Hibernate的引入避免了手工編寫訪問數(shù)據(jù)持久層的方法,Spring利用延時(shí)注入思想組裝代碼,大大增強(qiáng)了項(xiàng)目的可擴(kuò)展性,降低了維護(hù)成本,提高了軟件開發(fā)效率。實(shí)際的應(yīng)用表明:該系統(tǒng)具有良好的交互性、可擴(kuò)展性和可維護(hù)性,表現(xiàn)出良好的性能。
參考文獻(xiàn)
[1] 李 健. 勞動(dòng)工資與社會(huì)保障MIS 系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J ] . 計(jì)算機(jī)系統(tǒng)應(yīng)用,2000 (1) :26~29.
[2] 吳翔勝.人事勞資管理軟件的開發(fā)和應(yīng)用[J ] . 鄭州紡織工學(xué)院學(xué)報(bào),1999 (2) .
[3] 孫衛(wèi)琴.精通Struts:基于MVC 的Java Web開發(fā)[M].北京:電子工業(yè)出版社,2004:95-127.
[4].The apache softwarefoundation[EB/OL].struts.apache.org/.
[5] Hibernate .Relational ersistence for Javaand .NET[EB/OL].hibernate.org.
篇3
關(guān)鍵詞: 科研管理;三層架構(gòu);Struts;Spring;Hibernate
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2009)27-7684-02
Scientific Management System Based on Struts+Spring+Hibernate Frameworks
NI Jian-xin
(Journal of Wuxi Teachers' College, Wuxi 214001, China)
Abstract: In this paper, discusses the Scientific Management System's architecture, function modules, key technologies, this system uses the three-tier architecture, the realization of Web performance using Struts, Hibernate for data access and persistence layer, Spring for business layer, practice shows that this system greatly improved the efficiency of Scientific Management in our college.
Key words: scientific management; three-tier architecture; struts; spring; hibernate
隨著校園網(wǎng)應(yīng)用以及教師專業(yè)化進(jìn)程的不斷深入,各高校和科研單位都對(duì)科研工作的數(shù)量和水平提出了新的要求,科研管理部門的工作量日趨加重,原先利用檔案或簡單的統(tǒng)計(jì)軟件對(duì)科研項(xiàng)目,科研成果進(jìn)行管理,統(tǒng)計(jì),分析已經(jīng)變得越來越困難,而且其信息的滯后性也不能反映出學(xué)校目前的科研現(xiàn)狀,為了提高我校科研管理工作的效率,減少科研管理的工作量,使科研管理更加規(guī)范化,現(xiàn)代化,設(shè)計(jì)一個(gè)符合我校科研管理模式的科研管理系統(tǒng)就顯得十分重要,本文從系統(tǒng)結(jié)構(gòu),相關(guān)模塊及主要實(shí)現(xiàn)技術(shù)三個(gè)方面詳細(xì)描述了其實(shí)現(xiàn)過程。
1 系統(tǒng)結(jié)構(gòu)
本系統(tǒng)采用三層架構(gòu)的模式分為表現(xiàn)層、業(yè)務(wù)層和持久化層,利用Struts實(shí)現(xiàn)Web表現(xiàn)層,Hibernate實(shí)現(xiàn)數(shù)據(jù)訪問和持久化層,Spring實(shí)現(xiàn)業(yè)務(wù)層和整合工作,用MYSQL作為數(shù)據(jù)庫服務(wù)器,JSP服務(wù)器采用Tomcat, 在設(shè)計(jì)模式中,分層是一個(gè)非常重要的設(shè)計(jì)模式,可以剪斷層與層之間的耦合關(guān)系,在每層中只解決相關(guān)問題,利于發(fā)揮不同框架的功能,其總體結(jié)構(gòu)圖如圖1所示。
2 相關(guān)模塊及用例圖
本系統(tǒng)主要包括登錄模塊和科研信息的管理兩個(gè)功能模塊,其中科研信息的管理又可以細(xì)分為新增,修改,查詢,刪除,分頁,統(tǒng)計(jì)等,其實(shí)現(xiàn)的用例圖如圖2所示。
3 系統(tǒng)主要實(shí)現(xiàn)技術(shù)及相關(guān)代碼
3.1 Web表現(xiàn)層的實(shí)現(xiàn)
本系統(tǒng)利用Struts強(qiáng)大的標(biāo)簽庫和自動(dòng)校驗(yàn)功能,來實(shí)現(xiàn)數(shù)據(jù)的前端顯示,并把Action類的實(shí)例化交給Spring的IoC容器來完成,并采用一個(gè)模塊一個(gè)配置文件的手段,由login.xml、manage.xml和struts.xml負(fù)責(zé)登錄模塊、科研管理模塊以及全局配置。在登錄模塊中自定義了一個(gè)Action類LoginAction.java進(jìn)行登錄校驗(yàn),以Model-Driven方式來實(shí)現(xiàn),使用一個(gè)User值來傳遞數(shù)據(jù),登錄成功進(jìn)入系統(tǒng),失敗則顯示錯(cuò)誤信息,其配置文件代碼如下:
/index.jsp
error.jsp
在科研管理模塊中,為了代碼簡單清晰,僅僅使用一個(gè)Action類ManageAction來實(shí)現(xiàn)新增,修改,查詢,刪除,分頁,以Property-Driven屬性驅(qū)動(dòng)模式來實(shí)現(xiàn),所有表單域都作為ManageAction的屬性,沒有值對(duì)象參與,通過Spring的Ioc容器將相關(guān)屬性注入,在一個(gè)類中實(shí)現(xiàn)了query(),save(),delete()等相關(guān)方法,為了讓用戶在使用時(shí)感覺更加人性化,在save()方法的配置文件中還定義了兩個(gè)過濾器來實(shí)現(xiàn)輸入數(shù)據(jù)的自動(dòng)校驗(yàn)功能,對(duì)于前端JSP頁面的顯示,主要通過使用Struts中的表單標(biāo)簽來實(shí)現(xiàn)。
在struts.xml中通過來包含導(dǎo)入的manage.xml和login.xml,從而實(shí)現(xiàn)全局配置。
3.2 數(shù)據(jù)層的實(shí)現(xiàn)
本系統(tǒng)后臺(tái)數(shù)據(jù)庫采用Mysql來實(shí)現(xiàn),在Mysql中創(chuàng)建科研管理系統(tǒng)相關(guān)的數(shù)據(jù)表management,其表結(jié)構(gòu)主要字段如表1。
表創(chuàng)建完畢后,需要通過配置數(shù)據(jù)源將Hibernate和Spring整合在一起,這里直接使用MyEclipse中的DatasourceSessionFactory向?qū)硗瓿蛇@個(gè)工作,并生成Mapping文件和持久化類。
整個(gè)系統(tǒng)數(shù)據(jù)庫連接部分,也就是DAO類的實(shí)現(xiàn)非常簡單,都是借助于父類HibernateDaoSupport來實(shí)現(xiàn),對(duì)于登錄模塊直接通過用戶名和密碼來查找驗(yàn)證,對(duì)于科研管理模塊中的新增,修改,查詢,刪除直接使用getHibenateTemplate()方法來實(shí)現(xiàn),對(duì)于數(shù)據(jù)分頁則使用Query類的setFirstResult()和setMaxResults()方法來實(shí)現(xiàn)。
其主要代碼如下:
Public List doInHibernate(Session session) throws HibernateException, SQLException{Query query=session.createQuery(sql1);
query.setFirstResult(startRow1);
query.setMaxResults(pageSize1);
return query.list();}
3.3 業(yè)務(wù)層的實(shí)現(xiàn)
本系統(tǒng)利用Spring的IoC容器整合了Web表現(xiàn)層,業(yè)務(wù)層和數(shù)據(jù)層,主要通過如下方法來實(shí)現(xiàn),將Struts中的Action類實(shí)例化,將DAO組件實(shí)例化,并將DAO組件實(shí)例注入業(yè)務(wù)邏輯組件,從而實(shí)現(xiàn)了業(yè)務(wù)邏輯組件和DAO組件的高度解耦,加載Hibernate模塊,提供數(shù)據(jù)源,為業(yè)務(wù)邏輯方法增加事務(wù)控制,借助于Spring的聲明式事務(wù)管理,并不需要添加任何代碼,所有的事務(wù)管理都放在Spring的application―Context.xml配置文件中,其中科研管理模塊Bean配置如圖3所示。
其相應(yīng)的Bean配置文件代碼如下:
從這里我們可以看出三層結(jié)構(gòu)的分布情況,層與層之間都是面向接口方式實(shí)現(xiàn),以此實(shí)現(xiàn)高度解藕。
4 結(jié)束語
本文討論了使用輕量級(jí)J2EE框架Struts+Spring+Hibernate的整合來開發(fā)J2EE應(yīng)用項(xiàng)目科研管理系統(tǒng),該架構(gòu)開發(fā)簡潔、結(jié)構(gòu)清晰,并使系統(tǒng)具有良好的復(fù)用性、擴(kuò)展性和可維護(hù)性,通過添加更復(fù)雜的業(yè)務(wù)邏輯,可以滿足更多的實(shí)際需求,經(jīng)實(shí)踐表明,極大的提高了我校科研管理的效率。
參考文獻(xiàn):
[1] 劉聰.零基礎(chǔ)學(xué)Java Web開發(fā)[M].北京:機(jī)械工業(yè)出版社,2007.
篇4
本文針對(duì)Java EE多層體系結(jié)構(gòu)、關(guān)鍵設(shè)計(jì)模式進(jìn)行研究,采用構(gòu)建輕量級(jí)J2EE框架所使用的Struts2、 Ibatis、Spring技術(shù),該框架實(shí)現(xiàn)了表現(xiàn)邏輯和業(yè)務(wù)邏輯的分離,使系統(tǒng)具有較好的擴(kuò)展性和可維護(hù)性。
【關(guān)鍵詞】Struts2 iBATIS Spring
1 引言
產(chǎn)品銷售是企業(yè)的生命線,對(duì)產(chǎn)品銷售數(shù)據(jù)進(jìn)行管理分析,并以可視化的圖表方式展示產(chǎn)品銷售的各種數(shù)據(jù),為企業(yè)決策提供準(zhǔn)確的參考依據(jù)。本文介紹了系統(tǒng)的需求、功能模塊劃分、技術(shù)架構(gòu)等方案。
2 系統(tǒng)架構(gòu)設(shè)計(jì)
本系統(tǒng)采用Java EE的多層結(jié)構(gòu),這些層次是:控制層、、持久層、領(lǐng)域模型層。 每層在應(yīng)用程序中有各自的功能,不能與其他層功能耦合。
視圖層負(fù)責(zé)系統(tǒng)數(shù)據(jù)的顯示,它從業(yè)務(wù)層取得數(shù)據(jù)并顯示數(shù)據(jù)。當(dāng)業(yè)務(wù)層變化時(shí),將自動(dòng)更新,并傳送給控制層。本系統(tǒng)采用Struts2實(shí)現(xiàn)MVC框架,視圖層由JSP結(jié)合Struts2 TagLib來實(shí)現(xiàn)。視圖層屬于MVC開發(fā)設(shè)計(jì)模式中“V”,Struts2框架是實(shí)現(xiàn)MVC模式的一個(gè)應(yīng)用框架,它以WebWork的設(shè)計(jì)為核心,同時(shí)兼容Struts1.x。
控制層是MVC框架中的”C”,F(xiàn)ilterDispatcher是Struts2框架的核心控制器,主要負(fù)責(zé)攔截用戶請(qǐng)求。響應(yīng)請(qǐng)求Struts2框架會(huì)依據(jù)struts.xml配置文件選擇相應(yīng)的Action進(jìn)行業(yè)務(wù)處理。
業(yè)務(wù)層主要負(fù)責(zé)實(shí)現(xiàn)系統(tǒng)的業(yè)務(wù)邏輯。EJB框架和Spring框架都可實(shí)現(xiàn)業(yè)務(wù)層,Spring框架與應(yīng)用服務(wù)器整合的能力相對(duì)EJB3.0要弱,但是Spring框架模塊的可分離配置優(yōu)于EJB3.0的靈活性。
持久層主要負(fù)責(zé)與數(shù)據(jù)庫的交互,為業(yè)務(wù)層提供數(shù)據(jù)庫訪問功能。使用iBATIS提供的O/R Mapp映射機(jī)制,iBATIS通過在SQL開發(fā)的工作量和數(shù)據(jù)庫移植性上提供了很大的自由空間,本系統(tǒng)選擇采用iBATIS實(shí)現(xiàn)持久層。
領(lǐng)域模型層是ORM思想的產(chǎn)物,ORM用對(duì)象關(guān)聯(lián)數(shù)據(jù)表,將這些對(duì)象的集合歸為一個(gè)專門的層即領(lǐng)域模型層。它不再需要開發(fā)者建立和維護(hù)不必要的數(shù)據(jù)傳輸對(duì)象來匹配對(duì)應(yīng)的領(lǐng)域?qū)ο螅也恍枰郊泳幋a。
3 系統(tǒng)總體設(shè)計(jì)
產(chǎn)品銷售是企業(yè)經(jīng)營過程中的一個(gè)重要環(huán)節(jié),通過產(chǎn)品銷售分析系統(tǒng),可以獲取各種產(chǎn)品銷售系統(tǒng),生成各種產(chǎn)品銷量和營業(yè)額的相關(guān)圖形,產(chǎn)品銷售系統(tǒng)分為產(chǎn)品管理、訂單管理和銷售分析3個(gè)模塊。產(chǎn)品管理可以添加、刪除、修改產(chǎn)品,維護(hù)企業(yè)的產(chǎn)品資源;訂單管理可以添加、刪除、修改訂單,維護(hù)企業(yè)的產(chǎn)品訂單;銷售分析是根據(jù)產(chǎn)品訂單數(shù)據(jù)生成各種產(chǎn)品銷售分析圖。
4 系統(tǒng)實(shí)現(xiàn)
4.1 iBATIS配置文件
根據(jù)系統(tǒng)需求分析,產(chǎn)品銷售分析系統(tǒng)需要實(shí)現(xiàn)產(chǎn)品維護(hù)、訂單維護(hù)以及各種銷售分析圖形的生成等功能。以產(chǎn)品銷售分析系統(tǒng)的訂單維護(hù)功能為例介紹有關(guān)配置。在iBATIS的SQL Map框架中,需要一個(gè)配置文件XML配置持久層框架信息,如配置數(shù)據(jù)庫連接JDBC、SQLMap映射文件的加載、SQL Map的配置和優(yōu)化設(shè)定。
4.2 Spring與iBATIS整合實(shí)現(xiàn)DAO
本系統(tǒng)框架中采用Spring整合iBATIS結(jié)合來實(shí)現(xiàn)系統(tǒng)的DAO層。DAO模式是Java EE核心設(shè)計(jì)模式,用來抽象和封裝所有對(duì)數(shù)據(jù)源的訪問。Spring對(duì)iBATIS整合后,對(duì)iBATIS的配置主要是對(duì)SqlMapClient節(jié)點(diǎn)的配置,實(shí)際上是配置了一個(gè)SqlMapClient的創(chuàng)建工廠類。本系統(tǒng)Spring的核心配置文件是/WEB-INF/spring-context/applicationContext.xml,系統(tǒng)通過在web.xml中配置Spring監(jiān)聽器來啟動(dòng)Spring,Spring在web.xml中的配置。
系統(tǒng)啟動(dòng)時(shí)通過ContextLoadListener初始化Spring容器。然后ContextLoaderListener監(jiān)聽器通過初始化參數(shù)connextConfigLocation找到配置文件applicationContext.xml并加載。
SqlMapClient節(jié)點(diǎn)配置中,configLocation屬性配置了iBATIS映射文件的路徑及名稱,dataSource屬性引入了數(shù)據(jù)源。
4.3 業(yè)務(wù)邏輯層設(shè)計(jì)與事務(wù)管理
業(yè)務(wù)邏輯層是系統(tǒng)架構(gòu)中核心價(jià)值的部分,它主要實(shí)現(xiàn)業(yè)務(wù)規(guī)則制定、業(yè)務(wù)流程的實(shí)現(xiàn)等與業(yè)務(wù)需求有關(guān)的系統(tǒng)設(shè)計(jì)。系統(tǒng)業(yè)務(wù)邏輯層的設(shè)計(jì),采用接口和實(shí)現(xiàn)分開的原則,業(yè)務(wù)邏輯組件接口定義該組件包含的功能,實(shí)現(xiàn)類提供該組件的實(shí)現(xiàn)。在輕量級(jí)JavaEE架構(gòu)中,DAO組件將事務(wù)管理延遲到業(yè)務(wù)邏輯層管理。通過Spring的聲明式事務(wù)管理,讓業(yè)務(wù)邏輯層對(duì)象的方法具務(wù)事務(wù)性。
4.4 Spring與Struts2整合管理Action
本系統(tǒng)采用Spring IoC容器來管理業(yè)務(wù)邏輯組件,利用依賴注入為Action注入業(yè)務(wù)邏輯組件。Spring插件是通過覆蓋Struts2的ObjectFactory來增強(qiáng)核心框架對(duì)象的創(chuàng)建。當(dāng)創(chuàng)建一個(gè)對(duì)象時(shí),Spring插件會(huì)用Struts2配置文件中的class屬性去和Spring 配置文件中的id屬性進(jìn)行關(guān)聯(lián),如果屬性名相同,則由Spring創(chuàng)建,否則由Struts2框架自身創(chuàng)建,最后由Spring來裝配。
4.5 Spring整合Log4j實(shí)現(xiàn)日志管理
Log4j是Apache的一個(gè)開源代碼項(xiàng)目,它提供了一種細(xì)膩的日志管理方式,通過一個(gè)配置文件,可以多選擇的控件每條日志的輸出格式和目的地;通過定義信息的級(jí)別,可靈活開關(guān)代碼中的反饋信息。通過Spring來使用Log4j,可以使Log4j的配置更簡單靈活。
5 總結(jié)
本文主要介紹該系統(tǒng)各個(gè)功能劃分,系統(tǒng)框架整合,在該整合框架中如何實(shí)現(xiàn)產(chǎn)品維護(hù)、訂單維護(hù)和生成銷售分析圖等功能。
參考文獻(xiàn)
[1]梁建全,周力,孟志勇,田利軍.輕量級(jí)javaEE框架整合方案[M].北京:人民郵電出版社,2008.
[2]葉健毅.javaEE Eclipse Struts2 Hibernate Spring框架整合應(yīng)用案例(第2版)[M].北京:人民郵電出版社,2009.
作者單位
篇5
關(guān)鍵詞: SSH框架; J2EE技術(shù); Web開發(fā); 籃球俱樂部
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2012)10-24-03
引言
目前,Java Web輕量級(jí)開發(fā)的主流技術(shù)是SSH(Struts+Spring+Hibernate)框架。但隨著軟件開發(fā)技術(shù)的快速發(fā)展,SSH框架表現(xiàn)出安全性、開發(fā)過程復(fù)雜、功能不夠齊全的問題,因此,對(duì)SSH框架進(jìn)行補(bǔ)充和改進(jìn)是必要的。
針對(duì)SSH框架存在的問題,運(yùn)用各種成熟框架與技術(shù)對(duì)SSH框架進(jìn)行集成和擴(kuò)展,實(shí)踐證明,在項(xiàng)目的開發(fā)過程中應(yīng)用改進(jìn)后的SSH框架,使開發(fā)的效率顯著提高,系統(tǒng)的可靠性、可擴(kuò)展性和可維護(hù)性等各種性能也明顯提升。
1 成熟框架和通用技術(shù)簡介
1.1 常用框架技術(shù)
1.1.1 SSH框架
SSH框架的系統(tǒng)從職責(zé)上分為四層:表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層和域模塊層,以幫助開發(fā)人員在短期內(nèi)搭建結(jié)構(gòu)清晰、可復(fù)用性好、維護(hù)方便的Web應(yīng)用程序。其中使用Struts作為系統(tǒng)的整體基礎(chǔ)架構(gòu),負(fù)責(zé)MVC的分離,在Struts框架的模型部分,利用Hibernate框架對(duì)持久層提供支持,業(yè)務(wù)層用Spring支持。具體做法是:用面向?qū)ο蟮姆治龇椒ǜ鶕?jù)需求提出一些模型,將這些模型實(shí)現(xiàn)為基本的Java對(duì)象,然后編寫基本的DAO接口,并給出Hibernate的DAO實(shí)現(xiàn),采用Hibernate架構(gòu)實(shí)現(xiàn)的DAO類來實(shí)現(xiàn)Java類與數(shù)據(jù)庫之間的轉(zhuǎn)換和訪問,最后由Spring完成業(yè)務(wù)邏輯。SSH集成框架與技術(shù)結(jié)構(gòu)如圖1所示。
Compass是基于Lucene之上的,是第一個(gè)實(shí)現(xiàn)Java的開源搜索引擎框架[1]。Compass封裝了對(duì)全文檢索引擎lucene的操作,并且提供了Spring/Hibernate的應(yīng)用層框架,讓用戶可以不必深入了解lucene,輕松地在自己的Spring/Hibernate架構(gòu)的Web應(yīng)用當(dāng)中集成全文檢索功能。Hibernate可直接操作數(shù)據(jù)庫,當(dāng)數(shù)據(jù)發(fā)生改變時(shí),可以通過Compass的OSEM對(duì)數(shù)據(jù)索引進(jìn)行更新。
1.1.3 Spring MVC框架
Spring MVC框架采用前端控制模式(Front Controller),它是Spring MVC請(qǐng)求中樞,其核心是DispatcherServlet。Spring MVC的所有請(qǐng)求通過它轉(zhuǎn)發(fā)到不同的處理器(Colltroller)處理,處理完后返回一個(gè)Model And View對(duì)象。DispatcherServlet查詢一個(gè)或多個(gè)ViewResolver視圖解析器,找到Model And View對(duì)象指定的視圖對(duì)象,視圖對(duì)象負(fù)責(zé)渲染返回給客戶端。
1.1.4 SWF(Spring Web Flow)框架
Spring Web Flow是Spring框架提供的構(gòu)建Web應(yīng)用程序的全功能MVC模塊。使用Spring可插入的MVC架構(gòu),可以選擇是使用內(nèi)置的Spring Web框架還是Struts這樣的Web框架。通過策略接口,Spring框架是高度可配置的,而且包含多種視圖技術(shù),例如JavaServer Pages(JSP)技術(shù)、Velocity、Tiles、iText和POI。Spring MVC分離了控制器、模型對(duì)象、分派器以及處理程序?qū)ο蟮慕巧@種分離讓它們更容易進(jìn)行定制。因此,它的出現(xiàn)極大地提高了編程效率,尤其適合需要復(fù)雜用戶交互界面的Web應(yīng)用程序[2]。
1.1.5 DWR框架
DWR(Direct Web Remoting)是一個(gè)開源項(xiàng)目,是基于Java的Ajax實(shí)現(xiàn)。它包含服務(wù)器端 Java 庫、一個(gè)DWR Servlet以及JavaScript庫。DWR的主要特點(diǎn)是能夠?qū)⒎?wù)器所寫的Java類直接轉(zhuǎn)化為Javascript中所引用的對(duì)象,簡化了Javascript中的轉(zhuǎn)化操作[3]。
1.2 通用技術(shù)介紹
1.2.1 Ajax技術(shù)
AJAX(A synchronous JavaScript and XML)實(shí)際上是幾項(xiàng)技術(shù)按一定的方式組合, 在共同的協(xié)作中發(fā)揮各自作用的技術(shù)[4]。Ajax具有改善B/S模式下交互、帶寬性能等優(yōu)點(diǎn)。Ajax的核心是JavaScript對(duì)象XmlHttpRequest。另外,Ajax為SSH提供了一種高效的數(shù)據(jù)傳輸方式,其常用的數(shù)據(jù)組織方式有JSON(JavaScript Object Notation)。在Ajax的應(yīng)用中,通過JSON組織傳輸大塊數(shù)據(jù),優(yōu)勢(shì)明顯。
1.2.2 表單及時(shí)驗(yàn)證器
表單驗(yàn)證器是表單的一種驗(yàn)證方式,當(dāng)表單提交時(shí),通過它能提高接收數(shù)據(jù)的有效性,因此被廣泛地應(yīng)用于各種Web應(yīng)用程序中。表單驗(yàn)證結(jié)合Ajax技術(shù)能發(fā)揮出實(shí)時(shí)高效的驗(yàn)證功能。
1.2.3 任務(wù)動(dòng)態(tài)調(diào)度(Quartz)
Quartz是Web應(yīng)用開發(fā)中廣泛使用的任務(wù)調(diào)度解決方案,它提供的強(qiáng)大任務(wù)調(diào)度機(jī)制允許開發(fā)人員靈活地定義觸發(fā)器等調(diào)度事件表。另外,Quartz提供了可持久化的調(diào)度運(yùn)行環(huán)境機(jī)制,在需要時(shí)可以保存并恢復(fù)調(diào)度現(xiàn)場(chǎng)。
篇6
關(guān)鍵詞:輕量級(jí)Web應(yīng)用框架;Spring;控制反轉(zhuǎn)模式
1. 引言
J2EE框架標(biāo)準(zhǔn)將一個(gè)系統(tǒng)劃分為WEB和EJB兩個(gè)主要部分,從設(shè)計(jì)上可以抽象為表現(xiàn)層、業(yè)務(wù)層和持久層,實(shí)現(xiàn)了解耦的目的。因此,在實(shí)際編程中,大多數(shù)應(yīng)用從功能上根據(jù)這三個(gè)層次來劃分,但要這樣做,沒有技術(shù)上約束限制是比較困難的,因此一般借助J2EE具體技術(shù)來實(shí)現(xiàn),可以使用EJB規(guī)范實(shí)現(xiàn)服務(wù)層和持久層,Web技術(shù)來實(shí)現(xiàn)表現(xiàn)層。J2EE應(yīng)用雖然從總體上劃分了三個(gè)層次,但在針對(duì)每一層上的具體應(yīng)用,要設(shè)計(jì)出可維護(hù)性、高拓展性的軟件設(shè)計(jì)目標(biāo)還是有一定的難度。因此,類似Spring的輕量級(jí)框架應(yīng)運(yùn)而生,其目的是許多的應(yīng)用不需要分布式、不需要J2EE中那些重量級(jí)的技術(shù),譬如JNDI,有必要將大多數(shù)應(yīng)用中不必要的技術(shù)隔離、改造。輕量級(jí)框架的發(fā)展已經(jīng)成為推動(dòng)J2EE技術(shù)發(fā)展的重要推動(dòng)力,已經(jīng)成為一代J2EE技術(shù)構(gòu)架的基礎(chǔ),為此本文對(duì)一種新型輕量級(jí)Web應(yīng)用框架進(jìn)行相關(guān)研究。
2. Web應(yīng)用框架相關(guān)研究
2.1. 基本概念
框架是一種軟件重用技術(shù),是一個(gè)應(yīng)用軟件系統(tǒng)部分或整體可重用設(shè)計(jì),規(guī)定了其應(yīng)用體系結(jié)構(gòu),闡明了整個(gè)設(shè)計(jì)、協(xié)作構(gòu)件之間依賴關(guān)系,責(zé)任分配以及控制流程,具體表現(xiàn)為一組抽象類以及與它們的實(shí)例之間的協(xié)作方法。采用基于框架的開發(fā),開發(fā)者只需要做的是向事先架好的骨架中填入特定的代碼,可以使整個(gè)系統(tǒng)結(jié)構(gòu)的改善和流程的固定化,提高了整個(gè)系統(tǒng)的可重用性和易修改性。
J2EE是一種利用Java2平臺(tái)技術(shù)簡化企業(yè)解決方案的開發(fā)、部署以及管理一些復(fù)雜問題的結(jié)構(gòu)體系。J2EE定義了豐富的技術(shù)標(biāo)準(zhǔn),符合標(biāo)準(zhǔn)的開發(fā)工具和API為開發(fā)企業(yè)級(jí)應(yīng)用提供重要支持。J2EE與別的多層體系平臺(tái)比較,其核心技術(shù)及優(yōu)勢(shì)表現(xiàn)在:組件技術(shù)、Servlet和JSP、JDBCAPI、JNDI和EJB等方面。
2.2. 輕量級(jí)Web框架
輕量級(jí)框架主要是指在Java應(yīng)用程序開發(fā)環(huán)境中,簡化的編程模型和更具響應(yīng)能力的容器,旨在消除與傳統(tǒng)J2EEAPI有關(guān)的不必要的復(fù)雜性和限制,縮短應(yīng)用程序的部署時(shí)間,從而提高開發(fā)效率。比較流行或即將興起的輕量級(jí)Web框架主要有:Struts框架、Tapestry框架、JATO框架以及Spring框架。本文是基于Spring框架展開的,在此做詳細(xì)描述:Spring首先是一個(gè)開源項(xiàng)目,并且非常活躍;是一個(gè)基于反向控制(IoC)和面向方面編程(AOP)的多層J2EE系統(tǒng)框架,但它不強(qiáng)迫開發(fā)者必須在每一層中必須使用Spring,因?yàn)槠淠K化做的很好,允許開發(fā)者根據(jù)自己的需要選擇使用它的某一個(gè)模塊;Spring實(shí)現(xiàn)了很優(yōu)雅的MVC,對(duì)不同的數(shù)據(jù)訪問技術(shù)提供了統(tǒng)一的接口,它采用的IoC可以很容易的實(shí)現(xiàn)Bean的裝配,它提供了簡潔的AOP并據(jù)此實(shí)現(xiàn)事務(wù)管理等特性。
3. 新型輕量級(jí)Web應(yīng)用框架
根據(jù)Web應(yīng)用多層開發(fā)原則,把基于Spring框架的新型Web應(yīng)用分為視圖層、控制層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層,本節(jié)分別對(duì)這四層進(jìn)行分析研究,并分析了Acegi安全框架的工作原理和實(shí)現(xiàn)機(jī)制以及設(shè)計(jì)實(shí)現(xiàn)了一種可重用動(dòng)態(tài)數(shù)據(jù)管理構(gòu)件,最后給出了以Spring框架為核心,整合可重用動(dòng)態(tài)數(shù)據(jù)管理構(gòu)件和Acegi安全框架的輕量級(jí)Web應(yīng)用框架的總體結(jié)構(gòu)設(shè)計(jì)。
3.1. 層次分析
3.1.1. 視圖層
視圖層位于整個(gè)Web應(yīng)用層次結(jié)構(gòu)的最頂端,負(fù)責(zé)處理用戶交互,并從業(yè)務(wù)服務(wù)層獲取相關(guān)數(shù)據(jù)以顯示給用戶。現(xiàn)在主流的MVC設(shè)計(jì)模式思想,視圖層主要采用JSP實(shí)現(xiàn),進(jìn)行數(shù)據(jù)展現(xiàn)和處理,一般存在如下問題:無法像C/S那樣使用豐富的效果來展示數(shù)據(jù),不具有展觀性;Web應(yīng)用程序的執(zhí)行效率,產(chǎn)生了不必要的等待;客戶端通過提交窗體或者采用地址欄傳遞參數(shù)的形式發(fā)送參數(shù)時(shí),不管哪種形式,都將導(dǎo)致頁面被重新加載。
Ajax技術(shù)的出現(xiàn),很好的解決了上述問題。Ajax是一種位于客戶端的技術(shù),能將客戶端由原來的“啞”終端加強(qiáng)成智能化的“富客戶端”,它采用異步發(fā)送請(qǐng)求的方式代替采用窗體提交實(shí)現(xiàn)無刷新更新網(wǎng)頁,該技術(shù)的應(yīng)用大大降低了客戶端延遲,提高Web應(yīng)用程序執(zhí)行效率,解決了瀏覽器等待數(shù)據(jù)傳輸問題,改善了用戶體驗(yàn),使用戶可以快速得到Web服務(wù)器的數(shù)據(jù)。Ajax實(shí)質(zhì)上也是遵循Request/Server模式,所以這個(gè)框架基本的流程也是:對(duì)象初始化->發(fā)送請(qǐng)求->服務(wù)器接收->服務(wù)器返回->客戶端接收->修改客戶端頁面內(nèi)容。只不過這個(gè)過程是異步的。利用Ajax實(shí)現(xiàn)的MVC模型如圖1所示:
3.1.2. 業(yè)務(wù)邏輯層
業(yè)務(wù)邏輯層的職責(zé)是:處理應(yīng)用中的業(yè)務(wù)邏輯和業(yè)務(wù)有效性驗(yàn)證邏輯;管理事務(wù);管理業(yè)務(wù)對(duì)象之間的依賴關(guān)系;在持久層上構(gòu)造出業(yè)務(wù)邏輯的上下文,提供業(yè)務(wù)邏輯服務(wù);管理基于持久層的業(yè)務(wù)邏輯實(shí)現(xiàn)。一般的業(yè)務(wù)邏輯層設(shè)計(jì)方案只是為了適應(yīng)系統(tǒng)的四層架構(gòu)而建立的平鋪式的結(jié)構(gòu),存在著兩個(gè)缺點(diǎn):首先對(duì)于同一個(gè)主題對(duì)象來說,X1和X2對(duì)象模型應(yīng)該有一些共性;七次在理論上,XXService是業(yè)務(wù)邏輯,對(duì)整個(gè)系統(tǒng)來說是重要的戰(zhàn)略性決定,有著一定的必然性;而DAO是具體層次的實(shí)現(xiàn),帶有相當(dāng)大的偶然性選擇。當(dāng)使用上面的設(shè)計(jì)方法,直接生成具體對(duì)象就使得偶然決定了必然。這種依賴是不可忍受的,業(yè)務(wù)由具體的實(shí)現(xiàn)來決定,這違反了設(shè)計(jì)模式中的“開一閉”原則(OCP)。所謂的“開一閉”原則,即是指:“一個(gè)軟件實(shí)體應(yīng)當(dāng)對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉,也就是說,我們?cè)谠O(shè)計(jì)一個(gè)模塊的時(shí)候,應(yīng)當(dāng)使這個(gè)模塊可以在不被修改的前提下被擴(kuò)展。”相對(duì)于系統(tǒng)來說,業(yè)務(wù)層XXService的設(shè)計(jì)應(yīng)該是可擴(kuò)展的,即:當(dāng)添加一個(gè)編碼表的DAO實(shí)體時(shí)其代碼應(yīng)該保持不變。為實(shí)現(xiàn)XXService層的“開一閉”,必須進(jìn)行相應(yīng)的抽象,使得業(yè)務(wù)邏輯依賴于抽象層,如圖2所示。
3.1.3. 數(shù)據(jù)持久層
在企業(yè)級(jí)應(yīng)用開發(fā)中,持久層連接著數(shù)據(jù)資源層和業(yè)務(wù)邏輯層,起著承上啟下的作用。Spring框架本身而言,是一個(gè)很有特色的Web應(yīng)用框架,不僅如此它還提供了對(duì)持久層和視圖層的實(shí)現(xiàn)的封裝。對(duì)持久層來說,它為業(yè)務(wù)邏輯層提供數(shù)據(jù),所有對(duì)數(shù)據(jù)庫的操作都被屏蔽在持久層。Spring在持久層對(duì)JDBC進(jìn)行了良好的封裝,通過提供相應(yīng) 的模板和輔助類,在相當(dāng)程度上降低了JDBC操作的復(fù)雜性。并且得益于Spring良好的隔離設(shè)計(jì),JDBC封裝類庫可以脫離Spring Context獨(dú)立使用,也就是說,即使系統(tǒng)并沒有采用Spring作為結(jié)構(gòu)性框架,開發(fā)者也可以單獨(dú)使用Spring的JDBC部分(spring-dao.jar)來簡化訪問數(shù)據(jù)庫的工作。
3.2. 動(dòng)態(tài)數(shù)據(jù)管理構(gòu)件
本文動(dòng)態(tài)數(shù)據(jù)管理構(gòu)件的設(shè)計(jì)主要包括了兩個(gè)方面:數(shù)據(jù)字典和動(dòng)態(tài)數(shù)據(jù)對(duì)象。數(shù)據(jù)字典實(shí)現(xiàn)與數(shù)據(jù)庫中各表名以及對(duì)應(yīng)字段名的映射關(guān)系。數(shù)據(jù)字典記錄了數(shù)據(jù)庫中各表的結(jié)構(gòu)信息,它由存放表名的表和存放各表字段信息的表構(gòu)成。建立好數(shù)據(jù)字典后,也可以用它來創(chuàng)建一張物理表。本構(gòu)件采用的這種方式簡化了通過頁面的參數(shù)傳遞來取值的代碼,簡化了對(duì)數(shù)據(jù)庫的操作代碼,避免了大量SQL語句在代碼中的重復(fù)出現(xiàn),從而降低了開發(fā)人員的負(fù)擔(dān),減小了出錯(cuò)機(jī)會(huì)。動(dòng)態(tài)數(shù)據(jù)對(duì)象的應(yīng)用是建立在數(shù)據(jù)字典基礎(chǔ)之上的。
數(shù)據(jù)字典是動(dòng)態(tài)數(shù)據(jù)對(duì)象能夠使用的必要條件,是可重用動(dòng)態(tài)數(shù)據(jù)管理構(gòu)件的基礎(chǔ)。一般認(rèn)為,數(shù)據(jù)字典是以數(shù)據(jù)庫中數(shù)據(jù)基本單元為單位,按一定順序排列,對(duì)其內(nèi)容作詳細(xì)說明的數(shù)據(jù)集。本構(gòu)件的數(shù)據(jù)字典是對(duì)整個(gè)系統(tǒng)中所有數(shù)據(jù)庫表信息的集中管理。主要包括以下兩個(gè)部分:數(shù)據(jù)字典表管理;數(shù)據(jù)字典字段索引表管理。
實(shí)現(xiàn)了數(shù)據(jù)字典后,就能根據(jù)數(shù)據(jù)字典所存儲(chǔ)的信息封裝一個(gè)完整的動(dòng)態(tài)數(shù)據(jù)對(duì)象。一般地,動(dòng)態(tài)數(shù)據(jù)對(duì)象通過綁定一張數(shù)據(jù)庫表,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的操作。它可以將頁面?zhèn)魅氲闹涤幸?guī)律地存放在動(dòng)態(tài)數(shù)據(jù)對(duì)象中,從而方便將所需要的值一一對(duì)應(yīng)地注入到數(shù)據(jù)庫中。同樣地,也可以將數(shù)據(jù)庫中取出的信息有規(guī)律地封裝成動(dòng)態(tài)數(shù)據(jù)對(duì)象,從而方便將取出的值顯示到頁面上。數(shù)據(jù)對(duì)象的封裝,使得傳值的工作大大簡化,簡化了數(shù)據(jù)庫的操作。
3.3. Acegi安全框架
Spring框架本身沒有提供對(duì)系統(tǒng)的安全性支持。Acegi是一個(gè)能夠?yàn)榛赟pring的應(yīng)用系統(tǒng)提供描述性安全保護(hù)的安全框架。它提供了一組可以在Spring應(yīng)用上下文中配置的Bean,充分利用了Spring對(duì)IOC和AOP的支持。Acegi安全框架主要有4個(gè)主要組件來實(shí)施安全性。它們分別是:安全攔截器、認(rèn)證管理器、訪問決策管理器、運(yùn)行身份管理器,它們之間的關(guān)系如圖3所示。
在Acegi框架中支持多種安全信息的持久化方式,可以在配置文件中配置或存放在關(guān)系數(shù)據(jù)庫,由于在實(shí)際應(yīng)用中,需求是經(jīng)常發(fā)生變化的(例如在運(yùn)行期間用戶可能會(huì)提出動(dòng)態(tài)改變權(quán)限分配的需求)。所以,在配置文件中配置是滿足不了實(shí)際應(yīng)用需求的。
3.4. 新型架構(gòu)設(shè)計(jì)
本文提出的新型輕量級(jí)Web應(yīng)用框架從上到下依次為視圖層、控制器層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層,如圖4所示:
圖 4新型輕量級(jí)Web應(yīng)用框架
視圖層通過JSP結(jié)合Ajax技術(shù)實(shí)現(xiàn),能將客戶端由原來的“啞”終端加強(qiáng)成智能化的“富客戶端”,Ajax技術(shù)采用異步發(fā)送請(qǐng)求的方式實(shí)現(xiàn)無刷新更新網(wǎng)頁。控制層通過Spring提供的靈活的控制器來完成。業(yè)務(wù)邏輯層由Java Bean或者EJB組件構(gòu)成。數(shù)據(jù)持久層是使用JDBC實(shí)現(xiàn)的,JDBC是Java核心類庫的一部分,是一個(gè)面向?qū)ο蟮膽?yīng)用程序接口,通過它可訪問各類關(guān)系數(shù)據(jù)庫。
4. 結(jié)束語
本文利用Spring框架將可重用動(dòng)態(tài)數(shù)據(jù)管理構(gòu)件和Acegi安全框架整合進(jìn)來,結(jié)合Ajax技術(shù)構(gòu)成了一個(gè)輕量級(jí)Web應(yīng)用框架。在此輕量級(jí)應(yīng)用框架的基礎(chǔ)上,應(yīng)用系統(tǒng)分為視圖層、控制層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層。Spring IoC編程模式降低了多層開發(fā)中層次之間的耦合度,Spring AOP編程方式實(shí)現(xiàn)了事務(wù)處理,Acegi安全框架實(shí)現(xiàn)了系統(tǒng)安全控制,可重用動(dòng)態(tài)數(shù)據(jù)管理構(gòu)件簡化了操作數(shù)據(jù)庫的復(fù)雜性,避免了大量SQL語句在代碼中的重復(fù)出現(xiàn),這樣就使開發(fā)人員能夠投入更多精力關(guān)注具體業(yè),進(jìn)而提高開發(fā)效率。
篇7
關(guān)鍵詞: Struts; Spring; Hibernate; ORM; MVC
1 引言
目前Java在企業(yè)級(jí)開發(fā)中主要采用多層結(jié)構(gòu),這樣做的好處有:它增強(qiáng)了程序的健壯性,提高了代碼的重用率,也加快了程序開發(fā)的速度,縮短開發(fā)周期,同時(shí)還能便于開發(fā)人員對(duì)代碼的維護(hù),其中以三層結(jié)構(gòu)最為經(jīng)典。本文將理論聯(lián)系實(shí)際地介紹三層結(jié)構(gòu)的開發(fā)模式。
2 系統(tǒng)介紹
J2EE的三層結(jié)構(gòu)主要指三層體系結(jié)構(gòu),即用戶層、應(yīng)用層和數(shù)據(jù)庫服務(wù)器。用戶層主要指用戶界面,它要求盡可能的簡單,使最終用戶不需要進(jìn)行任何培訓(xùn)就能方便地訪問信息;第二層就是應(yīng)用服務(wù)器,也就是常說的中間件,所有的應(yīng)用系統(tǒng)、應(yīng)用邏輯、控制都在這一層,系統(tǒng)的復(fù)雜性也主要體現(xiàn)在應(yīng)用層;最后的數(shù)據(jù)庫服務(wù)器存儲(chǔ)大量的數(shù)據(jù)信息和數(shù)據(jù)邏輯,所有與數(shù)據(jù)有關(guān)的安全、完整性控制、數(shù)據(jù)的一致性、并發(fā)操作等都是在第三層完成。而輕量級(jí)架構(gòu)Struts+Spring+Hibernate可以實(shí)現(xiàn)J2EE多層結(jié)構(gòu),其中Struts用于表示層、控制層Spring用于業(yè)務(wù)處理層,而Hibernate則用于數(shù)據(jù)持久層。
2.1 J2EE多層架構(gòu)分析
2.1.1 Struts框架
Struts是一個(gè)基于Sun Java EE平臺(tái)的MVC框架,主要是采用Servlet和JSP技術(shù)來實(shí)現(xiàn)的。Struts框架可分為以下四個(gè)主要部分,其中三個(gè)就和MVC模式緊密相關(guān):
* 模型 (Model),本質(zhì)上來說在Struts中Model是一個(gè)Action類(這個(gè)會(huì)在后面詳細(xì)討論),開發(fā)者通過其實(shí)現(xiàn)商業(yè)邏輯,同時(shí)用戶請(qǐng)求通過控制器(Controller)向Action的轉(zhuǎn)發(fā)過程是基于由struts-config.xml文件描述的配置信息的;
* 視圖(View),View是由與控制器Servlet配合工作的一整套JSP定制標(biāo)簽庫構(gòu)成,利用她們我們可以快速建立應(yīng)用系統(tǒng)的界面;
* 控制器(Controller),本質(zhì)上是一個(gè)Servlet,將客戶端請(qǐng)求轉(zhuǎn)發(fā)到相應(yīng)的Action類
* 一堆用來做XML文件解析的工具包,Struts是用XML來描述如何自動(dòng)產(chǎn)生一些JavaBean的屬性的,此外Struts還利用XML來描述在國際化應(yīng)用中的用戶
提示信息的(這樣一來就實(shí)現(xiàn)了應(yīng)用系統(tǒng)的多語言支持)。
2.1.2 Spring框架
Spring是一個(gè)目前非常活躍的輕量級(jí)的開源的框架,它由Rod Johnson創(chuàng)建。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。簡單來說,Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。
* 輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個(gè)大小只有1MB多的JAR文件里。并且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對(duì)象不依賴于Spring的特定類。
* 控制反轉(zhuǎn)——Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,一個(gè)對(duì)象依賴的其它對(duì)象會(huì)通過被動(dòng)的方式傳遞進(jìn)來,而不是這個(gè)對(duì)象自己創(chuàng)建或者查找依賴對(duì)象。你可以認(rèn)為IoC與JNDI相反——不是對(duì)象從容器中查找依賴,而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將依賴傳遞給它。
* 面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識(shí))其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持。
2.2 J2EE輕量級(jí)架構(gòu)
2.2.1 J2EE輕量級(jí)架構(gòu)描述
J2EE的三層結(jié)構(gòu)在業(yè)界是指表示層(Presentation),業(yè)務(wù)邏輯層(Business logic)以及基礎(chǔ)架構(gòu)層(Infrastructure)。這樣的劃分當(dāng)然是經(jīng)典的,但是在實(shí)際項(xiàng)目中,往往會(huì)對(duì)三層體系結(jié)構(gòu)做一些擴(kuò)展來滿足項(xiàng)目的需要。一個(gè)最常用的擴(kuò)展就是將三層體系擴(kuò)展為五層體系,即表示層(Presentation)、控制/中介層(Controller/Mediator) 、領(lǐng)域?qū)?Domain)、 數(shù)據(jù)持久層(Data Persistence) 和數(shù)據(jù)源層(Data Source)。它其實(shí)是在三層架構(gòu)中增加了兩個(gè)中間層。控制/中介層位于表示層和領(lǐng)域?qū)又g,數(shù)據(jù)持久層位于領(lǐng)域?qū)雍突A(chǔ)架構(gòu)層之間。
2.2.2 View層
視圖層中主要采用 Struts技術(shù):
在前端 JSP頁面中使用 Struts提供的標(biāo)簽與 EL、JSTL結(jié)合來實(shí)現(xiàn)頁面數(shù)據(jù)邏輯的組織和顯示,如:Bean標(biāo)簽,HTML標(biāo)簽等;
將不同國家語言的字符串信息存儲(chǔ)到對(duì)應(yīng)的資源文件,并通過 Struts的 Bean標(biāo)簽提取到 JSP頁面中,從而使其能處理國際化的消息;在頁面中使用 Struts包含的 Tiles框架實(shí)現(xiàn)頁面布局的復(fù)用,便于系統(tǒng)的改版和維護(hù)。
3 結(jié)論
從軟件層次結(jié)構(gòu)的角度上講,軟件的框架要具有較高的伸縮性和可擴(kuò)展性。本文所討論的SSH組合框架架構(gòu),它的模塊化設(shè)計(jì)得到了很好的應(yīng)用,層次非常清晰,具有很好的可復(fù)用性。持久層中,Hibernate的應(yīng)用使得研發(fā)人員的工作大大降低,但同時(shí)它也存在著一些不足之處,如Hibernate直接生成SQL語句雖然方便快速開發(fā),但同時(shí)失去了靈活性,使其應(yīng)用在一些復(fù)雜的SQL應(yīng)用中比較麻煩。
Struts,Spring,Hibernate三者結(jié)合,發(fā)揮各自的優(yōu)點(diǎn),使得基于輕量級(jí)J2EE架構(gòu)開發(fā)簡潔、結(jié)構(gòu)清晰、開發(fā)周期短、有較高的可擴(kuò)展性和可維護(hù)性,適用于面向?qū)ο蟮脑O(shè)計(jì)與開發(fā)。
篇8
論文摘要:本文通過介紹框架技術(shù)特點(diǎn),提出了基于五層Web應(yīng)用的框架整合結(jié)構(gòu)。并在此結(jié)構(gòu)上實(shí)現(xiàn)了城市公共信息服務(wù)平臺(tái)的應(yīng)用,為類似的電子政務(wù)應(yīng)用提供了參考。
隨著網(wǎng)絡(luò)技術(shù)、信息技術(shù)的發(fā)展,各類信息充斥我們生活、工作及學(xué)習(xí)周圍,但這些信息之間重復(fù)嚴(yán)重,數(shù)據(jù)準(zhǔn)確度不高,社會(huì)公眾很難準(zhǔn)確獲取與個(gè)人生活、工作、學(xué)習(xí)密切相關(guān)的本地?cái)?shù)據(jù)和信息,進(jìn)而影響人們的網(wǎng)絡(luò)生活,因而各類專業(yè)的本地信息服務(wù)已成為當(dāng)前互聯(lián)網(wǎng)應(yīng)用的一種趨勢(shì)。由政府牽頭整合政府、市場(chǎng)、企業(yè)等多方面資源,共同構(gòu)建一個(gè)統(tǒng)一、開放、跨平臺(tái)、系統(tǒng)結(jié)構(gòu)層次清晰的城市公共信息服務(wù)平臺(tái),并以靈活多樣的形式為本地公眾提供準(zhǔn)確、權(quán)威的信息服務(wù)已經(jīng)成為當(dāng)?shù)鼗ヂ?lián)網(wǎng)應(yīng)用的一種重要需求。
基于J2EE技術(shù)標(biāo)準(zhǔn)體系的框架技術(shù)能夠快速、有效地支持大中型Web應(yīng)用項(xiàng)目的開發(fā),但是在大中型Web應(yīng)用中,可能存在幾個(gè)層次,需要使用幾個(gè)不同的框架。那么如何整合各層框架以讓每個(gè)層在一種松耦合的方式互相協(xié)作,這是一個(gè)在軟件工程領(lǐng)域?qū)嵺`性很強(qiáng)的課題。本文介紹了一個(gè)以Spring框架為核心,結(jié)合Struts、Hibernate框架的一種快速有效構(gòu)建Web應(yīng)用的框架整合策略,并在此整合策略基礎(chǔ)上闡述了城市公共信息服務(wù)平臺(tái)應(yīng)用的設(shè)計(jì)思想和實(shí)現(xiàn)技術(shù)。
1J2EE框架技術(shù)特點(diǎn)
目前隨著軟件開發(fā)技術(shù)的發(fā)展,可重用、易擴(kuò)展,而且是經(jīng)過良好測(cè)試的軟件組件,越來越為人們所青睞。這意味著人們可有充裕的時(shí)間用來分析、構(gòu)建業(yè)務(wù)邏輯,而不是繁雜的代碼工程。于是人們將相同類型問題的解決途徑進(jìn)行抽象,抽取成一個(gè)應(yīng)用框架。
1.1Spring框架
Spirng框架是一個(gè)以控制反轉(zhuǎn)(IOC)模式和面向方面編程(AOP)思想為核心的輕量級(jí)框架,主要用于對(duì)中間層業(yè)務(wù)組件的管理。常用的中間件解決方案EJB是一種重量級(jí)的容器,主要有以下缺點(diǎn):必須實(shí)現(xiàn)EJB的接口,對(duì)業(yè)務(wù)邏輯組件侵人性很大;應(yīng)用依賴于EJB容器,不能單獨(dú)運(yùn)行,另外啟動(dòng)時(shí)間長,測(cè)試復(fù)雜、配置很困難。
首先,Spring是一種輕量級(jí)的框架,是基于組件化、模塊化的結(jié)構(gòu)。它有分層的體系結(jié)構(gòu),因而針對(duì)Spirng開發(fā)的組件不需要任何外部庫,也可以選擇某個(gè)模塊獨(dú)立使用,從而避免了EJB復(fù)雜、啟動(dòng)時(shí)間長的缺點(diǎn)。
其次,Spring也是一個(gè)IOC容器。IOC模式是Spring的核心,它的本質(zhì)是由容器控制業(yè)務(wù)對(duì)象的協(xié)作關(guān)系,而非傳統(tǒng)的用程序編碼在業(yè)務(wù)對(duì)象直接控制,控制權(quán)由程序代碼轉(zhuǎn)移到外部容器。通過IOC模式可以很容易地管理和替換業(yè)務(wù)對(duì)象。
另外,Spring又是比較全面的框架,它并沒有象EJB一樣從底層開始全面實(shí)現(xiàn)J2EE的功能模塊。Spring提供了大多數(shù)的層次功能模塊,但它并不是從頭開始實(shí)現(xiàn)的,它通過對(duì)其它框架技術(shù)的支持來實(shí)現(xiàn)各層功能。它包括SpringCore核心層、MVC模塊、SpringDAO、SpringORM、上下文控制、WEB表示層、面向方面編程7個(gè)功能模塊。
1.2Hibernate框架
Hibernate是一種專業(yè)的對(duì)象關(guān)系映射(O/R)工具,通過Hibernate的O/R映射,可以以對(duì)象化的方式處理數(shù)據(jù)庫表中的記錄。Hibernate通過Properties文件建立數(shù)據(jù)庫連接,通過映射文件(.hbm.xm1)將數(shù)據(jù)庫表映射為Java類,表中的每條記錄對(duì)應(yīng)為類的實(shí)例,而數(shù)據(jù)列值映射為實(shí)例的屬性。Hiber—nate將這些實(shí)例以持久對(duì)象(Persistentobject)形式向中間業(yè)務(wù)層提供服務(wù)。
1.3Struts框架
Sturts框架很好地實(shí)現(xiàn)了MVC設(shè)計(jì)模式的概念。它通過ActionServlet對(duì)象實(shí)現(xiàn)集中控制,并利用Struts—conifg.xml文件,很好地實(shí)現(xiàn)了視圖、控制、模型層次之間的分離,使得頁面設(shè)計(jì)與改變真正做到與代碼無關(guān)。
2整合框架的Web應(yīng)用架構(gòu)
如果以上述任何一個(gè)框架技術(shù)來實(shí)現(xiàn)大中型的Web應(yīng)用,會(huì)存在效率不高,解決問題不徹底等問題,通過以輕量級(jí)框架Spring為核心,充分利用Spring框架的開放性、模塊化以及對(duì)業(yè)務(wù)對(duì)象、事務(wù)管理等強(qiáng)大的功能,整合Sturts、Hibernate框架,可以構(gòu)造出五層Web應(yīng)用架構(gòu),分別為:客戶層、Web層、業(yè)務(wù)層、持久層、企業(yè)資源層5個(gè)層次。整合框架的Web應(yīng)用架構(gòu)如圖1所示:
在客戶層,通過JSP頁面實(shí)現(xiàn)交互,負(fù)責(zé)傳送請(qǐng)求(Request)和接受響應(yīng)(Response)。在Web層,Sturts根據(jù)ActionServlet接受到的請(qǐng)求,委派相應(yīng)的Action。Action對(duì)象中的execute方法調(diào)用模型中的業(yè)務(wù)組件,決定“做什么”。在業(yè)務(wù)層,管理業(yè)務(wù)組件的SpringIOC容器負(fù)責(zé)向Action提供業(yè)務(wù)模型(Mode1)組件,決定“怎么做”和該組件的協(xié)作對(duì)象數(shù)據(jù)處理(DAO)組件完成業(yè)務(wù)邏輯,并提供事務(wù)處理、緩沖池等容器組件提升系統(tǒng)性能和保證數(shù)據(jù)完整性。業(yè)務(wù)層通過DAO數(shù)據(jù)訪問對(duì)象,向持久層請(qǐng)求數(shù)據(jù)處理。在持久層,依賴于Hibernate的對(duì)象關(guān)系映射和對(duì)象化的查詢語言操作,通過Hibernate的會(huì)話,處理DAO組件請(qǐng)求的數(shù)據(jù),并返回處理結(jié)果。
對(duì)照基于EJB的一般WEB應(yīng)用結(jié)構(gòu),整合框架的Web應(yīng)用架構(gòu)中通過Spring提供的輕量級(jí)業(yè)務(wù)組件的管理和IOC容器,實(shí)現(xiàn)了對(duì)EJB技術(shù)的替代和更好的組件重用性,使業(yè)務(wù)組件間的協(xié)作更加松耦合。同時(shí)利用Spirng的開放性、模塊化以及對(duì)Hibernate良好支持的特點(diǎn),通過引入專門的O/R映射框架Hibernate實(shí)現(xiàn)了對(duì)關(guān)系數(shù)據(jù)庫的對(duì)象化,隱藏了數(shù)據(jù)庫的底層細(xì)節(jié),便于開發(fā)者以統(tǒng)一的面向?qū)ο笏枷雭黹_發(fā)應(yīng)用。另外通過Sturts的MVC模式,開發(fā)清晰明確的業(yè)務(wù)流程和用戶交互,實(shí)現(xiàn)表現(xiàn)邏輯和業(yè)務(wù)邏輯的解耦,擺脫了原有的開發(fā)模式帶來的高耦合性。通過框架的整合不僅集成了各種框架的優(yōu)勢(shì),同時(shí)也構(gòu)造了層次清晰,結(jié)構(gòu)合理的5層Web應(yīng)用架構(gòu)。
3應(yīng)用實(shí)例
3.1項(xiàng)目概述
“寧波市城市公共信息服務(wù)平臺(tái)”是由寧波市信息產(chǎn)業(yè)局牽頭,以政府投資形式建設(shè)的一個(gè)公益性地信息服務(wù)平臺(tái)。平臺(tái)整合本地各類專業(yè)的信息服務(wù)企業(yè)和機(jī)構(gòu)的信息資源,以合作的方式共同打一個(gè)寧波市本地的信息資源集聚中心和本地的信息門戶,進(jìn)而既增值開發(fā)利用了政府信息資源,也提了信息服務(wù)業(yè)的核心競(jìng)爭能力,同時(shí)也為社會(huì)公眾提供了一個(gè)權(quán)威的、統(tǒng)一的信息渠道,達(dá)到了政府、業(yè)、公眾共贏的局面。
本平臺(tái)整合了與社會(huì)公眾有關(guān)的衣、食、住、行等政府、企業(yè)信息。信息分基本信息和市場(chǎng)商業(yè)信息兩類。對(duì)于基本信息,平臺(tái)的管理員及加盟企業(yè)所有成員都能進(jìn)行信息的維護(hù)和更新,并有專門的信息員進(jìn)行審核和管理,保持平臺(tái)基本信息的準(zhǔn)確與及時(shí)性。對(duì)于商業(yè)信息,基本上由者負(fù)責(zé)為原則,平臺(tái)提供一種免費(fèi)的平臺(tái),同時(shí)對(duì)這些的信息給予地圖定位以及與其它頻道信息等關(guān)聯(lián)的增值服務(wù),進(jìn)一步提升第三方網(wǎng)站的信息價(jià)值。根據(jù)本平臺(tái)的用戶角色區(qū)分,主要有:前端普通用戶和后臺(tái)管理用戶。后臺(tái)管理用戶有4種,分別是系統(tǒng)管理員、頻道運(yùn)作單位、加盟企業(yè)、信息員,主要負(fù)責(zé)對(duì)信息的采集與。前端用戶是指一般的網(wǎng)站瀏覽用戶,前端普通用戶可以按分類信息查詢,也可以按搜索引擎方式查詢,在查到文本信息的同時(shí)給出對(duì)應(yīng)的GIS信息,進(jìn)而可以獲得行車路線等有關(guān)地圖位置信息。另外,如用戶根據(jù)本平臺(tái)查到的信息,想進(jìn)一步進(jìn)行電子商務(wù)操作,如網(wǎng)上購物、電子訂票等,本平臺(tái)可以負(fù)責(zé)直接轉(zhuǎn)向,起了一個(gè)信息門戶的作用。
3.3主要實(shí)現(xiàn)技術(shù)
本平臺(tái)采用Tomcat5.0作為Web服務(wù)器,Struts框架為1.2版本,Spring框架為1.2.5版,Hiber—nate框架為3.0版,根據(jù)上述整合框架的Web應(yīng)用架構(gòu)來實(shí)現(xiàn)平臺(tái)的結(jié)構(gòu)。
3.3.1視圖層頁面設(shè)計(jì):根據(jù)前端用戶靈活的信息瀏覽需求,同時(shí)又要適應(yīng)頻道運(yùn)作單位自己管理頻道模塊的需求,因此,頁面設(shè)計(jì)改動(dòng)不能影響到其它業(yè)務(wù)邏輯。在實(shí)現(xiàn)中通過Sturts的自定義標(biāo)簽,結(jié)合MVC模式,實(shí)現(xiàn)頁面與業(yè)務(wù)邏輯分離,做到JSP頁面不包含Java代碼。另外,利用JSP技術(shù)在顯示頁面嵌入地圖內(nèi)容,實(shí)現(xiàn)圖文并茂的顯示方式。
3.3.2Web層請(qǐng)求響應(yīng)控制:通過struts—conifg.xml配置文件把后臺(tái)用戶管理頁面或前臺(tái)用戶瀏覽頁面都對(duì)應(yīng)到每個(gè)Action,當(dāng)頁面發(fā)出請(qǐng)求后,根據(jù)struts—config.xml的配置文件中對(duì)應(yīng)的Action部署,由Action對(duì)象調(diào)用本平臺(tái)內(nèi)的業(yè)務(wù)層組件。如果此時(shí)請(qǐng)求的是地圖信息那么Action對(duì)象中以AP/方式向市規(guī)劃局的GIS平俞調(diào)用地圖位置信息,并把結(jié)果返回給客戶端。如果此時(shí)請(qǐng)求是進(jìn)一步需要第方電子商務(wù)服務(wù),那么直接重定向到第方電子商務(wù)服務(wù)網(wǎng)站。
3.3.3業(yè)務(wù)對(duì)象的IOC方式管理:Web層的Action只是決定“做什么”,并沒有實(shí)現(xiàn)“怎么做”,具體的業(yè)務(wù)邏輯由業(yè)務(wù)層的業(yè)務(wù)組件來完成。平龠中包括信息查詢、會(huì)員注冊(cè)、積分管理等功能模塊都需要有一個(gè)業(yè)務(wù)組件來實(shí)現(xiàn)該功能。在項(xiàng)目實(shí)現(xiàn)中,把每一個(gè)業(yè)務(wù)組件包按接口類和實(shí)現(xiàn)類分開編碼,當(dāng)需要互相協(xié)作時(shí),在代碼層只要直接引用協(xié)作對(duì)象的接口類就可以了。協(xié)作對(duì)象的實(shí)現(xiàn)類統(tǒng)一南Spring容器根據(jù)配置文件的說明進(jìn)行注入。如:在本項(xiàng)目中,普通會(huì)員信息的業(yè)務(wù)需要信息員審核,審核通過后要把該信息的狀態(tài)記錄到某個(gè)頻道運(yùn)作單位下。那就可以分為i個(gè)服務(wù)組件:信息組件、信息審核組件、信息狀態(tài)記錄組件,在Spring的IOC機(jī)制下,利用配置文件和基于接口與實(shí)現(xiàn)分離的編碼方式可以很好地實(shí)現(xiàn)這個(gè)組件之間的松耦合協(xié)作,減輕了應(yīng)用對(duì)容器的依賴。
3.3.4利用Spring框架實(shí)現(xiàn)事務(wù)管理及與持久層會(huì)話:在本項(xiàng)目中對(duì)于會(huì)員注冊(cè),積分管理等操作需要進(jìn)行事務(wù)管理,同時(shí)所有的操作數(shù)據(jù)保存需要與持久層進(jìn)行連接,這些都可利用Spring框架本身的功能來實(shí)現(xiàn)。如:通過Spring配置文件可以直接實(shí)現(xiàn)數(shù)據(jù)源、會(huì)話工廠、事務(wù)管理和數(shù)據(jù)訪問對(duì)象的配置,數(shù)據(jù)訪問對(duì)象根據(jù)上述Spring配置可以直接和持久層連接.這樣在實(shí)現(xiàn)有中不用考慮這些功能的具體實(shí)現(xiàn)。Hibernate通過轉(zhuǎn)換工具把各類信息保存表轉(zhuǎn)換成相應(yīng)的對(duì)象文件和.xml映射文件,Spring中的數(shù)據(jù)訪問對(duì)象,直接對(duì)對(duì)象文件進(jìn)行操作,由Hibernate完成數(shù)據(jù)的持久化。
篇9
關(guān)鍵詞:企業(yè)級(jí)Web應(yīng)用;開源;框架;J2EE
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)16-21252-03
The Research of the Construction of Enterprise Web Application System Based on Integration of Open Source Frameworks
HE Han-hui1, DING Yong2
(1.Zhejiang Medical College,Hangzhou 310053,China;2.Dept of information technology,Zhejiang Institute of Economic & Technology,Hangzhou 310018,China)
Abstract:This thesis did research on how to combine three open source frameworks (Struts framework based on MVC model, Spring framework based on IoC model and Hibernate framework based on ORM model), which are widely used currently, to construct Enterprise Web Application. It provides a lightweight solution of J2EE for Enterprise Web Application. In the end of the thesis, a project is implemented by the application of the integration of open source frameworks.
Key words:Enterprise Web Application;Open Source;Frameworks;J2EE
1 引言
MVC(Model View Controller的縮寫)是一種常用的設(shè)計(jì)模式,它有效地減弱了業(yè)務(wù)邏輯接口和數(shù)據(jù)接口之間的耦合,提高了軟件的可擴(kuò)展性、可維護(hù)性。Struts+Spring+Hibernate開源組合框架為開發(fā)基于J2EE的企業(yè)級(jí)Web應(yīng)用提供了一種輕量級(jí)解決方案。它不僅實(shí)現(xiàn)了視圖、控制器與模型的徹底分離,而且還實(shí)現(xiàn)了業(yè)務(wù)邏輯層與持久層的分離。而且由于不同層之間耦合度小,有利于團(tuán)隊(duì)成員并行工作,大大提高了開發(fā)效率。本文通過我們?yōu)檎憬贾菽持b公司開發(fā)的一個(gè)較為大型的進(jìn)銷存系統(tǒng)展示了如何進(jìn)行基于SSH框架的Web應(yīng)用開發(fā)。
2 MVC設(shè)計(jì)模式
MVC即Model-View-Controller的縮寫,MVC設(shè)計(jì)模式將應(yīng)用程序進(jìn)行了分層,視圖和模型通過控制器連接,從而減少了用戶界面和業(yè)務(wù)邏輯之間的耦合,使程序設(shè)計(jì)更加清晰、靈活,也提高了軟件的可擴(kuò)展性、可維護(hù)性。MVC的工作原理,如圖1所示。
圖1 MVC模型
2.1 視圖(View)
視圖提供了用戶界面,是用戶和應(yīng)用程序的交互的窗口,既接受用戶輸入,也把模型數(shù)據(jù)狀態(tài)顯示給用戶,但是視圖不負(fù)責(zé)任何業(yè)務(wù)邏輯處理,僅僅是將用戶輸入數(shù)據(jù)傳遞給控制器或?qū)⒛P蛿?shù)據(jù)顯示給用戶。
2.2 控制器(Controller)
控制器連接了模型和視圖,根據(jù)用戶請(qǐng)求判斷將請(qǐng)求交給哪個(gè)模型來完成,然后調(diào)用視圖來顯示模型處理后的用戶請(qǐng)求結(jié)果。
2.3 模型(Model)
模型封裝了用戶數(shù)據(jù)和處理數(shù)據(jù)的業(yè)務(wù)邏輯,體現(xiàn)了應(yīng)用程序的當(dāng)前狀態(tài),而且可以將用戶數(shù)據(jù)狀態(tài)的變化提供給多個(gè)顯示該數(shù)據(jù)的視圖共用。模型是應(yīng)用程序的核心。
3 開源框架
3.1 Struts開源框架
Struts框架主要分為模型(Model)、視圖(Viewer)和控制器(Controller)三部分,其主要的設(shè)計(jì)理念是通過控制器實(shí)現(xiàn)表現(xiàn)邏輯和業(yè)務(wù)邏輯松耦合,從而提高系統(tǒng)的可重用性、可擴(kuò)展性和可維護(hù)性。
3.1.1 Struts中的視圖(View)
Struts構(gòu)架主要采用了JSP作為視圖的實(shí)現(xiàn)。Struts自身包含了一組標(biāo)記庫(TagLib),這也是Struts的精華之一,靈活運(yùn)用它們可以簡化JSP頁面的代碼,提高開發(fā)效率。而且引入了ActionForm組件(實(shí)質(zhì)為JavaBean)作為用戶表單的封裝來完成數(shù)據(jù)的傳輸。
3.1.2 Struts中的控制器(Controller)
Struts框架中采用了ActionServlet和Action類以及Struts-config.XML配置文件作為控制器的實(shí)現(xiàn)。當(dāng)用戶提出請(qǐng)求,ActionServlet類最先對(duì)請(qǐng)求進(jìn)行處理,它將根據(jù)Struts-config.xml配置文件將用戶請(qǐng)求映射到具體的Action類;而當(dāng)Action類調(diào)用模型組件處理好用戶請(qǐng)求,并返回了處理結(jié)果后,仍然由ActionServlet類根據(jù)Struts-config.xml配置文件將結(jié)果轉(zhuǎn)發(fā)到視圖提供給用戶,或者轉(zhuǎn)發(fā)另外一個(gè)Action做進(jìn)一步處理。
3.1.3 Struts中的模型(Model)
模型以一個(gè)或多個(gè)Java bean的形式存在。Struts沒有定義具體Model層的實(shí)現(xiàn),Model層通常是和業(yè)務(wù)邏輯緊密相關(guān)的,有持久化的要求。Struts框架實(shí)現(xiàn)了MVC設(shè)計(jì)模式,但是它是典型的表現(xiàn)層框架,對(duì)模型的實(shí)現(xiàn)是不足的,所以有必要引入其他架構(gòu)加強(qiáng)對(duì)模型的實(shí)現(xiàn)。這也就是說開發(fā)人員有更多自由來選擇合適量級(jí)的持久化技術(shù),比如Hibernate、EJB等等。
3.2 Spring開源框架
Spring是一個(gè)解決了許多J2EE開發(fā)中常見問題并能夠替代EJB技術(shù)的強(qiáng)大的輕量級(jí)框架。Spring框架的核心是控制翻轉(zhuǎn)IoC(Inversion of Control)/依賴注入DI(Dependence Injection)機(jī)制。IoC是指由容器中控制組件之間的關(guān)系而非傳統(tǒng)實(shí)現(xiàn)中由程序代碼直接操控,這種將控制權(quán)由程序代碼到外部容器的轉(zhuǎn)移,稱為“翻轉(zhuǎn)”。DI是對(duì)IoC更形象的解釋,即由容器在運(yùn)行期間動(dòng)態(tài)地將依賴關(guān)系注入到組件之中。Spring采用設(shè)值注入和構(gòu)造子注入的機(jī)制,通過配置文件管理組建的協(xié)作對(duì)象,創(chuàng)建可以構(gòu)造組件的IoC容器。Spring框架的結(jié)構(gòu)如圖2所示。
Spring框架可以成為企業(yè)級(jí)應(yīng)用程序一站式的解決方案,同時(shí)它也是模塊化的框架,允許開發(fā)人員自由地挑選適合自己應(yīng)用的模塊進(jìn)行開發(fā)。Spring框架式是一個(gè)松耦合的框架,框架的部分耦合度被設(shè)計(jì)為最小,在各個(gè)層次上具體選用哪個(gè)框架取決于開發(fā)者的需要。
3.3 數(shù)據(jù)持久層框架Hibernate
O/R mapping技術(shù)是為了解決關(guān)系型數(shù)據(jù)庫和面向?qū)ο蟮某绦蛟O(shè)計(jì)之間不匹配的矛盾而產(chǎn)生的。Hibernate是目前最為流行的O/R mapping框架,它在關(guān)系型數(shù)據(jù)庫和Java對(duì)象之間做了一個(gè)自動(dòng)映射,使得程序員可以以非常簡單的方式實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的操作。Hibernate工作原理如圖3所示。
圖2Spring 框架的結(jié)構(gòu) 圖3Hibernate工作原理
Hibernate通過對(duì)JDBC的封裝,向程序員屏蔽了底層的數(shù)據(jù)庫操作,使程序員專注于OO程序的開發(fā),有助于提高開發(fā)效率。程序員訪問數(shù)據(jù)庫所需要做的就是為持久化對(duì)象編制xml映射文件。
底層數(shù)據(jù)庫的改變只需要簡單地更改初始化配置文件(hibernate.cfg.xml或者h(yuǎn)ibernate.properties)即可,不會(huì)對(duì)應(yīng)用程序產(chǎn)生影響。
Hibernate有自己的面向?qū)ο蟮牟樵冋Z言HQL,HQL功能強(qiáng)大,支持目前大部分主流的數(shù)據(jù)庫,如Oracle、DB2、MySQL、Microsoft SQL Server等,是目前應(yīng)用最廣泛的O/R映射工具。Hibernate為快速開發(fā)應(yīng)用程序提供了底層的支持。
4 基于SSH組合框架的Web應(yīng)用開發(fā)實(shí)例
下面將通過我們?yōu)檎憬贾菽持b公司所開發(fā)的一個(gè)大型的進(jìn)銷存系統(tǒng)來展示如何進(jìn)行基于SSH框架的Web應(yīng)用開發(fā)。由于本系統(tǒng)功能模塊較多、業(yè)務(wù)邏輯復(fù)雜,限于篇幅原因,下面我們將以“渠道管理模塊”為例來概要地說明系統(tǒng)的開發(fā)與實(shí)現(xiàn)過程。
4.1 數(shù)據(jù)持久層的實(shí)現(xiàn)
本系統(tǒng)的數(shù)據(jù)持久層由Hibernate實(shí)現(xiàn)。Hibernate通過映射(Mapping)文件將對(duì)象(Object)與關(guān)系型數(shù)據(jù)(Relational)相關(guān)聯(lián)。有了Java持久化類后就可以在此基礎(chǔ)上實(shí)現(xiàn)數(shù)據(jù)訪問類。在Spring框架中,數(shù)據(jù)訪問類可以從輔助類HibernateDaoSupport繼承,這極大地方便了Hibernate框架在Spring中的使用,相應(yīng)的部分代碼如下:
public class ChannelDAO extends HibernateDaoSupport {
private static final Log log = LogFactory.getLog(ChannelinfoDAO.class);
// property constants
……
public void save(Channelinfo transientInstance) {
log.debug("saving Channelinfo instance");
try {
getHibernateTemplate().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
} }
……
}
4.2 業(yè)務(wù)邏輯層的實(shí)現(xiàn)
業(yè)務(wù)邏輯層由Spring框架支持。由于數(shù)據(jù)持久層實(shí)現(xiàn)了Java持久化類并且封裝了數(shù)據(jù)訪問對(duì)象(DAO),因此可以在Model組件中方便地調(diào)用DAO組件來存取數(shù)據(jù)。Spring的IoC容器負(fù)責(zé)統(tǒng)一管理Model組件和DAO組件以及Spring所提供的事務(wù)處理、緩沖連接池等服務(wù)組件。
在用戶管理模塊中,通過業(yè)務(wù)建模創(chuàng)建了用戶模型ChannelService類,封裝了對(duì)用戶的權(quán)限管理以及積分管理等功能。ChannelService類通過調(diào)用數(shù)據(jù)訪問類ChannelDao實(shí)現(xiàn)對(duì)用戶數(shù)據(jù)的操作。這些組件的關(guān)系將通過配置Spring框架的applicationContext.xml聯(lián)系起來,配置文件的主要內(nèi)容如下:
<!-- ===創(chuàng)建業(yè)務(wù)模型組件ChannelService,并調(diào)用ChannelDao組件作為協(xié)作對(duì)象=== -->
< bean id= "ChannelService" class= "com.ebcss.hibernate.ChannelService">
<property name= "ChannelDao"> ref local= "ChannelDao"/> </property >
<bean>
<!--===創(chuàng)建數(shù)據(jù)訪問組件ChannelDao,并調(diào)用Hibernate的Session工廠作為協(xié)作對(duì)象===-->
< bean id= " ChannelDao " class= " com.ebcss.hibernate.dao.ChannelDao ">
<property name= " SessionFactory "> ref local= " SessionFactory "/> </property >
<bean>
4.3 表示層的實(shí)現(xiàn)
表示層結(jié)合JSP和Struts的TagLib庫處理顯示功能,利用ActionServlet將請(qǐng)求(*.do)映射到相應(yīng)的Action,并由Action調(diào)用業(yè)務(wù)邏輯的服務(wù)組件,然后根據(jù)處理結(jié)果跳轉(zhuǎn)到Forward對(duì)象指定的響應(yīng)頁面。
業(yè)務(wù)流程的部署由struts-config.xml完成。下面以一個(gè)顯示所有渠道信息的請(qǐng)求(ListChannel.do)為例來說明配置文件的使用。
<!- 請(qǐng)求調(diào)用ListChannelAction,并根據(jù)返回的Forward對(duì)象的狀態(tài)來轉(zhuǎn)到相應(yīng)的頁面-->
<struts-config>
<form-beans> <form-bean name="channelForm" type="com.ebcss.struts.form.ChannelForm"/>
</form-beans>
<action-mappings>
<action path = "/ListChannel.do"
type= " com.ebcss.hibernate.action.ListChannelAction "
name= "channelForm"
scope = "request"
validate = "true"
input= "/index.jsp"
>
<forward name="Success" path="/successListChannel.jsp" />
<forward name="Failure" path="/error.jsp" />
</action>
</action-mappings>
<message-resources parameter="com.ebcss.struts.applicationResources"/>
</struts-config>
一個(gè)好的架構(gòu)可以避免重復(fù)設(shè)計(jì),減少開發(fā)風(fēng)險(xiǎn),增強(qiáng)軟件的可擴(kuò)展性、可維護(hù)性及可移植性,提高軟件質(zhì)量和性能效率。本文通過整合Struts+Spring+Hibernate開源框架,提出了一種利用輕量級(jí)開源框架來快速搭建Web應(yīng)用的解決方案,并且通過其在實(shí)際項(xiàng)目中的應(yīng)用,證明了采用此方案可以幫助開發(fā)人員在短時(shí)間內(nèi)建立結(jié)構(gòu)清晰、可重用性好、維護(hù)擴(kuò)展方便的Web應(yīng)用程序。
參考文獻(xiàn):
[1] JOHNSON R,HOELLER J,ARENDSEN A,et al.Java/J2EE application framework reference document V1.1[M].2004.
[2] CRAIG WALLS,RYAN BREIDENBACH.Spring in Action[M].2005.
[3] Matt Raibler.Spring Live[S].SourceBeat,LLC,2004.
[4] 夏昕,曹曉鋼,唐勇.深入淺出Hibernate[M].北京:電子工業(yè)出版社,2005.
篇10
Struts2框架實(shí)現(xiàn)MVC(Model,View,Controller)模式[10],MVC模式能夠提高程序組件的重用性和清晰程序結(jié)構(gòu)。Spring框架通過IoC(控制反轉(zhuǎn))和AOP(面向方面編程)兩種技術(shù),來實(shí)現(xiàn)對(duì)程序中的對(duì)象關(guān)系、事務(wù)、權(quán)限和日志的統(tǒng)一管理。Hibernate框架完成系統(tǒng)數(shù)據(jù)持久化的工作,通過Hibernate可以提高民政服務(wù)信息系統(tǒng)對(duì)底層數(shù)據(jù)庫兼容性,能在不修改后臺(tái)代碼的情況下實(shí)現(xiàn)數(shù)據(jù)庫系統(tǒng)的更換。
2系統(tǒng)設(shè)計(jì)
2.1系統(tǒng)總體設(shè)計(jì)民政服務(wù)信息系統(tǒng)包括三個(gè)子系統(tǒng),分別是民政內(nèi)部辦公系統(tǒng)、社會(huì)服務(wù)平臺(tái)和社會(huì)家園網(wǎng)。三個(gè)子系統(tǒng)協(xié)作示意圖如圖1所示。圖1中實(shí)線表示業(yè)務(wù)申報(bào),虛線表示審核結(jié)果回復(fù),數(shù)字表示民政業(yè)務(wù)類型(1表示社區(qū)申報(bào)的業(yè)務(wù),2表示社區(qū)家園網(wǎng)直接申報(bào)的業(yè)務(wù),3表示通過社區(qū)家園網(wǎng)向社區(qū)申報(bào)并且最終由社區(qū)提交到民政局的業(yè)務(wù))。智慧社區(qū)服務(wù)平臺(tái)是由社區(qū)的辦公人員使用,主要完成社區(qū)基本情況登記與查詢,民政業(yè)務(wù)上傳與下達(dá)。民政內(nèi)部辦公系統(tǒng)是提供給民政局辦公人員使用的,民政局辦公人員通過該系統(tǒng)能夠?qū)徟鐓^(qū)上報(bào)的申請(qǐng)和管理的民政業(yè)務(wù)信息。社區(qū)家園網(wǎng)是一個(gè)論壇,為群眾提供一個(gè)咨詢、辦事和交流的平臺(tái),不需要進(jìn)行證件真實(shí)性審核的業(yè)務(wù)都通過社區(qū)家園網(wǎng)申報(bào)。
2.2架構(gòu)設(shè)計(jì)民政服務(wù)信息系統(tǒng)采用ExtJS和JSP實(shí)現(xiàn)前臺(tái)頁面,通過Struts2、Spring和Hibernate實(shí)現(xiàn)后臺(tái)業(yè)務(wù)處理,并通過ExtJS和SSH整合搭建一個(gè)實(shí)現(xiàn)了MVC設(shè)計(jì)模式的系統(tǒng)架構(gòu)。ExtJS+SSH架構(gòu)中ExtJS實(shí)現(xiàn)了從用戶界面向后臺(tái)提交請(qǐng)求。控制層使用Struts2來實(shí)現(xiàn)MVC模式。業(yè)務(wù)邏輯層細(xì)化為Service層和DAO層,通過Spring來管理Service和DAO之間的耦合關(guān)系。數(shù)據(jù)持久層使用Hibernate框架。實(shí)現(xiàn)時(shí)為了提高系統(tǒng)的擴(kuò)展性,Service層和DAO層使用抽象接口,將具體的實(shí)現(xiàn)類和接口分離,并通過Spring指定Service接口和DAO接口的具體實(shí)現(xiàn)類,在需求變化后,只需更改Spring的配置文件就可以適應(yīng)新的需求,符合“開閉原則”。系統(tǒng)架構(gòu)圖如圖2所示。控制層通過Struts2的servlet來完成,Action層由Struts2中的自定義action類實(shí)現(xiàn)。Action層中的對(duì)象使用Struts-Spring插件管理,而Service層和Dao層及相應(yīng)實(shí)現(xiàn)層的對(duì)象統(tǒng)一由Spring管理。表現(xiàn)層通過JSP和ExtJS實(shí)現(xiàn)。
2.3功能設(shè)計(jì)
2.3.1民政內(nèi)部辦公系統(tǒng)的設(shè)計(jì)民政內(nèi)部辦公系統(tǒng)按組織機(jī)構(gòu)來劃分功能模塊,主要包括區(qū)劃地名科、社會(huì)福利與社會(huì)事務(wù)科、最低生活保障局、民間組織管理科、救災(zāi)救濟(jì)科、局辦公室和人事科。根據(jù)通用信息系統(tǒng)的需求,添加了權(quán)限管理和登錄管理。由于每個(gè)模塊都有相應(yīng)的政策法規(guī),將政策法規(guī)提取出來作為一個(gè)模塊,局長監(jiān)督模塊體現(xiàn)了民政服務(wù)信息系統(tǒng)比手動(dòng)辦公的優(yōu)勢(shì),局長通過該系統(tǒng)就可以了解下屬的工作情況而不會(huì)打擾到下屬辦公。民政內(nèi)部辦公系統(tǒng)的功能結(jié)構(gòu)圖如圖3所示。由于篇幅所限,圖3中的第三級(jí)模塊只列出具有代表性的功能模塊,并對(duì)部分有代表性的第二級(jí)模塊功能作了說明。區(qū)劃地名科的功能是對(duì)地名普查等基本信息進(jìn)行管理,主要包括:地名更改審批和行政區(qū)劃,自然村和建筑物等地名信息的查詢/添加/刪除/修改和歷史信息查詢。社會(huì)福利與社會(huì)事務(wù)科是對(duì)兒童收養(yǎng)、社會(huì)福利機(jī)構(gòu)、婚姻登記、殯葬及墓地和社會(huì)救助的管理。審批類業(yè)務(wù)主要包括兒童收養(yǎng)審批和社會(huì)福利機(jī)構(gòu)審批,管理類業(yè)務(wù)主要是對(duì)兒童收養(yǎng)信息、婚姻登記信息、社會(huì)救助信息和殯葬及墓地信息的添加/刪除/修改。民間組織管理科的主要功能是民間組織的審核、民間組織信息管理和民間組織年檢。民政內(nèi)部辦公系統(tǒng)具有權(quán)限驗(yàn)證的功能,用戶登錄后只能處理本科室的業(yè)務(wù)。
2.3.2社區(qū)服務(wù)平臺(tái)的設(shè)計(jì)社區(qū)服務(wù)平臺(tái)是以業(yè)務(wù)功能來劃分模塊的,將社區(qū)的辦公作為辦公系統(tǒng)模塊,其他模塊都是對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行管理。社區(qū)服務(wù)平臺(tái)的功能模塊還有社區(qū)基本信息、社區(qū)組織、社會(huì)救助、社區(qū)服務(wù)、災(zāi)害數(shù)據(jù)管理和社區(qū)居委會(huì)管理。社區(qū)服務(wù)平臺(tái)的功能結(jié)構(gòu)圖如圖4所示。圖4中的三級(jí)模塊都是二級(jí)模塊的核心功能,其他功能由于篇幅所限暫未列出。社區(qū)服務(wù)平臺(tái)的主要功能模塊分析如下。社區(qū)基本信息、社區(qū)組織、社會(huì)救助、社區(qū)服務(wù)都屬于信息管理模塊,主要功能是對(duì)相應(yīng)信息進(jìn)行查詢。災(zāi)害數(shù)據(jù)管理的主要功能是提交災(zāi)害數(shù)據(jù)到民政局和對(duì)該社區(qū)的災(zāi)害數(shù)據(jù)進(jìn)行管理。2.3.3社區(qū)家園網(wǎng)的設(shè)計(jì)社區(qū)家園網(wǎng)的實(shí)質(zhì)是論壇,社區(qū)家園網(wǎng)實(shí)現(xiàn)時(shí)使用一個(gè)開源的論壇框架,然后添加一個(gè)二級(jí)模塊民政業(yè)務(wù)來完成所有在社區(qū)家園網(wǎng)提交的民政業(yè)務(wù)。社區(qū)家園網(wǎng)的功能結(jié)構(gòu)圖如圖5所示。由于篇幅所限,圖5中的民政業(yè)務(wù)模塊的部分功能模塊未列出。
3系統(tǒng)的關(guān)鍵技術(shù)
民政服務(wù)信息系統(tǒng)是以Struts2為實(shí)現(xiàn)架構(gòu)的基礎(chǔ),通過Spring來整合相應(yīng)的框架。Struts2和Spring整合來完成對(duì)Action的管理,Spring和Hibernate整合來實(shí)現(xiàn)持久化的工作。ExtJS作為Struts2的視圖的實(shí)現(xiàn)。
3.1系統(tǒng)核心配置文件的實(shí)現(xiàn)民政服務(wù)信息系統(tǒng)在web.xml中定義Struts2和Spring的配置文件路徑。該系統(tǒng)中Struts2的Action對(duì)象由Struts-Spring插件來管理,該插件需要在web.xml中配置相應(yīng)的監(jiān)聽器。web.xml文件核心內(nèi)容。
3.2Spring和Hibernate整合的實(shí)現(xiàn)Hibernate完成系統(tǒng)業(yè)務(wù)數(shù)據(jù)持久化的操作,提供了save、delete、update等方法,在DAO層只需調(diào)用這些方法就可以存儲(chǔ)業(yè)務(wù)數(shù)據(jù)。Spring對(duì)Hibernate支持非常完善,在Spring的配置文件daoContext.xml中配置一個(gè)id為dataSource的bean和一個(gè)sessionFactory的bean,在程序中使用注入的sessionFactory對(duì)象來實(shí)例化Spring框架提供的HibernateTemplate模板,DAO通過HibernateTemplate來調(diào)用持久化方法進(jìn)行業(yè)務(wù)數(shù)據(jù)存儲(chǔ)。
3.3整合ExtJS的實(shí)現(xiàn)ExtJS框架只需要在JSP頁面導(dǎo)入ExtJS的核心JS文件和CSS樣式,就可以在自定義JS文件中使用ExtJS提供的頁面組件和表單組件,而不必使用HTML標(biāo)簽來編寫Web界面。在主界面的JSP中整合ExtJS的代碼如下。
4結(jié)束語
- 上一篇:框架結(jié)構(gòu)
- 下一篇:mvc框架