ssh框架范文

時(shí)間:2023-03-28 21:03:06

導(dǎo)語:如何才能寫好一篇ssh框架,這就需要搜集整理更多的資料和文獻(xiàn),歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。

ssh框架

篇1

關(guān)鍵詞:sshJ2EE框架技術(shù)

SSH是一種基于J2EE技術(shù)的MVC軟件開發(fā)框架,它可以大大降低J2EE程序開發(fā)的難度,提高開發(fā)效率?本文試圖通過對(duì)SSH框架的組成與功能進(jìn)行深入的分析,揭示其較傳統(tǒng)J2EE開發(fā)工具的先進(jìn)之處。

1. SSH框架技術(shù)簡(jiǎn)述

集成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支持。相比傳統(tǒng)的J2EE開發(fā)工具,它具有一系列獨(dú)特的優(yōu)點(diǎn)?

首先,SSH框架能夠有效的降低開發(fā)成本?縮短開發(fā)周期?SSH作為一款開源的框架,無需部署在成本極高的大型服務(wù)器上,很多時(shí)候只需要配合APACHE一類較便宜的服務(wù)器使用。

其次,SSH作為一款輕量級(jí)的框架可以有效降低系統(tǒng)開銷,同時(shí)它還可以與異步JavaScript和XML框架同時(shí)使用,不僅能夠?qū)τ脩趔w驗(yàn)產(chǎn)生極大的改善,且有助于提升系統(tǒng)性能。

最后,由于SSH框架建立于J2EE的基礎(chǔ)之上,所以其同時(shí)具備了J2EE的安全性與跨平臺(tái)優(yōu)勢(shì)?同時(shí)由于其往往將組件相關(guān)的配置與關(guān)系寫入XML配置文件,使其在面對(duì)需求變化時(shí)可通過簡(jiǎn)單的對(duì)配置信息的修改來加以實(shí)現(xiàn)而無需對(duì)系統(tǒng)進(jìn)行大的修改。2. 表示層框架Struts簡(jiǎn)介

最初Struts于2002年問世的時(shí)候,由于其創(chuàng)始人希望其能夠?qū)?biāo)簽庫與JSP等開發(fā)技術(shù)有所助益,所以它被設(shè)計(jì)成了一個(gè)開源項(xiàng)目。它很好的對(duì)MVC系統(tǒng)的開發(fā)提供了底層支持,有效的縮短了運(yùn)用MVC模型對(duì)WEB應(yīng)用的開發(fā)周期,最終成為了MVC模式事實(shí)上的行業(yè)標(biāo)準(zhǔn)。

Struts由四個(gè)組件協(xié)同工作,其中ActionServlet類是中央控制器,在每個(gè)項(xiàng)目中唯一存在。而Action作為分控制器對(duì)具體流程進(jìn)行實(shí)際上的控制,調(diào)用相應(yīng)的業(yè)務(wù)邏輯模塊來實(shí)現(xiàn)功能并送出結(jié)果?ActionMapping作用是幫助控制器將請(qǐng)求映射到操作,ActionForm的作用則是接受和存儲(chǔ)表示層中接受的數(shù)據(jù)。這四部分共同實(shí)現(xiàn)了Struts框架對(duì)流程的控制,

由于Struts框架屬于開源項(xiàng)目,這給了我們深入理解其內(nèi)部實(shí)現(xiàn)機(jī)制的機(jī)會(huì)?總體而言,Struts的優(yōu)勢(shì)很明顯?它的優(yōu)點(diǎn)在于它擁有大量的成功案例可供開發(fā)者借鑒?同時(shí)提供了豐富的標(biāo)記庫(Taglib),可大大提高開發(fā)的效率?而它將表現(xiàn)與邏輯分離的做法,使得結(jié)構(gòu)更加清晰,有助于開發(fā)者將精力集中于業(yè)務(wù)邏輯的實(shí)現(xiàn)?最后,它具有優(yōu)秀的頁面導(dǎo)航功能,這對(duì)后期的維護(hù)有著不可估量的好處。3. 持久層框架Hibernate簡(jiǎn)介

Hibernate是一款開源的對(duì)象——關(guān)系映射框架,它對(duì)JDBCAPI進(jìn)行了極其輕量級(jí)的對(duì)象封裝,從而極大的擴(kuò)展了開發(fā)人員對(duì)數(shù)據(jù)庫的操縱程度,同時(shí)它封裝了數(shù)據(jù)訪問的細(xì)節(jié),使得開發(fā)者可以將更多的精力集中在業(yè)務(wù)邏輯上。

Hibernate有6個(gè)核心接口,分別是擁有負(fù)責(zé)將其初始化的SessionFactory接口,負(fù)責(zé)執(zhí)行被持久化對(duì)象的CRUD操作的Session接口,負(fù)責(zé)事務(wù)相關(guān)的操作的可選接口Transaction以及負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫查詢Query接口與Criteria接口?Hibernate通過這些接口,對(duì)持久化對(duì)象進(jìn)行各種存取操作并進(jìn)行事務(wù)控制。

Hibernate主要有四塊內(nèi)容:持久化類PO,它是數(shù)據(jù)庫表的一個(gè)映射,是Hibernate的操作對(duì)象,而操作結(jié)果會(huì)反映到對(duì)應(yīng)的數(shù)據(jù)庫表中,映射文件XMLMapping,它存放著PO和數(shù)據(jù)庫表的映射信息,如表名和類名的對(duì)應(yīng),PO的屬性與數(shù)據(jù)庫表中字段的對(duì)應(yīng),hibernate.cfg.xml,存放著連接數(shù)據(jù)庫的配置信息已經(jīng)映射文件的路徑,在Hibernate初始化時(shí)Configuration會(huì)加載該文件信息到計(jì)算機(jī)內(nèi)存,并創(chuàng)建一個(gè)SessionFactory對(duì)象,把讀入的配置信息拷貝到SessionFactory對(duì)象的緩存中,HibernateAPI,主要是前文中所述的六大接口,彼此配合最終實(shí)現(xiàn)Hibernate對(duì)PO的各種操作并持久化到數(shù)據(jù)庫中。4. Spring框架簡(jiǎn)介

Spring框架提供了一種能夠完全獨(dú)立于各種應(yīng)用服務(wù)器并可與現(xiàn)有框架無縫整合的解決方案,其主要通過控制反轉(zhuǎn)與面向方面編程兩種方式來進(jìn)行實(shí)現(xiàn),其主要優(yōu)點(diǎn)在于無論你是否使用了EJB,SPRING都能夠有效的對(duì)你的中間層對(duì)象進(jìn)行組織,它為數(shù)據(jù)存取提供了一個(gè)統(tǒng)一的框架,并能夠以一種統(tǒng)一的方式對(duì)不同的程序與項(xiàng)目的配置文件進(jìn)行處理,它是一個(gè)全面的解決方案,包括了非常豐富的內(nèi)容,包括視圖層?模型層?數(shù)據(jù)層等,它提供了很多原來只有EJB能提供的功能(如聲明式事務(wù)管理),卻又無須運(yùn)行在EJB容器上。

Spring框架由七個(gè)有著明確定義的模塊組成,其中SpringCore是它的基礎(chǔ)部分,是控制反轉(zhuǎn)的承載容器?而在此基礎(chǔ)上衍生出來的SpringAOP則提供了對(duì)面向類編程的支持,Springweb與Springorm則分別提供了對(duì)MVC框架與ORM框架的支持,SpringDAO則簡(jiǎn)化了JDBC編程,使代碼更健壯,SpringContext作為一個(gè)強(qiáng)大的集成工具箱,有利于進(jìn)行企業(yè)級(jí)程序的開發(fā),而相比之下,SpringWebMVC則聲名不彰,盡管它作為一款MVC框架提供了比Struts更自由的配置度但卻未能得到廣泛的應(yīng)用,以上七個(gè)模塊均可單獨(dú)或聯(lián)合實(shí)現(xiàn),具有較高的自由度。5. 使用Spring對(duì)Struts與Hibernate加以整合

我們從前文中可以清晰的看到,Struts是目前應(yīng)用于MVC框架中的業(yè)界實(shí)際標(biāo)準(zhǔn),其具備高度的可靠性與穩(wěn)定性,同時(shí)將表現(xiàn)與邏輯分離,從而使得結(jié)構(gòu)更加清晰?同時(shí)提供了豐富的標(biāo)記庫(Taglib)與頁面導(dǎo)航,大大提高了開發(fā)的效率與易維護(hù)性,但是在模型層卻缺少相應(yīng)的實(shí)現(xiàn)。

而Hibernate作為目前業(yè)界最成熟的持久層框架之一,封裝了數(shù)據(jù)訪問的細(xì)節(jié),使得開發(fā)者可以將更多的精力集中在業(yè)務(wù)邏輯上,極大的提高了開發(fā)效率。

SSH框架的指導(dǎo)思想就是將這兩個(gè)框架有機(jī)的整合在一起,充分發(fā)揮出二者各自的優(yōu)點(diǎn), Spring通過Springweb與SpringORM兩個(gè)模塊分別對(duì)Struts和Hibernate兩個(gè)框架進(jìn)行了整合,為企業(yè)級(jí)的應(yīng)用程序提供了一套模塊化的一攬子解決方案,在讓前者發(fā)揮出其對(duì)程序流程的良好控制作用的同時(shí)讓后者負(fù)責(zé)數(shù)據(jù)庫的訪問,以達(dá)到優(yōu)勢(shì)互補(bǔ)、降低開發(fā)難度、提高開發(fā)效率的目的。

篇2

關(guān)鍵詞:Java;中文亂碼;ssh;數(shù)據(jù)庫;參數(shù)傳遞

中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2011)21-5157-02

Research on Chinese Characters Garbage under SSH Framework

ZHANG Jin-meng, SU Jian, ZHAO Yao

(Shijiazhuang Vocational College of Posts and Telecommunications, Shijiazhuang 050021, China)

Abstract: Chinese characters garbage of Java web programming, is a long time and headache problems. Particularly, for just contact Java programming personnel, this problem is more trouble. This article introduces the solution of Chinese characters garbage, from the database code pages and jsp chinese parameters, ajax chinese characters pass those three points in the java web program under ssh framework.

Key words: Java; Chinese characters garbage; ssh; database; parameters pass

1 Java中文亂碼問題的產(chǎn)生原因

在Java Web的應(yīng)用中,中文字符亂碼問題是個(gè)由來已久和讓人頭疼的問題,尤其是剛剛接觸Java Web編程的人員,往往在解決中文字符亂碼問題上花費(fèi)了大量的時(shí)間和精力。

要了解Java中文亂碼問題的產(chǎn)生原因,先要從Java的字符編碼說起,常用的Java字符編碼集有以下幾種:

ASCII(American Standard Code for Information Interchange,美國(guó)信息互換標(biāo)準(zhǔn)代碼),是基于常用的英文字符的一套電腦編碼系統(tǒng)。我們知道英文經(jīng)常使用的字符、數(shù)字符號(hào)被計(jì)算機(jī)處理時(shí)都是以二進(jìn)制碼的形式出現(xiàn)的。這種二進(jìn)制碼的形式就是所謂的ASCII碼。每個(gè)ASCII與一個(gè)8位二進(jìn)制數(shù)對(duì)應(yīng)。其最高位是0,相應(yīng)的十進(jìn)制數(shù)是0-127。另有128個(gè)擴(kuò)展的ASCII碼,最高位都是1,由一些制表符和其它符號(hào)組成。ASCII是現(xiàn)今最通用的單字節(jié)編碼系統(tǒng)。

GB2312:GB2312碼是中華人民共和國(guó)國(guó)家漢字信息交換用編碼,全稱《信息交換用漢字編碼字符集-基本集》。主要用于給每個(gè)中文字符指定相應(yīng)的數(shù)字,也就是通行編碼。一個(gè)中文字符用兩個(gè)字節(jié)的數(shù)字來表示,為了與ASCII碼有所區(qū)別,將中文字符每一個(gè)字節(jié)的最高位置都用1來表示。

GBK:為了對(duì)更多的字符進(jìn)行編碼,國(guó)家又了新的編碼系統(tǒng)GBK(GBK的K是“擴(kuò)展”的漢語拼音的第一個(gè)字母)。在新的編碼系統(tǒng)里,除了兼容GB2312外,還對(duì)繁體中文、一些不常用的漢字和許多符號(hào)進(jìn)行了編碼。

ISO-8859-1:ISO-8859-1編碼是單字節(jié)編碼,向下兼容ASCII,其編碼范圍是0x00-0xFF,0x00-0x7F之間完全和ASCII一致,0x80-0x9F之間是控制字符,0xA0-0xFF之間是文字符號(hào)。 ISO-8859-1收錄的字符除ASCII收錄的字符外,還包括西歐語言、希臘語、泰語、阿拉伯語、希伯來語對(duì)應(yīng)的文字符號(hào)。歐元符號(hào)出現(xiàn)的比較晚,沒有被收錄在ISO-8859-1當(dāng)中。

Unicode:這是一種通用的字符集,對(duì)所有語言的文字進(jìn)行了統(tǒng)一編碼,對(duì)每一個(gè)字符都用2個(gè)字節(jié)來表示,對(duì)于英文字符前面加“0”字節(jié)的策略實(shí)現(xiàn)等長(zhǎng)兼容。如“a”的ASCII碼為0x61,Unicode就為0x00,0x61。

UTF-8:Unicode Transformation Format-8bit。是用以解決國(guó)際上字符的一種多字節(jié)編碼,它對(duì)英文使用8位(即一個(gè)字節(jié)),中文使用24為(三個(gè)字節(jié))來編碼。UTF-8包含全世界所有國(guó)家需要用到的字符,是國(guó)際編碼,通用性強(qiáng)。UTF-8編碼的文字可以在各國(guó)支持UTF8字符集的瀏覽器上顯示。如,如果是UTF8編碼,則在外國(guó)人的英文IE上也能顯示中文,他們無需下載IE的中文語言支持包。

Java使用Unicode來存儲(chǔ)字符數(shù)據(jù),處理字符時(shí)通常有3個(gè)步驟:

1)按給定的字符編碼形式,從源輸入流中讀取字符數(shù)據(jù);

2)以Unicode編碼形式將字符數(shù)據(jù)存儲(chǔ)在內(nèi)存中;

3)按指定的字符編碼形式,將字符數(shù)據(jù)編碼并寫入目的輸入流中。

所以Java處理字符時(shí)總是經(jīng)過了兩次編碼轉(zhuǎn)換,一次是從指定編碼轉(zhuǎn)換為Unicode編碼,一次是從Unicode編碼轉(zhuǎn)換為指定編碼。如果讀入時(shí)用錯(cuò)誤的形式解碼字符,則內(nèi)存存儲(chǔ)的是錯(cuò)誤的Unicode字符。而從最初文件中讀出的字符數(shù)據(jù),到最終在屏幕終端顯示這些字符,期間經(jīng)過了應(yīng)用程序的多次轉(zhuǎn)換。如果中間某次字符處理,用錯(cuò)誤的編碼方式解碼了從輸入流讀取的字符數(shù)據(jù),或用錯(cuò)誤的編碼方式將字符寫入輸出流,則下一個(gè)字符數(shù)據(jù)的接收者就會(huì)編解碼出錯(cuò),從而導(dǎo)致最終顯示亂碼。

2 中文字符亂碼問題的分類和解決方法

SSH框架即strut+hibernate+spring,是目前比較流行的開源框架,提出了一種開發(fā)J2EE Web應(yīng)用的輕量級(jí)解決方案,以幫助開發(fā)人員在短期內(nèi)搭建結(jié)構(gòu)清晰、可復(fù)用性好、維護(hù)方便的Web應(yīng)用程序。本文分析了在開發(fā)工具為Eclipse,數(shù)據(jù)庫為oracle,開發(fā)框架為SSH,應(yīng)用服務(wù)器為tomcat的環(huán)境下中文字符亂碼問題的分類和解決方法。

2.1 數(shù)據(jù)庫寫入和讀出亂碼

一旦數(shù)據(jù)庫創(chuàng)建后,數(shù)據(jù)庫的字符集是不能改變的。因此,在設(shè)計(jì)和安裝之初考慮使用哪一種字符集是十分重要的。數(shù)據(jù)庫字符集應(yīng)該是操作系統(tǒng)本地字符集的一個(gè)超集。存取數(shù)據(jù)庫的客戶使用的字符集將決定選擇哪一個(gè)超集,即數(shù)據(jù)庫字符集應(yīng)該是所有客戶字符集的超集。

在oracle中,我們關(guān)心的是三個(gè)地方的字符集:oracle服務(wù)器內(nèi)部的字符集;ns_lang變量里保存的字符集,客戶端應(yīng)用的字符集。在Java編程中,需要統(tǒng)一Java應(yīng)用中的字符集,oracle服務(wù)器內(nèi)部的字符集,ns_lang變量里保存的字符集。通常,在Java開發(fā)中, oracle10g在創(chuàng)建數(shù)據(jù)庫實(shí)例時(shí)需要指定SIMPLIFIED CHINESE_CHINA.ZHS16GBK字符集。有時(shí),在安裝oracle過程中自動(dòng)創(chuàng)建數(shù)據(jù)庫實(shí)例時(shí)使用AMERICAN_AMERICA.WE8ISO8859P1字符集或者一些與Java字符集不兼容的字符集,就會(huì)出現(xiàn)亂碼問題,這時(shí)需要先安裝數(shù)據(jù)庫,不自動(dòng)生成數(shù)據(jù)庫實(shí)例,在安裝完數(shù)據(jù)庫之后,再通過oracle配置和移植工具DataBase Configuration Assistance創(chuàng)建數(shù)據(jù)庫,在圖1的界面中選擇ZHS16GBK字符集。

2.2 JSP頁面顯示和傳遞中文參數(shù)亂碼

要解決這類亂碼問題,涉及到幾個(gè)方面的設(shè)置:

1)在struts的配置文件struts.properties中設(shè)置struts.i18n.encoding=gbk,struts.i18n.encoding用在了請(qǐng)求和返回兩個(gè)階段中流的編碼方式,該參數(shù)為gbk時(shí),相當(dāng)于調(diào)用HttpServletRequest的setCharacterEncoding()方法。

2)在web.xml中添加下面的程序代碼,指定字符過濾器對(duì)字符的編碼方式為gbk。

encodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

gbk

encodingFilter

/*

3)在編輯器中用gbk編碼保存JSP文件,并設(shè)置JSP文件開頭的,其中pageEncoding用來告訴tomcat此文件所用的字符編碼。Tomcat以此編碼來讀取JSP文件并編譯。還要設(shè)置,當(dāng)JSP頁面用post方法提交數(shù)據(jù)時(shí),用此處指定的編碼方式編碼。

4)設(shè)置Tomcat的URIEncoding,如果URIEncoding不加以設(shè)置,則默認(rèn)使用ISO-8859-1來解碼URL,設(shè)置后便用設(shè)置的編碼方式來解碼。這個(gè)解碼同時(shí)包括Path部分和查詢字符串部分。即在Tomcat配置端口的語句中加入U(xiǎn)RIEncoding="GBK"。

進(jìn)行完這些設(shè)置之后,基本上就不會(huì)出現(xiàn)JSP頁面亂碼問題了。

2.3 Action中redirect傳遞中文參數(shù)亂碼

在開發(fā)中有時(shí)需要用response.sendRedirect做轉(zhuǎn)向,它其實(shí)是向?yàn)g覽器發(fā)送一個(gè)特別的Header,然后由瀏覽器來做轉(zhuǎn)向,轉(zhuǎn)到指定的頁面,所以用sendRedirect時(shí),瀏覽器的地址欄上能夠看到地址的變化。通常sendRedirect需要把參數(shù)掛在地址后面以&分隔傳遞,傳遞中文字符時(shí),有時(shí)會(huì)需要亂碼,這時(shí)就需要用到Java的URLEncoder類了,這個(gè)類有個(gè)encode方法,形式為public static String encode(String s, String encoding),在encoding參數(shù)中,可以指定字符編碼的方式,通常我們傳遞中文字符時(shí),需要這樣寫ceshi.jsp?param1=.URLEncoder.encode(“你好”,”gbk”)。這樣就能防止傳遞的中文參數(shù)亂碼了。

2.4 Ajax傳遞中文參數(shù)亂碼

Ajax即“Asynchronous JavaScript and XML”(異步JavaScript和XML)。Ajax提供與服務(wù)器異步通信的能力,從而使用戶從請(qǐng)求/響應(yīng)的循環(huán)中解脫出來。借助于Ajax,可以在用戶單擊按鈕時(shí),使用JavaScript和DHTML立即更新UI,并向服務(wù)器發(fā)出異步請(qǐng)求,以執(zhí)行更新或查詢數(shù)據(jù)庫。當(dāng)請(qǐng)求返回時(shí),就可以使用JavaScript和CSS來相應(yīng)地更新UI,而不是刷新整個(gè)頁面。最重要的是,用戶甚至不知道瀏覽器正在與服務(wù)器通信:Web站點(diǎn)看起來是即時(shí)響應(yīng)的。

Ajax默認(rèn)中文提交以UTF-8格式,解決Ajax中文參數(shù)亂碼問題有兩種方式,一種是提交中文后,在服務(wù)端用UTF-8編碼提取參數(shù):request.setCharsetEncoding(“UTF-8”);String str=request.getParameter(“param”);另一種是在Jsp頁面用encodeURI編碼兩次,即encodeURI(encodeURI(”str”)),然后在服務(wù)端用String str=request.getParameter(“param”); .URIDecoder.decode(str, “UTF-8”)。

3 結(jié)束語

本文介紹了在開發(fā)工具為Eclipse,數(shù)據(jù)庫選用oracle,開發(fā)框架選用SSH,應(yīng)用服務(wù)器選擇tomcat的環(huán)境下中文字符亂碼問題的分類和解決。根據(jù)環(huán)境的不同,可將文中編碼為GBK的部分替換為其它編碼來解決中文亂碼問題。

參考文獻(xiàn):

[1] 李剛.輕量級(jí)J2EE企業(yè)應(yīng)用實(shí)戰(zhàn)[M].北京:電子工業(yè)出版社,2007.

篇3

關(guān)鍵詞:Android;SSH;框架;客戶端;服務(wù)器端

中圖法分類號(hào):TP311.52

隨著人們要求的提高以及3G網(wǎng)絡(luò)的發(fā)展,傳統(tǒng)互聯(lián)網(wǎng)已不能滿足人們的要求,移動(dòng)互聯(lián)網(wǎng)應(yīng)運(yùn)而生。Android系統(tǒng)作為目前最為流行的智能手機(jī)平臺(tái),其相關(guān)應(yīng)用越來越多。本系統(tǒng)開發(fā)了一個(gè)基于Android的校園購物平臺(tái),為在校學(xué)生提供一個(gè)買賣商品的平臺(tái),滿足學(xué)生物品交換的需求。

校園購物系統(tǒng)(Business In School,簡(jiǎn)稱BIS),是一個(gè)學(xué)生校內(nèi)交易的平臺(tái),用戶可以使用該平臺(tái)進(jìn)行商品檢索,找到自己需要的商品,聯(lián)系賣家進(jìn)行面對(duì)面交易,也可以二手交易,或者做為一個(gè)換客,以物易物。由于平臺(tái)只面向校內(nèi),所以不提供交易風(fēng)險(xiǎn)擔(dān)保,平臺(tái)只是提供給買家和賣家一個(gè)相互了解渠道。

1 系統(tǒng)架構(gòu)設(shè)計(jì)

校園購物平臺(tái)有服務(wù)端及客戶端,客戶端主要用到Android技術(shù)。

1.1 Android客戶端設(shè)計(jì)

客戶端使用Android技術(shù)[1],借助該技術(shù)可以將客戶端系統(tǒng)很好的移植到手機(jī)上,使用戶可以隨時(shí)隨地登錄到此系統(tǒng)上??蛻舳隧撁嬷饕伤^的活動(dòng)(Activity)組成,每個(gè)活動(dòng)之間由Internet負(fù)責(zé)頁面的跳轉(zhuǎn)及頁面之間的數(shù)據(jù)傳遞。

1.2 系統(tǒng)服務(wù)器端架構(gòu)設(shè)計(jì)

校園購物平臺(tái)的服務(wù)端采用MVC分層設(shè)計(jì)思想,將各個(gè)層面互相獨(dú)立,便于系統(tǒng)的開發(fā)以及后期的維護(hù)。本系統(tǒng)采用SSH(Structs+Spring+Hibernate)框架來實(shí)現(xiàn),整個(gè)服務(wù)器端擴(kuò)展性強(qiáng),可維護(hù)性高。數(shù)據(jù)庫通過利用Hibernate的數(shù)據(jù)庫映射工具完成從表到Java類的映射,通過Hibernate對(duì)該對(duì)象完成持久化操作;然后通過使用Spring的控制反轉(zhuǎn)機(jī)制(IoC)將對(duì)象之間的依賴關(guān)系交由Spring進(jìn)行控制,從而避免硬編碼所造成的過度程序耦合[2]。

表示層,負(fù)責(zé)邏輯層與表現(xiàn)層的交互。調(diào)用業(yè)務(wù)邏輯層,并將業(yè)務(wù)數(shù)據(jù)返回給表現(xiàn)層作組織表現(xiàn),該部分采用Structs框架的Action處理??刂茖迂?fù)責(zé)攔截所有Http請(qǐng)求,然后根據(jù)用戶請(qǐng)求決定是否需要調(diào)用業(yè)務(wù)邏輯控制器,如果需要?jiǎng)t請(qǐng)求轉(zhuǎn)發(fā)給Action處理,否則直接轉(zhuǎn)向請(qǐng)求的JSP頁面。業(yè)務(wù)控制層是整個(gè)系統(tǒng)的核心部分,它與實(shí)現(xiàn)的業(yè)務(wù)功能緊密聯(lián)系,其中的各個(gè)功能模塊各自實(shí)現(xiàn)不同的業(yè)務(wù)功能[3]。

業(yè)務(wù)邏輯層,負(fù)責(zé)實(shí)現(xiàn)業(yè)務(wù)邏輯,該層以DAO為基礎(chǔ),通過對(duì)DAO組件的模式包裝,實(shí)現(xiàn)業(yè)務(wù)層組件與具體的數(shù)據(jù)庫訪問技術(shù)分離,使所有的數(shù)據(jù)庫訪問依賴于DAO組件,這樣就可以把邏輯層與DAO層分開,達(dá)到松散耦合的效果[4],完成系統(tǒng)所要求的業(yè)務(wù)邏輯。

數(shù)據(jù)持久層,負(fù)責(zé)與持久化對(duì)象交互。該層封裝了數(shù)據(jù)的增、刪、改、查的操作。

持久化對(duì)象,通過實(shí)體關(guān)系映射工具將關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)映射成對(duì)象,很方便地實(shí)現(xiàn)以面向?qū)ο蠓绞讲僮鲾?shù)據(jù)庫,該系統(tǒng)采用Hibernate作為框架。Spring框架貫穿整個(gè)中間層,將Web層、業(yè)務(wù)邏輯層、DAO層和持久化對(duì)象無縫整合,其數(shù)據(jù)服務(wù)層用來存放數(shù)據(jù)。

2.2 服務(wù)器端實(shí)現(xiàn)

2.3 運(yùn)行效果圖

3 結(jié)語

本文設(shè)計(jì)并實(shí)現(xiàn)了基于Android平臺(tái)的校園購物系統(tǒng)。系統(tǒng)在實(shí)現(xiàn)過程中結(jié)合了軟件工程理論和先進(jìn)的智能手機(jī)應(yīng)用,開發(fā)出符合手機(jī)終端用戶行為習(xí)慣的系統(tǒng),以方便自己的生活和學(xué)習(xí),具有很大的實(shí)用價(jià)值。

參考文獻(xiàn):

[1][英]梅爾.Android高級(jí)編程[M].王鵬杰,霍建同譯.北京:清華大學(xué)出版社,2010.

[2]李剛.整合Struts+ Hibernate+ Spring應(yīng)用開發(fā)詳解[M].北京:清華大學(xué)出版社,2007.

[3]余志龍.GoogleAndroidSDK開發(fā)范例大全[M].北京:人民郵電出版社,2O10.

[4]孫鑫.Struts2深入詳解[M].北京:電子工業(yè)出版社,2008.

[5]李寧.人人都玩開心網(wǎng):gxtJS+Android+SSH整合開發(fā)Web與移動(dòng)SNS[M].北京:電子工業(yè)出版社,2010.

[6]徐玲,蔣欣志,張杰.手機(jī)二維碼識(shí)別系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2012,32(5):1474-1476.

篇4

關(guān)鍵詞:Spring Struts Hibernate 教師科研管理系統(tǒng)

中圖分類號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2016)02(a)-0010-02

針對(duì)教學(xué)科研工作中存在的以下問題:更新不及時(shí)、新舊信息錯(cuò)雜、獲取信息復(fù)雜,相關(guān)管理人員管理工作繁重等,筆者進(jìn)行了教學(xué)科研Web系統(tǒng)的開發(fā)。以期解決現(xiàn)行管理過程中存在的問題,使對(duì)教學(xué)科研活動(dòng)的管理有序有效地進(jìn)行,并提供多種查詢統(tǒng)計(jì)功能和教師業(yè)績(jī)點(diǎn)計(jì)算功能,進(jìn)一步減輕管理員的工作強(qiáng)度,同時(shí)實(shí)行多權(quán)限設(shè)置,增加權(quán)限賦予功能,使得查詢統(tǒng)計(jì)功能在擁有安全性的同時(shí),加強(qiáng)了靈活性[2]。

該論文將會(huì)講述運(yùn)用Web應(yīng)用技術(shù),采用目前較流行的Spring+Struts+Hibernate開發(fā)框架,實(shí)現(xiàn)教學(xué)科研管理系統(tǒng),其中詳細(xì)講述管理員功能模塊的設(shè)計(jì)與實(shí)現(xiàn)[3]。

1 系統(tǒng)功能分析

該文主要是對(duì)教師科研信息管理系統(tǒng)中管理員模塊的設(shè)計(jì),該模塊主要包括資料上傳、公告、授權(quán)功能、審批管理、人員管理和業(yè)績(jī)點(diǎn)計(jì)算等功能。主要的使用者是管理員。

1.1 通知功能

在管理員登錄之后,進(jìn)入管理員界面。在此頁面,可以進(jìn)入通知頁面,其中包括兩部分,通知和通知管理。

管理員可以新建通知,對(duì)新建的通知,管理員可以,或存為草稿日后,或取消。對(duì)于存為草稿的通知,管理員可以修改后,或修改后存為草稿,或取消,或直接刪除。通知之后,系統(tǒng)會(huì)發(fā)送郵件通知所有用戶,通知,主要便于及時(shí)查看。

提交完成之后的通知?jiǎng)t可通過通知管理功能進(jìn)行管理,同樣可以對(duì)已的新聞進(jìn)行刪除或修改操作,同時(shí)考慮到的通知可能會(huì)很多,在界面中增加了分頁的功能。對(duì)于修改已的通知,系統(tǒng)將會(huì)發(fā)郵件通知用戶通知已經(jīng)改變,并將該通知置頂。

1.2 審批管理功能

審批管理功能主要分為,審批上傳資料和管理上傳資料兩塊,是對(duì)用戶上傳的論文、著作、科研項(xiàng)目、專利發(fā)明、學(xué)術(shù)活動(dòng)及學(xué)院相關(guān)資料等進(jìn)行審批和統(tǒng)一管理。鑒于在功能模塊上的類似,在此,以審批論文信息為例對(duì)審批功能的實(shí)現(xiàn)進(jìn)行說明。

點(diǎn)擊審批論文信息,進(jìn)入待審批列表界面,表中將羅列論文的一些基本信息。點(diǎn)擊論文題目,打開該論文的相關(guān)信息,進(jìn)行審批,管理員沒有權(quán)力更改用戶提交的論文信息,如果這些信息不符合要求,管理員則可以拒絕,并填寫審批不通過的理由,同時(shí)填寫自己郵箱密碼,系統(tǒng)將通過該管理員的郵箱向用戶發(fā)出郵件,通知用戶其論文未通過審批,并要求其進(jìn)行修改,再提交。同樣,若審批通過,管理員也會(huì)通過系統(tǒng)發(fā)郵件給用戶,通知他論文審批通過。

在管理上傳資料中,主要是對(duì)于那些超過了保存期限的資料,進(jìn)行備份或刪除,然后將其移出服務(wù)器。

1.3 人員管理功能

人員管理功能是對(duì)系統(tǒng)用戶的基本信息的管理,也包括兩個(gè)功能,人員添加和人員修改。人員添加,主要是用于添加新用戶。考慮到本系統(tǒng)是內(nèi)部服務(wù)系統(tǒng),因此不通過用戶自行注冊(cè),而是通過管理員添加來完成用戶添加。管理員需填寫用戶的基本信息,并將用戶的登錄賬號(hào)告知用戶。

考慮到信息的公正性,用戶不具備對(duì)其基本信息的改動(dòng)權(quán)限,因此如果基本信息改動(dòng),用戶應(yīng)及時(shí)通知管理員,進(jìn)行修改。管理員在人員管理中可以進(jìn)行用戶資料的修改,同時(shí)也可將離校教師的賬戶刪除。

1.4 授權(quán)權(quán)限功能

授權(quán)權(quán)限是對(duì)用戶查看統(tǒng)計(jì)信息權(quán)限的管理。管理員可根據(jù)用戶的申請(qǐng),賦予用戶查看統(tǒng)計(jì)信息的權(quán)限,并適時(shí)關(guān)閉其權(quán)限。

管理員在授予權(quán)限頁面中賦予用戶權(quán)限,可一次賦予一個(gè)或多個(gè)用戶,如果拒絕用戶的權(quán)限申請(qǐng),需填寫拒絕理由。

管理員通過權(quán)限管理,可取消用戶的權(quán)限。在用戶的權(quán)限到期之后,管理員可取消用戶的查看統(tǒng)計(jì)權(quán)限。

1.5 業(yè)績(jī)點(diǎn)計(jì)算功能

業(yè)績(jī)點(diǎn)計(jì)算主要是將每個(gè)用戶的總的業(yè)績(jī)點(diǎn)統(tǒng)計(jì)出來,羅列在一張表中,管理員可以通過備份,將上一年的業(yè)績(jī)點(diǎn)導(dǎo)出,然后存放在服務(wù)器上,同時(shí)通過點(diǎn)擊每個(gè)用戶的工號(hào),可查看每個(gè)用戶具體的業(yè)績(jī)點(diǎn)情況。

1.6 資料上傳功能

資料上傳功能主要是對(duì)課表信息和教材信息的導(dǎo)入和管理。管理員首先將規(guī)定列名的Excel表上傳到服務(wù)器,然后再通過資料上傳界面中的導(dǎo)入功能,將該表導(dǎo)入到數(shù)據(jù)庫中,從而實(shí)現(xiàn)課表信息和教材信息的導(dǎo)入[1]。

同時(shí),管理員可以通過上傳資料中的管理功能實(shí)現(xiàn)對(duì)數(shù)據(jù)庫中的課程信息和教材信息的修改或刪除。

2 系統(tǒng)實(shí)現(xiàn)

在此,按照系統(tǒng)架構(gòu)逐步闡述管理員功能的主要實(shí)現(xiàn)框架。該系統(tǒng)主要分為3個(gè)層次,表現(xiàn)層、中間層及數(shù)據(jù)庫層[5]。

2.1 表現(xiàn)層

表現(xiàn)層提供與用戶交互的界面,用Web頁面實(shí)現(xiàn)。主要使用JSP技術(shù)實(shí)現(xiàn),在個(gè)別靜態(tài)頁面中,使用HTML靜態(tài)技術(shù)實(shí)現(xiàn)[6]。

2.2 中間層

該系統(tǒng)又將中間層劃分為Web層、Service層、DAO層和common層。

(1)Web層。

該層包含了Formbean和Action兩部分,同時(shí)也通過這兩部分分別聯(lián)系表現(xiàn)層和業(yè)務(wù)邏輯層,F(xiàn)ormbean對(duì)應(yīng)了JSP頁面中的內(nèi)容,而Action則調(diào)用了業(yè)務(wù)邏輯層中的內(nèi)容。

(2)Service層。

在該系統(tǒng)中,Service層完成了業(yè)務(wù)邏輯層的工作,其中主要是對(duì)Hibernate所封裝的對(duì)數(shù)據(jù)庫的操作的調(diào)用。例如,

public News getNewsByNewsId(int newsId) {

// TODO Auto-generated method stub

Validate.notNull(newsId, "when get pmrReg, the pmrReg id must not null...");

News news = null;

try {

news = newsDAO.getObject(newsId);

} catch (ObjectNotFoundException e) {

eventLogger.info("the dailyReport[" + newsId + " does not exit...",e);

throw new ServiceException("通過主鍵獲取日?qǐng)?bào)錯(cuò)誤");

}

return news;

}

(3)DAO層。

該層主要包括DAO層和PO層,其中DAO層的類都繼承了common層中封裝了Hibernate對(duì)數(shù)據(jù)庫的操作的類CommonDAOHibernate.java,而不是直接封裝Hibernate對(duì)數(shù)據(jù)庫的訪問。

PO,持久化對(duì)象,其中完全采用普通Java對(duì)象作為持久化對(duì)象使用,也是將數(shù)據(jù)庫中的對(duì)象對(duì)應(yīng)到Java對(duì)象,從而使對(duì)數(shù)據(jù)庫的操作更加簡(jiǎn)單。大家可以利用MyEclipse自動(dòng)生成POJO及其對(duì)應(yīng)的配置文件。

(4)common層。

該層存放了公用的代碼,包括對(duì)數(shù)據(jù)的增、刪、查、改操作的封裝,異常處理,日志處理,數(shù)據(jù)類型的轉(zhuǎn)換,時(shí)間的處理,文件上傳與發(fā)送郵件的方法,基礎(chǔ)Action類,以及系統(tǒng)要使用的常量。其中,對(duì)數(shù)據(jù)庫的操作的封裝主要是由MyEclipse中的方法自動(dòng)生成。

2.3 數(shù)據(jù)庫層

數(shù)據(jù)層負(fù)責(zé)存放和管理應(yīng)用的持久性業(yè)務(wù)數(shù)據(jù)。Hibernate提供了從映射文件到數(shù)據(jù)庫Schema的轉(zhuǎn)換工具,即hbm2ddl[7]。

執(zhí)行該任務(wù)的Java類net.Sf.Hibernate.tool.hbm2bbl.SchemaExportTask。在該系統(tǒng)中是應(yīng)用MyEclipse中的自動(dòng)轉(zhuǎn)換工具實(shí)現(xiàn)數(shù)據(jù)庫與持久性數(shù)據(jù)的對(duì)應(yīng)。

3 結(jié)語

該系統(tǒng)結(jié)構(gòu)清晰,注重功能的功能性和使用方便性。根據(jù)各功能的特點(diǎn),將各功能的流程考慮周到,流程設(shè)計(jì)完整。用戶如有需要,可以申請(qǐng)查看統(tǒng)計(jì)權(quán)限,系統(tǒng)具有一定的靈活性。同時(shí)應(yīng)用了SSH架構(gòu),在簡(jiǎn)化代碼的同時(shí),使系統(tǒng)具有較強(qiáng)的可擴(kuò)展性。

參考文獻(xiàn)

[1] 張芹.關(guān)于軟件開發(fā)中數(shù)據(jù)庫設(shè)計(jì)相關(guān)問題的探討[J].信息通信,2015(12):166-167.

[2] 宋陽.新時(shí)期高??蒲行畔⒒ㄔO(shè)工作思考[J].中國(guó)高校科技,2014(7):71-73.

[3] 陳亞輝,繆勇.Struts+Spring+Hibernate框架技術(shù)與項(xiàng)目實(shí)戰(zhàn)[M].北京:清華大學(xué)出版社,2012.

[4] 傅偉,高海俠,涂剛,等.基于J2ME-J2EE的高??蒲行畔⒐芾硐到y(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)應(yīng)用,2011(7):76-80.

[5] 王進(jìn).B/S模式下的三層架構(gòu)模式[J].軟件導(dǎo)刊,2011(3):30-31.

篇5

【關(guān)鍵詞】Struts2;Hibernate;辦公自動(dòng)化

1.介紹

目前,我們處于一個(gè)信息化和大數(shù)據(jù)的時(shí)代,各行各業(yè)都需要對(duì)大量信息進(jìn)行處理。在日常辦公中,人們開始面對(duì)越來越多的復(fù)雜與繁冗的數(shù)據(jù),傳統(tǒng)的辦公方式逐漸無法滿足人類和社會(huì)發(fā)展的需求。計(jì)算機(jī)技術(shù)的迅猛發(fā)展,使其在辦公室中的應(yīng)用越來越廣泛,辦公自動(dòng)化開始成為主流的辦公方式。國(guó)務(wù)院電子振興辦辦公自動(dòng)化專家會(huì)議對(duì)辦公自動(dòng)化作了如下定義:辦公自動(dòng)化是利用先進(jìn)的科學(xué)技術(shù),不斷使人的辦公業(yè)務(wù)活動(dòng)物化于人以外的各種設(shè)備中,并由這些設(shè)備與辦公室人員構(gòu)成服務(wù)于某種目標(biāo)的人機(jī)信息處理系統(tǒng)。如今,辦公自動(dòng)化系統(tǒng)已經(jīng)逐漸進(jìn)入各個(gè)行業(yè),其便利的信息交流方式,較高的辦公工作效率受到了人們的歡迎[1]。

2.系統(tǒng)設(shè)計(jì)

2.1 系統(tǒng)目標(biāo)

本文從辦公自動(dòng)化系統(tǒng)的基礎(chǔ)要求出發(fā),將辦公的方便性和高效性考慮入內(nèi),達(dá)到降低系統(tǒng)的耦合性的目標(biāo),并實(shí)現(xiàn)OA辦公自動(dòng)化系統(tǒng)的主要功能模塊的操作。這樣可以保證系統(tǒng)實(shí)現(xiàn)后的高效性、高擴(kuò)展性和靈活性,達(dá)到協(xié)助工作人員處理日常工作的目標(biāo),從而減少了管理的繁瑣,實(shí)現(xiàn)辦公自動(dòng)化和信息化。

系統(tǒng)采用BS構(gòu)架模式并結(jié)合時(shí)下最流行的SSH框架,利用因特網(wǎng)信息交流的方便性與高效性,合理設(shè)計(jì)與規(guī)劃,最終實(shí)現(xiàn)員工信息管理、在線交流信息管理、個(gè)人公開文件夾管理、會(huì)議安排管理等典型辦公自動(dòng)化功能。

2.2 相關(guān)框架介紹

1)Struts2框架介紹:Struts2框架是在Struts1和WebWork技術(shù)基礎(chǔ)上進(jìn)行合并而產(chǎn)生的。Struts2以WebWork為核心,采用攔截器的機(jī)制實(shí)現(xiàn)用戶的請(qǐng)求。其主要分為模型、視圖和控制器三部分(即MVC),主要的設(shè)計(jì)理念是通過控制器解除表現(xiàn)邏輯和業(yè)務(wù)邏輯的耦合性,以提高系統(tǒng)的可維護(hù)性、可擴(kuò)展性和重用性。

2)Hibernate框架介紹:Hibernate是一個(gè)開源的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,方便開發(fā)人員開發(fā),使其可以隨心所欲的使用對(duì)象編程思維來操縱數(shù)據(jù)庫,從而提高開發(fā)效率[2]。Hibernate的HQL查詢數(shù)據(jù)語言是根據(jù)SQL面向?qū)ο蟮淖钚〉臄U(kuò)展來設(shè)計(jì)的,在對(duì)象和關(guān)系領(lǐng)域間提供了一個(gè)交互的橋。

3)Spring框架介紹:spring是為了解決應(yīng)用程序開發(fā)復(fù)雜性而創(chuàng)建的一個(gè)開源框架。其主要優(yōu)勢(shì)之一是分層架構(gòu),分層架構(gòu)方便開發(fā)者選擇組件。Spring提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯和系統(tǒng)級(jí)服務(wù)進(jìn)行內(nèi)聚性開發(fā)。其簡(jiǎn)單性、可測(cè)試性和松耦合性使得應(yīng)用程序受益。

2.3 功能模塊劃分

經(jīng)過我們對(duì)辦公單位實(shí)際情況考察并認(rèn)真分析后,本系統(tǒng)包括的用戶有普通員工、部門領(lǐng)導(dǎo)和系統(tǒng)管理員三個(gè)角色,其分別具有不同的權(quán)限。普通員工具有個(gè)人信息的修改功能,可以查看部門通訊錄,管理個(gè)人在線信息,并可以查看個(gè)人日程安排和委托他人事項(xiàng)。部門領(lǐng)導(dǎo)不僅具有普通員工所有功能,還可以安排會(huì)議,查看會(huì)議記錄,并安排所在部門員工的待辦事項(xiàng)。系統(tǒng)管理員的權(quán)限最高,主要負(fù)責(zé)管理通知通告,具有對(duì)部門信息、員工信息和角色信息的增刪查改的功能。該OA辦公自動(dòng)化系統(tǒng)功能體系結(jié)構(gòu)如圖2.1所示:

2.4 數(shù)據(jù)庫設(shè)計(jì)

OA辦公自動(dòng)化系統(tǒng)的設(shè)計(jì)離不開數(shù)據(jù)庫的設(shè)計(jì),而該系統(tǒng)在設(shè)計(jì)過程中遇到的主要難點(diǎn)也是數(shù)據(jù)庫設(shè)計(jì)。數(shù)據(jù)庫的設(shè)計(jì)在整個(gè)系統(tǒng)設(shè)計(jì)過程當(dāng)中扮演著舉足輕重的角色,一個(gè)好的數(shù)據(jù)庫能對(duì)系統(tǒng)的實(shí)現(xiàn)起到事半功倍的作用。系統(tǒng)在數(shù)據(jù)庫設(shè)計(jì)中需要充分考慮數(shù)據(jù)之間聯(lián)系,保證數(shù)據(jù)庫設(shè)計(jì)的規(guī)范化,從而在系統(tǒng)實(shí)現(xiàn)和之后的維護(hù)過程中不會(huì)發(fā)生插入、刪除和更新異常,使得后續(xù)工作高效的進(jìn)行。本系統(tǒng)主要數(shù)據(jù)表列舉如下:

該系統(tǒng)數(shù)據(jù)庫管理系統(tǒng)采用MySQL,其開源性、多線程性和健壯性深受人們的歡迎[3]。數(shù)據(jù)庫部署于后臺(tái)服務(wù)器中,只有系統(tǒng)管理人員才能通過一定的認(rèn)證訪問數(shù)據(jù)庫表中的數(shù)據(jù)。除此以外,系統(tǒng)不提供任何訪問數(shù)據(jù)庫的接口。

3.系統(tǒng)實(shí)現(xiàn)

3.1 關(guān)鍵模塊實(shí)現(xiàn)

在OA辦公自動(dòng)化系統(tǒng)實(shí)現(xiàn)過程中,在線信息和工作安排兩個(gè)模塊相對(duì)于其它較為復(fù)雜,同時(shí)也耗費(fèi)了大量的精力和時(shí)間。在此將這兩個(gè)模塊的實(shí)現(xiàn)過程詳細(xì)介紹如下:

a)在線信息管理

在線信息模塊相對(duì)復(fù)雜主要是因?yàn)樵谙到y(tǒng)的首頁需要?jiǎng)討B(tài)地顯示用戶的未讀信息數(shù)目,需要用到局部動(dòng)態(tài)刷新技術(shù)——Ajax技術(shù)[4]。同時(shí),用戶對(duì)在線信息模塊的增、刪、查、改操作相對(duì)于其它模塊也更多,因此對(duì)我們的數(shù)據(jù)庫設(shè)計(jì)提出了更高的要求,這也增加了該模塊的復(fù)雜度。在數(shù)據(jù)庫表的設(shè)計(jì)過程中,難度主要集中在對(duì)于已讀信息、未讀信息、已發(fā)信息、草稿等的表示和狀態(tài)轉(zhuǎn)換的設(shè)計(jì),需要設(shè)計(jì)人員極大的耐心。

b)工作安排管理

工作安排管理模塊涉及到員工之間相互指定待辦事項(xiàng),而該功能又需得到相互間的授權(quán),使其業(yè)務(wù)邏輯較為復(fù)雜。同時(shí),待辦事項(xiàng)的狀態(tài)最終會(huì)從未完成轉(zhuǎn)換為已完成,這也增加了該模塊的難度。

授權(quán)的業(yè)務(wù)流程也較為復(fù)雜,例如員工A想向員工B指定代辦任務(wù),員工A必須首先得到員工B的授權(quán)。與此同時(shí),在得到B的授權(quán)后,A可以向B指定代辦任務(wù),B也可隨時(shí)解除授權(quán)。因此,在設(shè)計(jì)該模塊的數(shù)據(jù)庫表時(shí)需要考慮復(fù)雜的邏輯關(guān)系,對(duì)數(shù)據(jù)庫的設(shè)計(jì)能力提出了很高的要求。此處涉及到了user表、authorization表以及assignment表大量的增、刪、查、改的操作,工作量較大。

3.2 技術(shù)難點(diǎn)

在文件管理功能模塊中,維護(hù)與管理文件上傳和下載相對(duì)于其它操作較為復(fù)雜,下載模塊需要進(jìn)行較為復(fù)雜的struts配置,同時(shí)上傳和下載時(shí)還要進(jìn)行編碼轉(zhuǎn)換。

針對(duì)文件夾/文件的操作主要是增加文件夾、上傳文件、更改文件名、刪除文件/文件夾、分享文件夾、獲得全部文件夾。這部分的難度主要集中在SQL語句,需要有足夠耐心和細(xì)心。

對(duì)于上傳文件這塊,其struts的配置文件相對(duì)簡(jiǎn)單。而文件下載模塊struts比較復(fù)雜,其主要配置文件如下:

application/octet-stream;charset=utf-8

此處將下載文件contentType統(tǒng)一指定為application/octet-stream,同時(shí)將charset的值設(shè)置為utf-8

attachment;filename=”${name}”

attachment是告訴瀏覽器下載該文件,而filename則是在action中接收該文件的文件名,以便在用戶保存該文件時(shí)使用該文件名。

文件下載模塊的action部分,其主要步驟如下:

1)定義所需的變量;

2)創(chuàng)建需要下載的文件

File file=new File(“保存文件的路徑"+dowFileName)

3)將下載的字節(jié)流寫入剛剛創(chuàng)建的文件

try{

//從file文件中獲得輸入字節(jié)流

fdlInputStream=new FileInput-Stream(file);

//下載時(shí)指定的文件名字用iso8859 -1編碼

name=new String(dowFileName.getBytes(),"iso8859-1");

}

catch(FileNotFoundException e){

System.out.println(“指定文件找不到”);

e.printStackTrace();“

}

文件上傳模塊action部分,主要步驟如下:

1)聲明所需的變量,其中許多變量是固定名稱;

2)創(chuàng)建新的文件,保存上傳的文件

File fileTo=new File("上傳文件的保存路徑"+uploadFileName);

3)將頁面接收到的文件寫入剛剛創(chuàng)建的文件中去

TestCopy.copy(upload,fileTo)

4.結(jié)束語

本文結(jié)合現(xiàn)代辦公需求,依賴當(dāng)今流行的SSH框架整合技術(shù),具有良好的分層體系,使得該系統(tǒng)具有良好的擴(kuò)展性,可維護(hù)性和穩(wěn)定性。經(jīng)過后期的內(nèi)部測(cè)試,該系統(tǒng)很大程度上提高了辦公效率,節(jié)約了成本和資源,其高效數(shù)據(jù)處理能力在一定程度推進(jìn)了企業(yè)資源計(jì)劃(ERP)的實(shí)現(xiàn),值得繼續(xù)推廣和使用。

參考文獻(xiàn)

[1]孫敏.辦公自動(dòng)化[M].北京:北京理工大學(xué)出版社,2010.

[2]李剛.輕量級(jí)JavaEE企業(yè)應(yīng)用實(shí)戰(zhàn)(第3版)-Struts2 +Spring3+Hibernate整合開發(fā)[M].北京:電子工業(yè)出版社,2012.

[3]周靖,許青松譯.Leon Atkinson.MySQL核心編程:高級(jí)開發(fā)者者指南[M].北京:清華大學(xué)出版社,2003.

[4]王莉軍.在Web2.0設(shè)計(jì)模式下利用Ajax技術(shù)實(shí)現(xiàn)網(wǎng)頁數(shù)據(jù)動(dòng)態(tài)更新[J].渤海大學(xué)學(xué)報(bào)(自然科學(xué)版),2008,3:29.

作者簡(jiǎn)介:

篇6

 

1 相關(guān)概念 

 

1.1 Struts 2框架 

Struts 2是Struts的下一代產(chǎn)品,是在WebWork基礎(chǔ)上發(fā)展起來的。Struts 2的工作流程為[1]:當(dāng)用戶發(fā)送請(qǐng)求時(shí),由核心控制器FilterDispatcher接受請(qǐng)求然后決定調(diào)用適當(dāng)?shù)腶ction,同時(shí),WebWork的攔截器鏈自動(dòng)對(duì)請(qǐng)求應(yīng)用常用的功能,如工作流、驗(yàn)證、文件上傳等功能。然后回調(diào)Action的execute方法,execute方法該執(zhí)行諸如存儲(chǔ)數(shù)據(jù)、檢索數(shù)據(jù)之類的數(shù)據(jù)庫相關(guān)操作,由于Action只是一個(gè)控制器,因此,execute方法會(huì)調(diào)用業(yè)務(wù)邏輯組件處理用戶的請(qǐng)求,最后Action的execute方法的執(zhí)行結(jié)果將被輸出到瀏覽器中。 

1.2 Hibernate框架 

Hibernate是一個(gè)面向Java環(huán)境的O/R mapping工具,通過對(duì)JDBC的封裝,屏蔽了底層的數(shù)據(jù)庫操作,把對(duì)象模型表示的對(duì)象映射到基本SQL的關(guān)系模型數(shù)據(jù)結(jié)構(gòu)中,并且使用數(shù)據(jù)庫和配置文件來為Web應(yīng)用程序提供JSP持久化服務(wù)[2]。 

1.3 Spring框架 

Spring是Java EE領(lǐng)域一個(gè)非常優(yōu)秀的框架,它提供了一種輕量級(jí)的IOC容器,該容器負(fù)責(zé)創(chuàng)建、管理應(yīng)用組件。從最前端的控制器,到中間層的業(yè)務(wù)邏輯組件,以及底層的DAO組件,都處于Spring容器的管理之下,以一種低耦合的方式運(yùn)行[3]。 

 

2 基于S2SH框架Ajax應(yīng)用 

 

本節(jié)將以注冊(cè)表單中驗(yàn)證用戶名是否可用為例,對(duì)S2SH框架下Ajax的使用方法進(jìn)行探討。 

2.1 環(huán)境搭建 

本文使用Eclipse 6.6開發(fā)平臺(tái)創(chuàng)建Web項(xiàng)目,然后依次為項(xiàng)目添加Spring 2.0和Hibernate 3.1支持,由于Eclipse 6.6中沒有提供通過向?qū)砑覵truts 2支持的方式,因此需要手工將struts2-core-2.0.8.jar、xwork-2.0.3.jar和ognl-2.6.11.jar等必要的jar包復(fù)制到項(xiàng)目的WEB-INF/lib目錄下。 

2.2 創(chuàng)建實(shí)體類和映射文件 

可以使用MyEclipse工具自動(dòng)生成數(shù)據(jù)表account的實(shí)體類Account.java和映射文件Account.hbm.xml,并將這些文件存放在com.test.entity包下。 

2.3 業(yè)務(wù)邏輯層開發(fā) 

1)業(yè)務(wù)層接口 

編寫接口文件UserBiz.java,將其放在com.test.servcice包下。在接口中聲明用戶名驗(yàn)證方法。 

public interface UserBiz { 

public boolean checkUser(String username); 

2)業(yè)務(wù)層接口實(shí)現(xiàn)類 

編寫業(yè)務(wù)層接口UserBiz的實(shí)現(xiàn)類UserBizImpl.java,將其com.test.servcice.impl包下。 

public class UserBizImpl implements UserBiz { 

private UserDAO userDAO;

public void setUserDAO(UserDAO userDAO) { 

this.userDAO = userDAO; } 

public boolean checkUser(String username) { 

return userDAO.isExist(username); } } 

2.4 數(shù)據(jù)訪問層開發(fā) 

1)數(shù)據(jù)訪問層接口 

編寫數(shù)據(jù)訪問層接口類UserDAO.java,將其放在com.test.dao包下,在接口中聲明用戶名驗(yàn)證方法。 

public interface UserDAO { 

public boolean isExist(String username); 

2)編寫數(shù)據(jù)訪問層接口UserDAO的實(shí)現(xiàn)類UserDAOImpl.java,并放在com.test.dao.impl包下。 

public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {

public boolean isExist(String username) { 

List list = getHibernateTemplate().find("from Account ac where ac.name = ?" , username); 

if (list != null && list.size() >= 1){ 

return true; 

}else{ 

return false; } } } 

2.5 Spring與Hibernate、Struts 2整合 

給項(xiàng)目添加完Spring、Hibernate和Struts 2支持后,為了能將三者整合起來,還需要對(duì)相關(guān)的配置文件進(jìn)行設(shè)置,主要的配置文件包括:applicationContext.xml、struts.xml和web.xml。 

1)Spring與Hibernate整合 

由于篇幅,這里省略了數(shù)據(jù)源和sessionFactory的配置代碼,在applicationContext.xml文件中完成userDAO Bean的定義,并將sessionFactory注入到UserDAO中,配置如下: 

name="sessionFactory"> 

接著完成userBiz Bean的定義,并將userDAO注入到UserBiz中,配置如下: 

 

2)Struts 2與Spring整合 

為了讓系統(tǒng)中Struts 2框架起作用,必須在web.xml中配置Struts 2的核心過濾器,該核心過濾器負(fù)責(zé)攔截所有用戶的請(qǐng)求,代碼如下: 

strutsorg.apache.struts2.dispatcher.FilterDispatcherstruts/* 

Struts 2與Spring整合的關(guān)鍵在于,要讓Struts 2的Action可以訪問Spring容器中的業(yè)務(wù)邏輯組件。有兩種整合策略,第一種策略是將Aciton實(shí)例的生成、管理交給Spring容器來負(fù)責(zé);第二種策略是使用Spring插件的自動(dòng)裝配機(jī)制,即當(dāng)Spring插件創(chuàng)建Action實(shí)例后,立即將Spring容器中對(duì)應(yīng)的業(yè)務(wù)邏輯組件注入到Action實(shí)例。這里選擇后一種策略,因此需要安裝Struts 2的Spring插件,即將struts2-spring-plugin-2.0.8.jar文件復(fù)制到項(xiàng)目的WEB-INF/lib目錄下,同時(shí)由于Spring框架還依賴于commons-logging.jar文件,該文件也需要復(fù)制到WEB-INF/lib目錄下。此外,在使用Spring容器前,必須先進(jìn)行Spring容器的初始化,可以使用ContextLoaderListener類,該類會(huì)在Web應(yīng)用程序啟動(dòng)時(shí)自動(dòng)加載WEB-INF下的applicationContext.xml配置文件,以創(chuàng)建Spring容器。使用ContextLoaderListener類時(shí)只需在web.xml文件中添加如下代碼: 

 org.springframework.web.context.ContextLoaderListener 

并在web.xml文件中指定spring的應(yīng)用上下文路徑,配置如下: 

contextConfigLocation 

classpath:applicationContext.xml 

為了將Struts 2的Action交由Spring處理,需要在struts.xml文件中添加一個(gè)常量,配置如下: 

 

這樣,所有的Action無需在applicationContext.xml中顯式配置依賴的業(yè)務(wù)邏輯組件,只要為Action提供一個(gè)setXxx的方法,Spring可將名為xxx的Bean依賴注入給該Action組件。 

2.6 使用Struts 2的JSON插件實(shí)現(xiàn)用戶名Ajax驗(yàn)證 

JSON是JavaScript對(duì)象符號(hào)的簡(jiǎn)稱,是一種輕量級(jí)的數(shù)據(jù)交換格式。JSON插件提供了一種名為json的ResultType,如果給某個(gè)Action指定了一個(gè)類型為json的Result,則該Result無需映射到任何視圖資源,而是由JSON插件負(fù)責(zé)將Action中通過屬性設(shè)置的狀態(tài)信息序列化成JSON格式,并返回給調(diào)用頁面,從而完成Ajax交互。為了使用JSON插件,需要將jsonplugin-0.7.jar文件復(fù)制到項(xiàng)目WEB-INF/lib目錄下。 

以注冊(cè)表單中驗(yàn)證用戶輸入的用戶名是否可用為例,當(dāng)用戶輸完用戶名后,系統(tǒng)應(yīng)立即提示該用戶名是否可用,可以在用戶名文本域失去焦點(diǎn)時(shí),立即發(fā)送一個(gè)異步請(qǐng)求,將輸入的用戶名作為參數(shù)發(fā)送到服務(wù)器進(jìn)行判斷。注冊(cè)表單Register.jsp中主要的代碼如下所示: 

 

上述代碼中,validateName是一個(gè)JavaScript函數(shù),用于向服務(wù)器端發(fā)送異步請(qǐng)求,代碼如下所示: 

function validateName(){ 

var url = 'validateName.action'; 

var params = 'username='+document.getElementById('username').value; 

var myAjax = new Ajax.Request(url,{method:'post', parameters:params, 

onComplete: processResponse,asynchronous:true }); } 

每當(dāng)創(chuàng)建Ajax.Request對(duì)象時(shí),就會(huì)發(fā)送一次Ajax請(qǐng)求。其中,url表示請(qǐng)求的地址,method表示發(fā)送請(qǐng)求的方式,parameters表示請(qǐng)求的參數(shù),onComplete用于指定回調(diào)函數(shù),asynchronous表示是否異步發(fā)送請(qǐng)求。為了使用Ajax.Request對(duì)象,需要在注冊(cè)表單中導(dǎo)入prototype-1.4.0.js函數(shù)庫,通過該函數(shù)庫可以更加簡(jiǎn)單地訪問頁面中的DOM節(jié)點(diǎn),從而更好、更簡(jiǎn)單地實(shí)現(xiàn)Ajax交互。頁面中導(dǎo)入該函數(shù)庫的代碼如下所示: 

 

回調(diào)函數(shù)processResponse代碼如下所示: 

function processResponse(request){ 

$("message").innerHTML = request.responseText.parseJSON().message; } 

上述代碼中使用了字符串的parseJSON()方法,使用該方法時(shí)需要在注冊(cè)表單中導(dǎo)入json.js函數(shù)庫,同時(shí)需要將該函數(shù)庫復(fù)制到項(xiàng)目中。導(dǎo)入json.js函數(shù)庫的代碼如下所示: 

 

從創(chuàng)建Ajax.Request對(duì)象時(shí)使用的參數(shù)url可以看到,該Ajax請(qǐng)求是發(fā)送給validateName.aciton的,該Action是一個(gè)普通的Action,代碼如下所示: 

public class ValidateUserNameAction implements Action { 

private UserBiz userBiz; //該屬性代表業(yè)務(wù)邏輯組件的引用 

private String username; //該屬性用于封裝用戶名請(qǐng)求參數(shù) 

private String message;//該屬性用于封裝服務(wù)器響應(yīng)的提示消息 

public String execute() throws Exception { 

if(userBiz.checkUser(username)){ 

setMessage("對(duì)不起,該用戶已存在,請(qǐng)重?fù)Q一個(gè)!"); 

}else{ 

setMessage("恭喜你,"+username+" ,該用戶可以使用!");} 

return SUCCESS; } 

…… //由于篇幅,此處省略了屬性u(píng)serBiz、username和message的setter方法 } 

上述Action代碼中,由于Action返回的結(jié)果總是“SUCCESS”邏輯視圖名,如果業(yè)務(wù)邏輯userBiz中的checkUser方法驗(yàn)證用戶名可用,則將該Action的message屬性設(shè)置為:“恭喜你,"+username+" ,該用戶可以使用!”,否則設(shè)置為“對(duì)不起,該用戶已存在,請(qǐng)重?fù)Q一個(gè)!”。而message屬性的值是需要直接顯示在注冊(cè)表單的message元素中的,因此需要使用Struts JSON插件為該Action指定一個(gè)json類型的Result,這樣就無需使用視圖頁面來輸出響應(yīng)結(jié)果,系統(tǒng)會(huì)將該Action中的message屬性序列化為以JSON格式的字符串,并將該字符串作為服務(wù)器的響應(yīng)結(jié)果。為了實(shí)現(xiàn)上述功能,需要在struts.xml文件中配置該Action,配置如下: 

 

 

 

客戶端收到JSON格式的字符串后,使用parseJSON()方法將字符串解析為一個(gè)JSON對(duì)象,該對(duì)象包含的屬性與Action完全相同,也包含了username和message這兩個(gè)屬性,其中message屬性所設(shè)置的內(nèi)容顯示在id為message的HTML元素中。 

2.7 使用DWR框架實(shí)現(xiàn)用戶名Ajax驗(yàn)證 

除了使用Struts 2的JSON插件外,還可以通過DWR框架[4]實(shí)現(xiàn)用戶名的Ajax驗(yàn)證。為了讓W(xué)eb應(yīng)用增加DWR支持,需要將dwr.jar文件復(fù)制到項(xiàng)目的WEB-INF/lib目錄下。DWR框架可以自動(dòng)將普通的Java類轉(zhuǎn)化為javascript類,這個(gè)過程是通過一個(gè)核心Servlet的轉(zhuǎn)換實(shí)現(xiàn)的。為了讓DWR的核心Servlet能夠起作用,需要在web.xml添加如下配置: 

dwrorg.directwebremoting.servlet.DwrServlet 

dwr/dwr/* 

在web.xml中配置完DWR的核心Servlet后,該Servlet負(fù)責(zé)將服務(wù)器端的Java方法暴露出來,要暴露出來的方法是在dwr.xml文件中指定的,因此需要在項(xiàng)目中新建一個(gè)dwr.xml文件,并進(jìn)行如下配置: 

 

 

根據(jù)上述配置,從spring容器中取得beanName為userBiz的bean,即將UserBizImpl類創(chuàng)建為一個(gè)名為CheckUserExist的JavaScript對(duì)象。include表示允許調(diào)用的方法,這里將允許使用UserBizImpl類中的checkUser方法。為了能在表單中調(diào)用JavaScript對(duì)象,必須進(jìn)行如下引用: 

 

 

 

當(dāng)用戶在注冊(cè)表單Register.jsp中輸入用戶名,失去焦點(diǎn)后,執(zhí)行JavaScript函數(shù)checkUserExists,該函數(shù)中通過JavaScript對(duì)象CheckUserExist調(diào)用UserBizImpl類中的checkUser方法。代碼如下所示: 

function checkUserExists(){ 

var username = document.getElementById('username').value; 

CheckUserExist.checkUser(username,callBackFunction);} 

其中,callBackFunction為回調(diào)函數(shù),代碼如下所示: 

function callBackFunction(isExist){ 

if (isExist){//isExist=true 

document.getElementById('message').innerHTML="該用戶已存在"; 

}else{ //isExist=false 

document.getElementById('message').innerHTML="該用戶可以使用"; 

} } 

 

3 結(jié)束語 

篇7

(西安交通大學(xué)數(shù)據(jù)與信息中心,陜西西安710049)

摘要:通過對(duì)高??蒲泄芾憩F(xiàn)狀的分析與研究,運(yùn)用基于Struts,Spring和Hibernate的輕量級(jí)Web集成開發(fā)框架,并結(jié)合Ext 富客戶端技術(shù),從科研管理的基礎(chǔ)數(shù)據(jù)組織入手,認(rèn)真分析科研業(yè)務(wù)管理流程及信息交互特點(diǎn),最終構(gòu)建高效、靈活和穩(wěn)定的高??蒲泄芾硇畔⑾到y(tǒng)。該系統(tǒng)實(shí)現(xiàn)了科研管理的網(wǎng)絡(luò)化和數(shù)字化,有效提高了信息的集成效率,提升了科研信息精細(xì)化管理水平。

關(guān)鍵字:科研管理;SSH;Ext;精細(xì)化管理

中圖分類號(hào):TN911?34 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1004?373X(2015)20?0052?03

Research and application of scientific research management system based on Ext +SSH

Integrated development framework

GAO Zhan,SUO Zhihai

(Data and Information Center,Xi’an Jiaotong University,Xi’an 710049,China)

Abstract:In this paper,the current situation of research project management in universities is studied. Proceeding from ba?sic data organization of scientific research management,the scientific research management procedures and information interac?tion characteristics are analyzed by using light?weighted Web integrated development framework based on SSH(Struts Spring Hi?bernate) and rich client technology of Ext. Finally,a scientific research management system based on Ext+SSH integrated de?velopment framework with the advantages of reliability, efficiency and flexibility was constructed. The digitization and net?working of scientific research management were achieved by means of the system,which improve the efficiency of information in?tegration and promote the level of scientific research information management.

Keywords:scientific research management;SSH;Ext;delicacy management

學(xué)校科學(xué)研究能力的發(fā)展是制約高校整體辦學(xué)水平的重要因素,對(duì)于建設(shè)“研究型大學(xué)”更是具有舉足輕重的作用。近年來,隨著學(xué)??蒲泄ぷ鞣秶鸵?guī)模的迅速擴(kuò)大,信息交互頻繁,科研業(yè)務(wù)的復(fù)雜度日益增大,這就要求科研信息要做到快速流轉(zhuǎn)和有效管理,為了滿足科研管理系統(tǒng)建設(shè)的實(shí)際要求,構(gòu)建了基于Struts,Spring,Hibernate 輕量級(jí)集成開發(fā)框架和Ext 富客戶端技術(shù)的高??蒲泄芾硐到y(tǒng),為科研工作提供了重要保障。

1 SSH 和Ext 框架介紹

1.1 基于SSH的Web系統(tǒng)開發(fā)框架介紹

SSH 是一種基于J2EE 技術(shù)的MVC 軟件開發(fā)框架,與J2EE 重量級(jí)體系相對(duì)應(yīng),輕量級(jí)Web框架SSH 不僅保持了J2EE的優(yōu)勢(shì)(例如事務(wù)管理),還簡(jiǎn)化了Web的開發(fā)[1],提高開發(fā)效率。SSH 集成框架從邏輯上分為三層:表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層[2]。系統(tǒng)架構(gòu)圖如圖1所示。在表示層,Struts 作為系統(tǒng)的整體基礎(chǔ)架構(gòu),它利用控制器分離模型和視圖,把用戶界面和事務(wù)邏輯進(jìn)行分離,從而極大地縮短了開發(fā)時(shí)間。在數(shù)據(jù)持久層,Hibernate 框架對(duì)JDBC 進(jìn)行了輕量級(jí)的對(duì)象封裝,將數(shù)據(jù)庫表通過配置文件映射成對(duì)象。程序開發(fā)人員無需關(guān)心數(shù)據(jù)庫的具體結(jié)構(gòu),直接操作數(shù)據(jù)對(duì)象即可。Spring 管理Struts 和Hibernate,通過Spring 的反轉(zhuǎn)機(jī)制,利用容器來創(chuàng)建對(duì)象,即在運(yùn)行期間將對(duì)象的依賴關(guān)系注入到組件之中,使得應(yīng)用代碼可直接使用實(shí)例。

1.2 基于Ext的富客戶端技術(shù)

Ext是一個(gè)基于純HTML/CSS+ JavaScript技術(shù)的開源的富客戶端應(yīng)用程序框架,它與后臺(tái)開發(fā)技術(shù)無關(guān),可以用在多種開發(fā)語言的開發(fā)應(yīng)用中,使B/S應(yīng)用更具有活力和生命力,大幅度提升了用戶體驗(yàn)。Ext提供了豐富的跨瀏覽器UI組件,靈活采用JSON和XML為交換格式,減輕了服務(wù)端表示層的負(fù)荷,從而達(dá)到客戶端的RIA 應(yīng)用[3]。Ext還提供了豐富的學(xué)習(xí)文檔和方便易查的API文檔,方便開發(fā)者查詢和使用。

Ext 在開發(fā)中主要使用到Application,Controller,Viewport,View,Store,Model 和Data 七大類[4],其邏輯關(guān)系如圖2 所示。Application 控制Ext 到找對(duì)應(yīng)Con?troller 與View 等Javascript 文件;Controller 用來實(shí)現(xiàn)View 上的所觸發(fā)事件和操作,并將對(duì)應(yīng)的View,Store ,Model 進(jìn)行關(guān)聯(lián);Model 和Store 是模型數(shù)據(jù)類,主要是給View類提供數(shù)據(jù);View主要負(fù)責(zé)頁面展示。

2 科研管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

2.1 科研管理系統(tǒng)的功能模塊設(shè)計(jì)科研管理系統(tǒng)的設(shè)計(jì)與開發(fā)以“高效管理、服務(wù)師生、信息共享、公正公開”為建設(shè)目標(biāo),以科研管理的內(nèi)容、流程為中心。從管理內(nèi)容的覆蓋范圍來看,科研管理系統(tǒng)的主要分為了科研項(xiàng)目管理、科研成果管理、經(jīng)費(fèi)管理、科研問題管理、科研機(jī)構(gòu)管理、科研辦公管理功能、統(tǒng)計(jì)管理、專家?guī)旃芾怼⒒毓芾淼?大功能模塊。各個(gè)功能模塊具有相對(duì)獨(dú)立性,同時(shí)也相互聯(lián)系。從服務(wù)對(duì)象來看,為校領(lǐng)導(dǎo)、學(xué)院、科研基地、教師、科研管理人員5大服務(wù)對(duì)象提供全方位的服務(wù)。

2.2 基于Ext和SSH集成框架的系統(tǒng)架構(gòu)設(shè)計(jì)良好架構(gòu)的選擇對(duì)提高項(xiàng)目的開發(fā)效率有著重大影響?;贏jax 的Web 應(yīng)用程序打破了傳統(tǒng)Web 程序開發(fā)模式,大大提高了程序的可用性用戶體驗(yàn)。因此SSH和Ext的組合構(gòu)建了一個(gè)具有健壯架構(gòu)體系和具有良好用戶體驗(yàn)的Web系統(tǒng)開發(fā)架構(gòu)[5]。

Ext+SSH 集成架構(gòu)整合的基本原理如圖3 所示。

Ext 實(shí)現(xiàn)Struts 框架中的頁面表示和頁面跳轉(zhuǎn),管理界面上的各種操作事件,同時(shí)做出相應(yīng)的響應(yīng),由于其提供了豐富的UI 組件,并采用JSON 數(shù)據(jù)格式傳輸數(shù)據(jù),提高程序員的開發(fā)效率[6]。在業(yè)務(wù)層,Spring實(shí)現(xiàn)MVC三層分離,控制各層負(fù)責(zé)不同的任務(wù),協(xié)作完成一次完整的請(qǐng)求/響應(yīng)。在數(shù)據(jù)持久層,Hibernate 實(shí)現(xiàn)數(shù)據(jù)庫表到Java類的映射,簡(jiǎn)化數(shù)據(jù)庫事務(wù)管理。

2.3 關(guān)鍵技術(shù)的實(shí)現(xiàn)

Ext框架擁有豐富的組件,而且創(chuàng)建組件的方法也非常簡(jiǎn)單,可以直接通過new 關(guān)鍵字來創(chuàng)建,比如創(chuàng)建一個(gè)窗口,可以使用new Ext.window(),創(chuàng)建一個(gè)表格可以使用new Ext.grid.GridPanel()。在本系統(tǒng)中,用戶登錄后的首頁面板顯示了用戶基本信息,科研通知公告,代辦事宜等信息,它們可以通過拖拽的方式調(diào)整位置,這里采用的Ext的Ext.ViewPort組件來實(shí)現(xiàn)頁面布局,它可以隨著瀏覽器的大小而自適應(yīng)。部分核心代碼如下所示:

科研數(shù)據(jù)不僅數(shù)量大,而且數(shù)據(jù)關(guān)聯(lián)性也較強(qiáng),在每個(gè)數(shù)據(jù)列表上建立快捷查詢項(xiàng)是非常必要的,如圖4所示。

圖4 Ext的panel組件實(shí)現(xiàn)快捷查詢頁面

以下代碼是利用Ext的panel組件實(shí)現(xiàn)的快速查詢頁面的代碼:

3 結(jié)語

采用Ext+SSH集成架構(gòu)開發(fā)的科研管理信息系統(tǒng),結(jié)構(gòu)清晰,快速高效,可維護(hù)性和靈活性較高。目前該系統(tǒng)已在西安交通大學(xué)科研院的科研管理工作中得到了應(yīng)用,體現(xiàn)了“人性化操作”的設(shè)計(jì)理念,充分兼顧了校領(lǐng)導(dǎo)、科研管理人員、教師等用戶的不同需求,實(shí)現(xiàn)了與校園信息化平臺(tái)的其他應(yīng)用系統(tǒng)對(duì)接,提升了學(xué)校科研管理能力和水平。

參考文獻(xiàn)

[1] 邵雄凱,楊京濤.基于Struts,Spring和Hibernate的集成框架研究[J].軟件導(dǎo)刊,2007(23):25?28.

[2] 張瑋,陳為.基于Struts+Spring+Hibernate框架的探討與研究[J].長(zhǎng)春大學(xué)學(xué)報(bào),2006(12):75?80.

[3] 王曉燕,宋紹云.Ext的組件體系結(jié)構(gòu)研究[J].電腦知識(shí)與技術(shù),2011(9):1999?2002.

[4] 田建偉,黎曦,劉瀟瀟,等.基于Ext和SSH 開發(fā)架構(gòu)的電力生產(chǎn)信息系統(tǒng)的研究與應(yīng)用[J].湖南電力,2014(2):16?19.

[5] 郭永樂,劉列根,張宇.基于輕量級(jí)框架構(gòu)建Web應(yīng)用[J].電子技術(shù)應(yīng)用,2007(4):78?90.

[6] 王淵,懷自國(guó),羅怡桂.基于Ext+Spring+Hibernate的Web系統(tǒng)開發(fā)架構(gòu)的研究與應(yīng)用[J].計(jì)算機(jī)與現(xiàn)代化,2009(12):78?81.

篇8

關(guān)鍵詞:Android LinuxSSH QuickSSHD可行性

中圖分類號(hào):TN918.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2012)03-0000-00

Android操作系統(tǒng)最初由Andy Rubin領(lǐng)頭的開發(fā)小組開發(fā),最初主要支持手機(jī)。2005年由Google注資收購經(jīng)過開發(fā)改良,逐漸擴(kuò)展到平板電腦及其他領(lǐng)域上。Android操作系統(tǒng)采用了軟件堆層(software stack,又名軟件疊層)的架構(gòu),主要分為三部分。底層Linux內(nèi)核只提供基本功能,其他的應(yīng)用軟件則由各公司自行開發(fā),部分程序以Java編寫。

SSH為Secure Shell的縮寫,由IETF的網(wǎng)絡(luò)工作小組(Network Working Group)所制定;SSH為建立在應(yīng)用層和傳輸層基礎(chǔ)上的安全協(xié)議。

傳統(tǒng)的網(wǎng)絡(luò)服務(wù)程序,如FTP、POP和Telnet其本質(zhì)上都是不安全的;因?yàn)樗鼈冊(cè)诰W(wǎng)絡(luò)上用明文傳送數(shù)據(jù)、用戶帳號(hào)和用戶口令,很容易受到中間人(man-in-the-middle)攻擊方式的攻擊。就是存在另一個(gè)人或者一臺(tái)機(jī)器冒充真正的服務(wù)器接收用戶傳給服務(wù)器的數(shù)據(jù),然后再冒充用戶把數(shù)據(jù)傳給真正的服務(wù)器。而SSH是目前較可靠,專為遠(yuǎn)程登錄會(huì)話和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議。利用SSH協(xié)議可以有效防止遠(yuǎn)程管理過程中的信息泄露問題。透過SSH可以對(duì)所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密,也能夠防止DNS欺騙和IP欺騙。

SSH之另一項(xiàng)優(yōu)點(diǎn)為其傳輸?shù)臄?shù)據(jù)是經(jīng)過壓縮的,所以可以加快傳輸?shù)乃俣?。SSH有很多功能,它既可以代替Telnet,又可以為FTP、POP、甚至為PPP提供一個(gè)安全的“通道”。有點(diǎn)類似于VPN,但是它在保密方面的能力,遠(yuǎn)遠(yuǎn)強(qiáng)于VPN。

SSH協(xié)議框架中最主要的部分是三個(gè)協(xié)議:傳輸層協(xié)議、用戶認(rèn)證協(xié)議和連接協(xié)議。同時(shí)SSH協(xié)議框架中還為許多高層的網(wǎng)絡(luò)安全應(yīng)用協(xié)議提供擴(kuò)展的支持。

QuickSSHD在智能手機(jī)中的使用。

通過下面介紹的一個(gè)使用過程,用來證明SSH安全傳輸協(xié)議在Android平臺(tái)下的可行性,本次實(shí)驗(yàn)使用的軟硬件及其各版本如下:(1)基于Android2.3.5版本的智能手機(jī)一部(已經(jīng)獲得root權(quán)限),(2)x86電腦一部;(3)在手機(jī)端安裝了QuickSSHD的2.0.2(已付費(fèi))版本軟件;(4)在電腦端安裝了FileZilla軟件,版本號(hào)是3.5.3。

QuickSSHD支持sftp與xterm(命令行終端)方式管理手機(jī),可USB可3G可wifi,我這次使用的軟件是FileZilla,因此測(cè)試了sftp功能,用的是wifi登錄方式進(jìn)行實(shí)驗(yàn)。在圖1所示是QuickSSHD軟件登錄界面。

當(dāng)你安裝好QuickSSHD軟件后開始使用,你可以獲取一個(gè)由軟件自動(dòng)提供給你的IP地址(本次實(shí)驗(yàn)中得到的地址是192.168.1.102),且你進(jìn)入時(shí)可以提供密碼或者共享Keys的方式進(jìn)行加密,一般建議采用密碼的形式,這個(gè)密碼是自定義的,也就是在x86電腦端開啟軟件FileZilla時(shí)所需輸入的密碼,第一次使用后,可以將這個(gè)IP地址和密碼都設(shè)置為常用,以后登錄不必每次都輸入。

當(dāng)在Android端設(shè)定好命令之后,你可以到x86電腦端設(shè)定好軟件FileZilla的各項(xiàng)命令,上圖顯示我本次實(shí)驗(yàn)是進(jìn)行sftp傳輸?shù)膶?shí)驗(yàn),使用的登錄名是root,密碼就是你在Android端已經(jīng)輸入的密碼,最后一個(gè)是端口,這個(gè)一般是固定的,sftp都是采用的22端口,圖2所示是FileZilla軟件在Android端和x86計(jì)算機(jī)端傳輸文件的界面,其中左圖為x86計(jì)算機(jī)端路徑,右圖為Android端的/sdcard路徑所示。

設(shè)置好點(diǎn)擊快速連接之后,就會(huì)進(jìn)入圖5所示界面,該界面就是一個(gè)進(jìn)行進(jìn)行sftp方式傳輸?shù)慕缑?,左半面是x86電腦的磁盤驅(qū)動(dòng)器,右半面你可以選擇Android操作系統(tǒng)所屬的各個(gè)文件夾,因?yàn)長(zhǎng)inux是特性是利用文件管理系統(tǒng),因此,你只要管理好了文件,也就是管理好了這個(gè)Linux,乃至你的Android系統(tǒng),由于本次軟件所測(cè)試的sftp協(xié)議在Android上的傳輸可行性,因此我在右半面選擇的是該電子設(shè)備所攜帶的sdcard文件夾。通過測(cè)試,通常使用在Linux操作系統(tǒng)中的sftp傳輸協(xié)議完全能夠使用在x86電腦和Android系統(tǒng)系統(tǒng)之間。

在本篇文章所述中,雖然只是針對(duì)SSH協(xié)議的sftp傳輸方式進(jìn)行了驗(yàn)證,但是SSH傳輸協(xié)議的優(yōu)點(diǎn)遠(yuǎn)不止此,因?yàn)槭且环N相對(duì)安全的傳輸協(xié)議方式,SSH協(xié)議今后還會(huì)在更多的應(yīng)用區(qū)域得到更加廣泛的推廣,例如需要在公共區(qū)域的WIFI上網(wǎng),雖然利用VPN也可以,但是有的地方封殺VPN,SSH比較安全,當(dāng)然,還可以利用更改配置文件的方法,更改SSH的默認(rèn)端口和對(duì)登錄IP進(jìn)行限制,進(jìn)一步的保證利用SSH協(xié)議傳輸數(shù)據(jù)的安全性。

參考文獻(xiàn)

[1] 余永洪.用SSH技術(shù)遠(yuǎn)程管理Linux服務(wù)器.《計(jì)算機(jī)與現(xiàn)代化》,2002.

[2] 孔祥真,徐小龍,邢宏健.Linux操作系統(tǒng)服務(wù)器SSH遠(yuǎn)程管理配置.《網(wǎng)絡(luò)安全技術(shù)與應(yīng)用》,2011.

[3] 劉平.Android手機(jī)訪問服務(wù)器的一種數(shù)據(jù)交互方法.《電子設(shè)計(jì)工程》,2010.

[4] 劉振昌.讓SSH遠(yuǎn)程管理更安全.《中國(guó)教育網(wǎng)絡(luò)》,2011

篇9

關(guān)鍵詞:SSH架構(gòu);Appfuse;代碼自動(dòng)生成

中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)20-20272-03

Application Research on Automatic Code Generation Based on SSH Architecture

LI Jin-hai

(Modern Education Technology Center,Qingdao Technological University,Qingdao 266033,China)

Abstract:There are several common problems in the enterprise-ready application development, such as long project development life, low development efficiency, slow response to changing demands. Automatic code generation technology is the very one of effective ways to solve these problems. SSH architecture is one of the most widespread used J2EE architectures in the present. This paper discusses the automatic code generation technology which can be used in SSH architecture. Through the research on the Open Source framework Appfuse, this paper distracts its fast development module based on SSH architecture, improves the code generation ability of the module, and applies this improved module in the development of a privilege management system to have a check if it works well.

Key words:SSH Architecture;Appfuse;Automatic Code Generation

隨著企業(yè)信息化的發(fā)展,J2EE技術(shù)的應(yīng)用已經(jīng)日益廣泛。在J2EE體系架構(gòu)中,基于各種開源框架的J2EE架構(gòu)的應(yīng)用逐漸成為主流。優(yōu)秀的開源框架在J2EE中的應(yīng)用在一定程度上也促進(jìn)了企業(yè)級(jí)應(yīng)用的發(fā)展。然而,在實(shí)際開發(fā)中仍然存在著項(xiàng)目開發(fā)周期長(zhǎng),開發(fā)效率低,不能快速響應(yīng)需求變化等普遍問題。代碼生成技術(shù)的發(fā)展已逐漸成為解決上述問題的有效途徑之一。本文將對(duì)應(yīng)用廣泛的SSH架構(gòu)的代碼自動(dòng)生成展開討論。

1 SSH架構(gòu)

SSH架構(gòu)就是一個(gè)基于三種開源框架Stuts,Hibernate和Spring的輕量級(jí)J2EE架構(gòu),目前已是企業(yè)級(jí)應(yīng)用開發(fā)中應(yīng)用最廣泛的J2EE架構(gòu)之一。其架構(gòu)層次主要?jiǎng)澐譃椋罕憩F(xiàn)層,業(yè)務(wù)層,數(shù)據(jù)持久層和領(lǐng)域?qū)ο髮印T诒憩F(xiàn)層中應(yīng)用了Struts框架,這種基于請(qǐng)求驅(qū)動(dòng)的MVC框架給架構(gòu)也帶來了清晰的MVC劃分。在業(yè)務(wù)層引入Spring,使用其提供的IoC容器對(duì)業(yè)務(wù)類進(jìn)行裝配和管理,使類與類之間的耦合度降到最小,利用其提供的AOP框架對(duì)業(yè)務(wù)層中的事務(wù)進(jìn)行聲明式管理。由于Spring對(duì)Hibernate提供了良好的支持,通過使用HibernateTemplate可以方便地對(duì)數(shù)據(jù)進(jìn)行持久化操作。數(shù)據(jù)持久層正是由Spring和Hibernate共同打造的。其中DAO接口的裝配和管理也是由Spring提供的IoC容器實(shí)現(xiàn)的。

該類架構(gòu)層次清晰,結(jié)構(gòu)明顯,同一層中類或接口的代碼往往具有類似的結(jié)構(gòu),非常適于使用代碼生成工具實(shí)現(xiàn)部分代碼自動(dòng)生成。

2 AppFuse框架

AppFuse 是一個(gè)開源項(xiàng)目,它使用了在 Java 平臺(tái)上構(gòu)建的開源工具來幫助開發(fā)者快速而高效地開發(fā) Web 應(yīng)用程序。它使用 Ant 來驅(qū)動(dòng)測(cè)試、代碼生成、編譯和部署。它提供了目錄和包結(jié)構(gòu),以及開發(fā)基于 Java 語言的 Web 應(yīng)用程序所需要的庫。AppFuse支持的Web框架有:Struts、Spring MVC、WebWork、JSF and Tapestry,支持的持久層框架有:Hibernate和iBates,支持的測(cè)試環(huán)境有:DBUnit,Junit,Jmock和Canoon’s Web Test。AppFuse中集成了XDoclet,并應(yīng)用它自動(dòng)生成代碼和相關(guān)的配置文件。

Appfuse實(shí)現(xiàn)代碼自動(dòng)生成的核心就是應(yīng)用XDoclet引擎按照代碼模板文件進(jìn)行代碼生成。Appfuse要支持很多不同的框架和技術(shù),所以其中的代碼模板就要做到最通用。代碼模板通用性的提高,在一定程度上降低了其功能和效率。而且,Appfuse中代碼自動(dòng)生成模塊只能生成簡(jiǎn)單少量的Spring配置文件,大部分的配置工作沒有實(shí)現(xiàn)自動(dòng)化?;诖耍疚膶?duì)Appfuse中支持Struts,Hibernate和Spring的代碼自動(dòng)生成模塊進(jìn)行了提取,改進(jìn)了其中的代碼模板文件,增強(qiáng)了該模塊的代碼自動(dòng)生成能力,并使得Spring配置文件的大部分配置工作實(shí)現(xiàn)自動(dòng)化。

3 基于Struts,Hibernate,Spring框架的J2EE架構(gòu)的代碼自動(dòng)生成

3.1 代碼自動(dòng)生成的任務(wù)列表

因?yàn)锳nt配置文件build.xml是代碼自動(dòng)生成的控制核心,所以可以通過改寫build.xml文件提取出Appfuse中的相關(guān)模塊。修改后的build.xml文件包括:變量配置如項(xiàng)目包的名稱、源文件目錄等,定義相關(guān)類的引用路徑,還有一系列的代碼生成任務(wù)。任務(wù)列表如下:

<target name="help">

<echo message="提供以下任務(wù):" />

<echo message="create-dir-->生成工程目錄"/>

<echo message="generate-hbm -->運(yùn)行HibernateDoclet,生成Hibernate 類的映射文件" />

<echo message="schemaexport -->運(yùn)行SchemaExport,利用hbm.xml 文件生成數(shù)據(jù)表" />

<echo message="gen-forms --> 運(yùn)行xdoclet,生成相應(yīng)的Form類文件"/>

<echo message="webdoclet -->運(yùn)行webdoclet,生成Struts配置文件和validation.xml" />

<echo message="gen --> 運(yùn)行xdoclet生成相應(yīng)類的dao,daoHibernate,manager等文件"/>

<echo message="move-gens--> 把生成相應(yīng)類的dao,daoHibernate,manager等java文件移到當(dāng)前工程文件夾下"/>

<echo message="gen-springxml --> 生成spring的配置文件context-spring.xml" />

</target>

3.2 對(duì)Appfuse中代碼自動(dòng)生成模塊的改進(jìn)

使用XDoclet自動(dòng)生成代碼需要有代碼模板以及相應(yīng)模板語言的支持,另外改進(jìn)該模塊時(shí)加入了一些通用基類,這些都是代碼自動(dòng)生成模塊的基本組成部分。代碼模板文件主要應(yīng)用了Form和Method兩個(gè)標(biāo)簽,其中Form標(biāo)簽是Appfuse中自定義的,而Method標(biāo)簽則是在原有XDoclet標(biāo)簽的基礎(chǔ)上做了擴(kuò)展。提取出的模塊仍然需要Appfuse中FormTagsHandler和MethodExTagsHandler這兩個(gè)標(biāo)簽類的支持,應(yīng)把他們置于模塊中WEB-INF的Class目錄下。以下就是對(duì)原有模板文件的修改及改進(jìn):

(1)對(duì)Dao.xdt模板文件進(jìn)行了改進(jìn),添加了兩個(gè)常用方法,merge()以及find()方法。前者是用于在一個(gè)session中存在兩個(gè)相同的對(duì)象擁有同一個(gè)identifer的情況下,而后者則用于執(zhí)行HQL查詢語言。兩者在項(xiàng)目開發(fā)中使用頻率頗高,所以需要增加。

(2)對(duì)相應(yīng)的DAOHibernate類模板即DAO的實(shí)現(xiàn)類進(jìn)行相應(yīng)的改進(jìn),實(shí)現(xiàn)merge()和find()方法。

(3)在相應(yīng)的DAOTest類模板中添加testMerge()和testFind()方法。

(4)在manager類模板中添加add方法,主要是在添加一個(gè)新對(duì)象時(shí)需要先判斷是否有重復(fù),所以應(yīng)該與save方法分開。

(5)改進(jìn)DaoHibernate.xdt文件,原模板文件中的get()只適用于對(duì)象的主標(biāo)示的類型為java.Long.*中的情況,修改模板后使之也適用于long和int的情形。

(6)修改Manager.xdt,去掉了用不到的import語句。

(7)在ManagerImpl.xdt文件中添加 import .service.Manager;在改進(jìn)DaoHibernate.xdt文件后應(yīng)該相應(yīng)的修改ManagerImpl.xdt中的remove()和get()方法。

(8)DaoTest.xdt,添加自己的BaseTestCase,然后修改DaoTest.xdt使所有的DaoTest類繼承BaseTestCase。修改testAdd()中“verify a primary key was assigned”的語句,使其也適用于pirmary key是long 和int 的情形。

(9)ManagerTest.xdt,修改模板使ManagerTest類都繼承MockObjectTestCase,修改模板文件中g(shù)et()和remove()方法,使之也適用于pirmary key是long 和int 的情形。

(10)去掉了Appfuse框架中context-hibernate.xdt和context-service.xdt模板文件。通過在DaoHibernate.xdt和ManagerImpl.xdt模板文件中添加相應(yīng)的XDoclet標(biāo)簽(@spring),利用xdoclet.modules.spring.SpringDocletTask任務(wù)可以自動(dòng)生成spring的配置文件,省去了人工維護(hù)。

通過以上的修改和改進(jìn),使得這些模板功能更加強(qiáng)大,更符合我們的編程習(xí)慣從而更加實(shí)用。其中都是對(duì)原有模板文件比較大的改進(jìn),在一定程度上比Appfuse中的原有模塊更能提高開發(fā)效率。

3.3 代碼自動(dòng)生成模塊的應(yīng)用步驟

應(yīng)用該模塊的步驟如下:

(1)在build.xml中設(shè)置項(xiàng)目的程序包、源文件目錄、生成文件的輸出目錄、XDoclet模板文件放置目錄、輸出的Form文件目錄、輸出的測(cè)試類文件目錄等一系列變量。

(2)設(shè)置各個(gè)庫的引用路徑,如Spring,Hibernate的jar文件 的引用。

(3)運(yùn)行build.xml中的create-dir任務(wù),創(chuàng)建工程詳細(xì)目錄。

(4)編寫領(lǐng)域?qū)ο箢悾愇募幸砑釉敿?xì)的XDoclet標(biāo)簽;在關(guān)系數(shù)據(jù)庫中建立一個(gè)空數(shù)據(jù)庫文件。

(5)順序執(zhí)行Ant任務(wù)generate-hbm,schemaexport,gen-forms,gen-forms,gen,move-gens,gen-springxml,可以自動(dòng)的連續(xù)執(zhí)行也可以單步執(zhí)行。

通過執(zhí)行以上一系列任務(wù),就會(huì)在相應(yīng)的目錄下自動(dòng)生成Hibernate配置文件,相應(yīng)領(lǐng)域?qū)ο蟮腟truts Form文件以及在Struts-config.xml中的相關(guān)配置,領(lǐng)域?qū)ο髮?duì)應(yīng)的Dao接口及Hibernate實(shí)現(xiàn)類,領(lǐng)域?qū)ο髮?duì)應(yīng)的Manager接口及簡(jiǎn)單實(shí)現(xiàn)類,相應(yīng)DaoTest類和ManagerTest類文件,還有簡(jiǎn)單的Spring配置文件。此外,還在已創(chuàng)建的數(shù)據(jù)庫中產(chǎn)生與領(lǐng)域?qū)ο髮?duì)應(yīng)的數(shù)據(jù)表。

3.4 改進(jìn)后模塊的優(yōu)勢(shì)

這樣在整個(gè)架構(gòu)中,一旦實(shí)現(xiàn)領(lǐng)域?qū)ο髮樱韵聝?nèi)容會(huì)自動(dòng)實(shí)現(xiàn):(1)基于Hibernate的對(duì)象關(guān)系映射層。(2)基于Hibernate的數(shù)據(jù)持久層。(3)基于Spring的業(yè)務(wù)層的部分代碼,即Manager接口和Manager實(shí)現(xiàn)。對(duì)于Manager實(shí)現(xiàn)還需要根據(jù)不同的業(yè)務(wù)作相應(yīng)的修改。(4)基于Struts的表現(xiàn)層的部分代碼,即在應(yīng)用中可能會(huì)用到的Struts中的Form類,對(duì)應(yīng)每一個(gè)領(lǐng)域?qū)ο笙茸詣?dòng)生成一個(gè)Form,以節(jié)省可能的工作量。此外,針對(duì)數(shù)據(jù)持久層和業(yè)務(wù)層接口的測(cè)試用例也會(huì)自動(dòng)生成,大部分可以直接應(yīng)用,只有小部分需要稍作修改以增強(qiáng)測(cè)試效果。

4 基于SSH架構(gòu)的代碼自動(dòng)生成模塊在權(quán)限管理系統(tǒng)的應(yīng)用

4.1 RBAC模型

本權(quán)限管理系統(tǒng)基于RBAC模型設(shè)計(jì)。RBAC(Role-Based Access Control)模型的基本思想就是根據(jù)安全策略劃分出不同的角色,資源訪問許可被封裝在角色中,用戶被指派到角色,用戶通過角色間接地訪問資源。RBAC 的最大優(yōu)點(diǎn)在于它能夠靈活表達(dá)和實(shí)現(xiàn)組織的安全策略,使管理員從訪問控制底層的具體實(shí)現(xiàn)機(jī)制中脫離出來,十分接近日常的組織管理規(guī)則。RBAC 被認(rèn)為是一種更普遍適用的訪問控制模型,可以有效地表達(dá)和鞏固特定事務(wù)的安全策略,有效緩解傳統(tǒng)安全管理處理瓶頸問題。其中RBAC96模型如圖1所示。

4.2參照RBAC模型以及實(shí)際需求對(duì)權(quán)限管理系統(tǒng)進(jìn)行建模

此權(quán)限管理系統(tǒng)把權(quán)限管理和組織機(jī)構(gòu)管理結(jié)合起來,分配給用戶的角色來自于部門,部門和角色之間是一對(duì)多的關(guān)系。權(quán)限許可是針對(duì)某一權(quán)限資源對(duì)象和權(quán)限操作,所以權(quán)限許可和權(quán)限資源對(duì)象以及權(quán)限操作都是一對(duì)一的關(guān)系。通過Borland公司的建模工具Together,將權(quán)限管理系統(tǒng)模型建立如下:

4.3 利用代碼自動(dòng)生成模塊進(jìn)行開發(fā)

按照3.3所討論的步驟,先進(jìn)行(1)到(3)步。然后根據(jù)圖2中的模型,開始編寫領(lǐng)域?qū)ο髮哟a并在代碼中添加XDoclet標(biāo)簽。再依次執(zhí)行第(4)、(5)步后,就會(huì)在相應(yīng)的目錄下自動(dòng)生成了Hibernate配置文件,User等領(lǐng)域?qū)ο蟮腟truts Form文件以及在Struts-config.xml中的相關(guān)配置,對(duì)應(yīng)的Dao接口及Hibernate實(shí)現(xiàn)類,對(duì)應(yīng)的Manager接口及簡(jiǎn)單實(shí)現(xiàn)類,相應(yīng)DaoTest類和ManagerTest類文件,還有簡(jiǎn)單的Spring配置文件。此外,還在已創(chuàng)建的數(shù)據(jù)庫中產(chǎn)生與領(lǐng)域?qū)ο髮?duì)應(yīng)的數(shù)據(jù)表。在該系統(tǒng)開發(fā)完畢后,將利用該模塊自動(dòng)生成的代碼與已經(jīng)完成的代碼進(jìn)行了比較,經(jīng)估算可以節(jié)省近40%的代碼量,于是就節(jié)省出了大量的時(shí)間用于核心業(yè)務(wù)邏輯的處理。

5 總結(jié)

改進(jìn)后的自動(dòng)化模塊可以在相對(duì)穩(wěn)定的對(duì)象關(guān)系映射層和數(shù)據(jù)持久層實(shí)現(xiàn)完全的自動(dòng)化,而在業(yè)務(wù)層和表現(xiàn)層也可以減少一部分代碼量,并且測(cè)試方面的代碼量也會(huì)大大減少。 所以,在類似基于Struts,Hibernate,Spring的輕量級(jí)J2EE架構(gòu)的系統(tǒng)的開發(fā)中應(yīng)用該自動(dòng)化模塊會(huì)大大提高工作效率,縮短項(xiàng)目周期,提高對(duì)需求變化的快速響應(yīng)速度。

參考文獻(xiàn):

[1] Rod Johnson.J2EE Development Frameworks[J].Computer,2005(01)107-110.

[2] 汪厚祥,李卉.基于角色的訪問控制研究[J].計(jì)算機(jī)應(yīng)用研究,2005(4):125-127.

篇10

關(guān)鍵詞:SSH開源框架技術(shù);檔案管理系統(tǒng);分布式檔案管理

隨著高校檔案管理的復(fù)雜化和網(wǎng)絡(luò)技術(shù)的發(fā)展,基于Web的檔案管理系統(tǒng)具有很大的使用價(jià)值。研究檔案管理系統(tǒng)軟件,提出其設(shè)計(jì)開發(fā)標(biāo)準(zhǔn)的規(guī)范化建議,是為了促進(jìn)檔案系統(tǒng)軟件開發(fā)設(shè)計(jì)的規(guī)范化與標(biāo)準(zhǔn)化,避免盲目設(shè)計(jì)與開發(fā),節(jié)省研制成本,減少經(jīng)濟(jì)損失,擴(kuò)大軟件適用規(guī)模,達(dá)到檔案管理的自動(dòng)化、統(tǒng)一化,提高檔案工作效率,保證檔案管理安全性、通用性、可靠性,進(jìn)而促進(jìn)檔案信息化的發(fā)展。

一、架構(gòu)技術(shù)分析

1.Struts簡(jiǎn)介

Struts是一個(gè)為開發(fā)基于模型(Model)-視圖(View)-控制器(Controller)(MVC)模式的應(yīng)用架構(gòu)的開源框架,是利用Java Servlet和JSP構(gòu)建Web應(yīng)用的一項(xiàng)非常有用的技術(shù)。

2.Hibernate

Hibernate是一個(gè)免費(fèi)的開源Java包,它使得與關(guān)系數(shù)據(jù)庫打交道變得十分輕松,同時(shí)不必考慮如何把它們從神秘的數(shù)據(jù)庫表中取出(或放回到數(shù)據(jù)庫表中)。

3.Spring

Spring是一個(gè)開源框架,它由Rod Johnson創(chuàng)建。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。

4.SSH整合后的特點(diǎn)

(1)大大降低了開發(fā)成本。SSH 的架構(gòu)是基于Struts、Spring和 Hibernate開源框架開發(fā)設(shè)計(jì)的,所以它在技術(shù)成本上會(huì)很低,又由于應(yīng)用框架技術(shù)可以更清晰的劃分開發(fā)過程中每個(gè)人的工作任務(wù),從而降低了人力成本。

(2)低耦合,增強(qiáng)了系統(tǒng)的可擴(kuò)張性。對(duì)于傳統(tǒng)的ASP和PHP等腳本站點(diǎn)技術(shù),將整個(gè)站點(diǎn)的業(yè)務(wù)邏輯和表現(xiàn)邏輯都混雜在ASP和PHP頁面里,從而導(dǎo)致頁面的可讀性相當(dāng)差,可維護(hù)性非常低。即使需要簡(jiǎn)單改變頁面的按鈕,也不得不打開頁面文件,冒著破壞系統(tǒng)的風(fēng)險(xiǎn),因而具有良好的可擴(kuò)展性。

(3)縮短項(xiàng)目的開發(fā)周期。使用框架技術(shù)可以避免反復(fù)開發(fā)的問題。無形中減少了開發(fā)過程中的編寫代碼量,提高了開發(fā)速度,縮短開發(fā)周期。

(4)重用性。為了避免重復(fù)開發(fā),降低成本,我們希望能夠重用以前的代碼和設(shè)計(jì)。重用是我們不斷追求的目標(biāo)之一,但事實(shí)上,做到這一點(diǎn)不是很容易。

二、系統(tǒng)功能需求

于檔案管理管理系統(tǒng)來說,總體上的目標(biāo)就是提高檔案管理的效率,將大量復(fù)雜的統(tǒng)計(jì),重復(fù)的事務(wù)性操作等交給系統(tǒng)自動(dòng)處理,在提高效率的同時(shí),也減少了人工的投入和人工操作可能產(chǎn)生的錯(cuò)誤。本系統(tǒng)的開發(fā)依據(jù)J2EE分層的系統(tǒng)框架,提出基于SSH(Struts+Spring+Hibernate)集成框架的檔案管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)?;赟SH的檔案管理系統(tǒng)開發(fā)要實(shí)現(xiàn)的具體功能如下圖所示。

三、系統(tǒng)實(shí)現(xiàn)

1.Web應(yīng)用層實(shí)現(xiàn)

表示層主要包括系統(tǒng)和用戶交互的頁面,它的主要功能是收集用戶的輸入、驗(yàn)證和轉(zhuǎn)換輸入數(shù)據(jù),并把轉(zhuǎn)換后的數(shù)據(jù)傳遞給業(yè)務(wù)邏輯層。另外,表示層還發(fā)揮呈現(xiàn)數(shù)據(jù)、控制頁面導(dǎo)航,以及處理國(guó)際化編程的功能。該層使用Struts框架來實(shí)現(xiàn),Struts為基于Java的應(yīng)用提供一種用戶界面開發(fā)框架以及應(yīng)用邏輯和業(yè)務(wù)邏輯的連接。它通過一個(gè)控制器ActionServlet提供Web應(yīng)用程序生命周期管理,而且能夠在服務(wù)器上處理客戶端事件、輸入驗(yàn)證等用戶界面問題。

應(yīng)用層Struts的設(shè)計(jì)主要包括用戶Struts界面以及與之協(xié)作的事件Action的設(shè)計(jì)。檔案管理系統(tǒng)設(shè)計(jì)的Action主要有:LoginAction、MenuAction、OrgAction、ParaAction、RoleAction、UserAction、DoucumentInfoAction、BorrowInfoAction

2.業(yè)務(wù)邏輯層實(shí)現(xiàn)

業(yè)務(wù)邏輯層使用Spring框架來實(shí)現(xiàn)業(yè)務(wù)邏輯處理,可以實(shí)現(xiàn)與各種框架良好的集成。同時(shí)Spring的IOC的依賴注入功能給開發(fā)人員減輕了負(fù)擔(dān),使程序代碼邏輯結(jié)構(gòu)清晰,實(shí)現(xiàn)組件間的松散耦合,加快開發(fā)進(jìn)度。業(yè)務(wù)邏輯層主要定義與應(yīng)用層組件事件關(guān)聯(lián)的類和接口,用于向上層提供處理事件的服務(wù),主要包括表示事件域處理方法的Service接口和Service實(shí)現(xiàn)類。

由于系統(tǒng)中的DAO對(duì)象緊密關(guān)聯(lián),因此采用Facade模式將DAO對(duì)象封裝起來,應(yīng)用層在使用業(yè)務(wù)邏輯層的服務(wù)時(shí),僅僅與業(yè)務(wù)邏輯的Service接口發(fā)生聯(lián)系,無需知道業(yè)務(wù)服務(wù)組件的具體實(shí)現(xiàn),也無需了解底層的DAO對(duì)象。

3.持久層實(shí)現(xiàn)

數(shù)據(jù)持久層使用Hibernate持久化框架,也是使用接口與實(shí)現(xiàn)分開的方式。這樣可以在持久層使用多種持久化技術(shù)。持久層主要定義應(yīng)用程序通過具體的類與數(shù)據(jù)庫交互。遵循系統(tǒng)架構(gòu)圖,持久層的設(shè)計(jì)將使用 Facade模式定義系統(tǒng)中各個(gè)模塊的業(yè)務(wù)入口Facade接口,并定義它的實(shí)現(xiàn)類Impl,通過接口得到具體業(yè)務(wù)的DAO實(shí)現(xiàn)。通過DAO和對(duì)應(yīng)模式的Domain Object,就能對(duì)數(shù)據(jù)庫進(jìn)行增刪查改動(dòng)作。

4.數(shù)據(jù)庫設(shè)計(jì)

系統(tǒng)數(shù)據(jù)庫的設(shè)計(jì)實(shí)現(xiàn),對(duì)系統(tǒng)的應(yīng)用具有很重要的意義。根據(jù)檔案管理系統(tǒng)的實(shí)際數(shù)據(jù)量考慮,采用了Mysql數(shù)據(jù)庫。Mysql是一個(gè)精巧的SQL數(shù)據(jù)庫管理系統(tǒng),以操作簡(jiǎn)便著稱。由于其強(qiáng)大的功能、豐富的應(yīng)用編程接口以及精巧的系統(tǒng)結(jié)構(gòu)設(shè)計(jì),在基于數(shù)據(jù)庫的應(yīng)用軟件開發(fā)總得到了廣泛的應(yīng)用。

作為一個(gè)數(shù)據(jù)庫管理系統(tǒng),MySQL是客戶機(jī)/服務(wù)器模式的分布式系統(tǒng),由SQL服務(wù)器、客戶端、管理工具和應(yīng)用編程接口等一整套工具組成。它的平臺(tái)無關(guān)性優(yōu)點(diǎn)使其能在多個(gè)操作系統(tǒng)上運(yùn)行。此外,MySQL還是多線程的,不僅具有運(yùn)行速度快,可處理大批量數(shù)據(jù)等特點(diǎn),還支持多CPU使用。

檔案管理系統(tǒng)共建立了7張數(shù)據(jù)表:t_user(用戶表)、t_channel(菜單表)、t_news(新聞表)、t_org(機(jī)構(gòu)信息表)、t_para(參數(shù)信息表)、t_info(檔案信息表)、t_borrow(檔案借閱信息表)。

四、結(jié)束語

本文采用了基于Java平臺(tái)的多層架構(gòu),通過運(yùn)用Struts技術(shù),Spring技術(shù),Hibernate技術(shù),建立一套可伸縮性高的系統(tǒng)開發(fā)架構(gòu)。同時(shí),由于接口的采用,使系統(tǒng)可以很好地滿足與其它系統(tǒng)集成的需要,使利用計(jì)算機(jī)系統(tǒng)和網(wǎng)絡(luò)服務(wù)系統(tǒng)的檔案管理更加方便。 ■

參考文獻(xiàn)

[1] 孫更新,周峰.Struts框架結(jié)構(gòu)的Java Web開發(fā)技術(shù)基礎(chǔ)與實(shí)踐教程[M].北京:電子工業(yè)出版社.2008