《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計應(yīng)用 > 基于SSH的渠道管理系統(tǒng)的設(shè)計與實現(xiàn)
基于SSH的渠道管理系統(tǒng)的設(shè)計與實現(xiàn)
來源:微型機(jī)與應(yīng)用2011年第4期
沙先軍1,王愛平2,魏博誠1
(1.安徽大學(xué) 計算機(jī)學(xué)院,安徽 合肥230039; 2.安徽大學(xué) 計算與信號處理教育部重點實驗室,
摘要: 結(jié)合電信行業(yè)渠道管理信息化建設(shè)的現(xiàn)狀和需求,采用基于Struts+Spring+Hibernate(SSH)的輕量級分層技術(shù)架構(gòu)的解決方法,設(shè)計和開發(fā)了一套B/S架構(gòu)的渠道管理系統(tǒng)。實驗結(jié)果表明,SSH框架的使用不僅簡化了系統(tǒng)的開發(fā)過程,而且提高了系統(tǒng)的可擴(kuò)展性和可維護(hù)性。
Abstract:
Key words :

摘  要: 結(jié)合電信行業(yè)渠道管理信息化建設(shè)的現(xiàn)狀和需求,采用基于Struts+Spring+Hibernate(SSH)的輕量級分層技術(shù)架構(gòu)的解決方法,設(shè)計和開發(fā)了一套B/S架構(gòu)的渠道管理系統(tǒng)。實驗結(jié)果表明,SSH框架的使用不僅簡化了系統(tǒng)的開發(fā)過程,而且提高了系統(tǒng)的可擴(kuò)展性和可維護(hù)性。
關(guān)鍵詞: Struts;Spring;Hibernate;耦合;渠道管理系統(tǒng)

    渠道是電信行業(yè)直接面向客戶進(jìn)行營銷、銷售和服務(wù)的載體,隨著電信行業(yè)競爭格局的形成和運(yùn)營形式的多樣化,已經(jīng)有越來越多的渠道加入了電信行業(yè)。渠道的作用功不可沒,不僅發(fā)展了電信行業(yè)而且還為電信運(yùn)營商降低了運(yùn)營成本,但目前渠道管理仍然面臨著不少問題。首先由于歷史原因,渠道信息系統(tǒng)版本較多,維護(hù)和管理比較困難;其次系統(tǒng)流程不暢;而且由于系統(tǒng)功能不健全,數(shù)據(jù)不全面,不能為業(yè)務(wù)部門提供全面和準(zhǔn)確的支撐報表統(tǒng)計功能。本文基于這樣的業(yè)務(wù)需求驅(qū)動,采用能夠快速開發(fā)出跨平臺、可重用、可擴(kuò)展、分布式系統(tǒng)的SSH架構(gòu),設(shè)計實現(xiàn)了一個能夠較好地適應(yīng)業(yè)務(wù)需求變化的渠道管理信息系統(tǒng)。
1 SSH技術(shù)集成框架
    使用可重用的、成熟穩(wěn)定的框架可以構(gòu)建健壯的、可重用的、可擴(kuò)充的、易維護(hù)的Web應(yīng)用程序。目前,Java開源世界里有不少優(yōu)秀的框架,本文選用目前業(yè)界主流的Java開發(fā)體系Struts+Spring+Hibernate實現(xiàn)整個系統(tǒng)。從圖1可以看出SSH集成架構(gòu)主要由頁面表現(xiàn)層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層構(gòu)成,并且各層之間通過域?qū)ο骩1](Domain Objects)做為載體進(jìn)行通信。


1.1 頁面表現(xiàn)層
    頁面層由Struts實現(xiàn),Struts是基于MVC模型的框架。MVC模型將一個Web應(yīng)用分割成為模型(Model)、視圖(View)和控制器(Controller)三個部件,這三個部件既相互獨(dú)立又能協(xié)同工作,通用的控制組件ActionServlet接收來自客戶端的HTTP請求,根據(jù)Struts-config.xml配置文件,把請求轉(zhuǎn)發(fā)給相應(yīng)的Action對象,然后Action類實現(xiàn)業(yè)務(wù)邏輯和動作處理,通過流程跳轉(zhuǎn)將處理結(jié)果返回給客戶端[2]。
1.2 業(yè)務(wù)邏輯層
    由Spring實現(xiàn)業(yè)務(wù)組件的組裝關(guān)聯(lián)與管理,Spring是個流行的輕量級容器,是一個開源的并且普遍兼容的非強(qiáng)制性的框架。它通過IoC[3](Inversion of Control,又稱DI,Dependency Injection)、AOP(Aspect-Oriented Programming)的應(yīng)用、使用面向接口的編程最大限度地降低業(yè)務(wù)組件之間的耦合度,增強(qiáng)系統(tǒng)兼容性和可擴(kuò)展性。
1.3 數(shù)據(jù)持久層
    借助開源框架Hibernate對JDBC進(jìn)行輕量級的對象封裝,將數(shù)據(jù)庫表與對象進(jìn)行關(guān)聯(lián),實現(xiàn)數(shù)據(jù)庫訪問性能優(yōu)化和與數(shù)據(jù)庫交互的常用操作CRUD。Hibernate封裝了數(shù)據(jù)庫訪問、事務(wù)管理、數(shù)據(jù)緩存等工作,可以大大提供開發(fā)效率。
    將這三種技術(shù)有機(jī)結(jié)合起來構(gòu)建的SSH技術(shù)框架,不但可以有效提高系統(tǒng)開發(fā)效率,而且在系統(tǒng)安全性、穩(wěn)定性和健壯性上都有良好的改進(jìn)。域?qū)ο笤诟鱾€層之間移動,為表示層提供所需要的數(shù)據(jù)源,為持久層提供對象,使得各個層以一種松散耦合的方式彼此作用而無需考慮低層的技術(shù)細(xì)節(jié),進(jìn)而構(gòu)建出一個完整的Web開發(fā)框架。
2 系統(tǒng)簡介及分層實現(xiàn)
2.1 系統(tǒng)簡介

    渠道是電信運(yùn)營商與客戶進(jìn)行交互的具體途徑,是向客戶銷售產(chǎn)品并提供差異化服務(wù)的載體。渠道管理主要承載渠道運(yùn)營過程中的管理支撐功能,包括面向渠道的規(guī)劃建設(shè)和所涉及人員、費(fèi)用等方面的基礎(chǔ)管理功能,以及績效考核、服務(wù)管理等輔助管理功能。最終通過系統(tǒng)達(dá)到為渠道業(yè)務(wù)提供服務(wù)、加強(qiáng)渠道管控水平、提高各類渠道商的素質(zhì)及實力、培育營銷渠道系統(tǒng)的核心競爭力,并引導(dǎo)各渠道商積極配合電信運(yùn)營商推行相關(guān)市場政策。
    圖2為某省渠道管理系統(tǒng)的功能結(jié)構(gòu)圖,主要包括渠道規(guī)劃建設(shè)管理、業(yè)務(wù)管理、費(fèi)用管理、運(yùn)營考核管理、積分管理、酬金管理、系統(tǒng)管理、資源管理、支撐服務(wù)管理、統(tǒng)計報表等十大功能模塊。該系統(tǒng)服務(wù)器操作系統(tǒng)采用Unix(solaris),關(guān)系型數(shù)據(jù)庫采用Oracle,應(yīng)用服務(wù)器根據(jù)資金投入選擇了Oracle 的Weblogic。客戶機(jī)的操作系統(tǒng)選用Windows2000、WindowsXP等版本,安裝IE6.0以上的瀏覽器。

2.2 SSH架構(gòu)分層實現(xiàn)
2.2.1 數(shù)據(jù)持久層的搭建

    持久層Persistence主要完成數(shù)據(jù)的訪問,它操作底層的數(shù)據(jù)庫表,使用DAO組件封裝具體的操作細(xì)節(jié),為業(yè)務(wù)層提供接口,使業(yè)務(wù)邏輯與數(shù)據(jù)持久化分離。在Hibernate中,通過配置相應(yīng)的XML文件(*.hbm.xml)來完成對象與表、對象屬性與表字段的“O/R映射”關(guān)系。Hibernate運(yùn)行時,會自動讀取XML映射文件,然后按照該文件指定的規(guī)則動態(tài)構(gòu)建Java類,以便管理數(shù)據(jù)在數(shù)據(jù)庫與Java程序之間的轉(zhuǎn)換。
    持久層的訪問通過DAO組件完成,下面以渠道組織機(jī)構(gòu)信息表(Dchngroupmsg)為例介紹DAO組件建立的過程。
    首先使用自動化工具生成JAVA的VO(Value Obects)對象DchngroupmsgVo和*.hbm.xml映射文件。Dchngroup-
msgVo類的屬性與映射文件Dchngroupmsg.hbm.xml中的字段是一一對應(yīng)的,它完成了對象與表、對象屬性與表字段的“O/R映射”。同時所有映射文件需要在Spring框架的application-Context.xml中配置,這樣在Hibernate啟動時才能根據(jù)該映射文件真正完成對象/關(guān)系的映射。
    其次是DAO組件的實現(xiàn)與配置。DAO組件繼承了HibernateDaoSupport類,是Spring中整合了Hibernate的支持類,正是由于Spring對Hibernate的良好整合,調(diào)用Hibernate進(jìn)行數(shù)據(jù)操作時只需要簡單地繼承Spring的HibemateDaoSupport類,然后在需要調(diào)用的方法中通過getHibemateTemplate( )提供的方法就可以方便地操縱Hibernate。
    DAO組件實現(xiàn)后,將它們配置在Spring容器中,讓Spring容器為其注入SessionFactory的引用,并將DAO組件注入到業(yè)務(wù)邏輯組件中。通過這種依賴注入,可以提供應(yīng)用各組件之間的良好解耦。
2.2.2 業(yè)務(wù)邏輯層的構(gòu)建
    在SSH架構(gòu)中Spring是最核心的框架,Spring主要應(yīng)用于業(yè)務(wù)層來管理其他組件,充當(dāng)了管理容器的角色。負(fù)責(zé)處理應(yīng)用程序業(yè)務(wù)邏輯、業(yè)務(wù)校驗和事務(wù)管理[4];同時管理業(yè)務(wù)層的對象依賴;在表示層和持久層之間增加了一個靈活的機(jī)制,使得它們沒有直接聯(lián)系,借助Spring的IoC、AOP應(yīng)用、面向接口編程,能降低業(yè)務(wù)組件之間的耦合度,增強(qiáng)系統(tǒng)擴(kuò)展性。
    構(gòu)建Spring業(yè)務(wù)層主要完成以下兩方面的任務(wù):
    (1)對Spring容器進(jìn)行初始化與配置:Spring提供一個ContextLoaderListener類用作Spring容器的初始化。Spring容器初始化之后,需要創(chuàng)建 ApplicationContext實例,Spring有兩個核心接口BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口,增強(qiáng)了BeanFactory的功能,提供系統(tǒng)架構(gòu)服務(wù)。
    (2)業(yè)務(wù)邏輯實現(xiàn):使用面向接口的編程,調(diào)用持久層定義好的接口為表示層提供業(yè)務(wù)接口,而無需關(guān)心接口的具體實現(xiàn)細(xì)節(jié),先定義業(yè)務(wù)層的接口SGroupMsgSvcI:
    接口SGroupMsgSvcI的實現(xiàn)類SGroupMsgSvcImpl:
    public class SGroupMsgSvcImpl extends BaseService
implements SGroupMsgSvc
    {
        public DchngroupmsgVo getDchngroupmsgVo(String id)
throws Exception
        {
            DchngroupmsgVo gmvo = new DchngroupmsgVo();
            DchngroupmsgDAO gmdao =(DchngroupmsgDAO)
            this.getBean("dchngroupmsgdao");
            return  gmvo = gmdao.get(id);
        }
    }
    以上的業(yè)務(wù)邏輯很簡單,只是通過簡單的調(diào)用DchngroupmsgDAO的接口方法來完成。DchngroupmsgDAO引用是在前面持久層中配置的,這個配置指示Spring去動態(tài)注入DchngroupmsgDAO到SGroupMsgSvcImpl中,實現(xiàn)渠道組織信息的獲取。
2.2.3 頁面表示層的建立
    Struts實際上是Servlet技術(shù)的一個擴(kuò)展,它用一個ActionServlet來接收瀏覽器的請求,用于系統(tǒng)的集中控制,然后在相應(yīng)的Action類中調(diào)用業(yè)務(wù)邏輯,最后進(jìn)行流程跳轉(zhuǎn)。
    表示層的建立主要是使用標(biāo)簽編寫JSP頁面,定義Struts的Action類及相應(yīng)的配置文件。首先要定義ActionForm,用于收集JSP頁面?zhèn)鱽淼臄?shù)據(jù),供Action中調(diào)用業(yè)務(wù)邏輯使用。為了使用Struts 的Validator框架來做客戶端的表單驗證,ActionForm繼承了org.apache.struts.action.ActionForm的子類ValidatorForm。ActionForm中定義的成員名稱要與JSP頁面表單中的域名稱一致,這樣在提交數(shù)據(jù)的時候,Struts會自動把表單中的數(shù)據(jù)封裝到繼承的ActionForm中,避免了以往用request.getParameter獲取參數(shù)的繁瑣。
    然后編寫Action類,所有的Action類都繼承了自定義的BaseAction類,BaseAction類是 org.apache.struts.actions.DispatchAction的子類,同時在BaseAction類中實現(xiàn)了一些公共方法,例如令牌驗證判斷是否重復(fù)提交、生成下拉列表、創(chuàng)建上下文ApplicationContext實例等。Action類從ActionForm中提取數(shù)據(jù),調(diào)用業(yè)務(wù)邏輯,然后根據(jù)返回結(jié)果轉(zhuǎn)向相應(yīng)的頁面。
    public class SGroupMsgAction extends BaseAction
    {
        public ActionForward queryGroupMsg(ActionMapping
mapping,
            ActionForm actionForm, HttpServletRequest request,
            HttpServletResponse response)throws Exception{
            SGroupMsgSvcI groupMsg_chn = (SGroupMsgSvcI)
this.getBean("SGroupMsgSvc");
            String group_id = request.getParameter
("GROUP_ID");
            DchngroupmsgVo dvo = groupMsg_chn.getDchn-
groupmsgVo(group_id);
            ActionForward forward = mapping.findForward
("SUCCESS");
            return forward;
        }
    }
    所有的Struts Action類都繼承自BaseAction,基類BaseAction完成Spring上下文ApplicactionContext.xml的加載,提供一個公共的服務(wù)定位器方法getBean(),這里SGroupMsgAction是BaseAction的子類,繼承了父類的getBean方法,所以只要通過傳入?yún)?shù)“SGroupMsgSvc”即可查找Spring的Bean資源,“SGroupMsgSvc”正是前面業(yè)務(wù)層在配置文件中指定的bean。這樣根據(jù)給定bean的id就能返回配置文件中指定的類。
    Struts的控制器ActionServlet接收用戶查詢渠道信息的URL請求“/sGroupMsg.do?operate=queryGroupMsg”,根據(jù)該請求的URL查找struts-config.xml配置文件來決定該請求是否處理SGroupMsgAction,SGroupMsgAction的queryGroupMsg方法接收頁面數(shù)據(jù),通過服務(wù)定位器查找名為“SGroupMsgSvc”的Bean資源,返回業(yè)務(wù)類的接口SGroupMsgSvcI,并以域模型DchngroupmsgVo對象為參數(shù)調(diào)用業(yè)務(wù)接口的getDchngroupmsgVo方法來處理業(yè)務(wù)邏輯,若查詢成功則返回一個自定義邏輯名稱“SUCCESS”的ActionForward對象,最后ActionServlet把流程轉(zhuǎn)向ActionForward中定義的JSP頁面(success.jsp),從而完成一次請求/響應(yīng)過程。
    至此,基于Struts、Spring+Hibernate框架開發(fā)的渠道組織機(jī)構(gòu)查詢功能開發(fā)完成。
    本文所設(shè)計的SSH集成的Web開發(fā)框架基于良好的應(yīng)用程序分層和成熟的開源項目,具有結(jié)構(gòu)清晰、松散耦合、可擴(kuò)展和可維護(hù)性好的特點,已在電信運(yùn)營商的各個省份(如北京、湖南、安徽、山西、陜西、四川,黑龍江、新疆等)的渠道管理系統(tǒng)中得到了非常成功的應(yīng)用。目前系統(tǒng)采用的SSH集成架構(gòu)已成為最為理想和成熟的J2EE Web應(yīng)用框架,而且這種開發(fā)模式將會被越來越多的程序員所接受,在實際開發(fā)中得到廣泛應(yīng)用。
參考文獻(xiàn)
[1] 郝彬,陳朔鷹.利用框架技術(shù)構(gòu)建Web應(yīng)用.計算機(jī)工程與設(shè)計[J].2007,28(1):8-13.
[2] 諶湘倩,狄文輝,孫冬.基于輕量級J2EE框架的網(wǎng)絡(luò)教學(xué)系統(tǒng)[J].計算機(jī)工程,2008,34(6):266-268.
[3] 林信良.Spring 2.0技術(shù)手冊[M].北京:電子工業(yè)出版社,  2007.
[4] 李剛.整合Struts+Hibernate+Spring應(yīng)用開發(fā)詳解[M].北京:清華大學(xué)出版社,2007.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。