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