ssh框架范文
時間:2023-03-28 21:03:06
導語:如何才能寫好一篇ssh框架,這就需要搜集整理更多的資料和文獻,歡迎閱讀由公務員之家整理的十篇范文,供你借鑒。
篇1
SSH是一種基于J2EE技術的MVC軟件開發(fā)框架,它可以大大降低J2EE程序開發(fā)的難度,提高開發(fā)效率?本文試圖通過對SSH框架的組成與功能進行深入的分析,揭示其較傳統(tǒng)J2EE開發(fā)工具的先進之處。
1. SSH框架技術簡述
集成SSH框架的系統(tǒng)從職責上分為四層:表示層、業(yè)務邏輯層、數(shù)據(jù)持久層和域模塊層,以幫助開發(fā)人員在短期內(nèi)搭建結構清晰、可復用性好、維護方便的Web應用程序。其中使用Struts作為系統(tǒng)的整體基礎架構,負責MVC的分離,在Struts框架的模型部分,利用Hibernate框架對持久層提供支持,業(yè)務層用Spring支持。相比傳統(tǒng)的J2EE開發(fā)工具,它具有一系列獨特的優(yōu)點?
首先,SSH框架能夠有效的降低開發(fā)成本?縮短開發(fā)周期?SSH作為一款開源的框架,無需部署在成本極高的大型服務器上,很多時候只需要配合APACHE一類較便宜的服務器使用。
其次,SSH作為一款輕量級的框架可以有效降低系統(tǒng)開銷,同時它還可以與異步JavaScript和XML框架同時使用,不僅能夠?qū)τ脩趔w驗產(chǎn)生極大的改善,且有助于提升系統(tǒng)性能。
最后,由于SSH框架建立于J2EE的基礎之上,所以其同時具備了J2EE的安全性與跨平臺優(yōu)勢?同時由于其往往將組件相關的配置與關系寫入XML配置文件,使其在面對需求變化時可通過簡單的對配置信息的修改來加以實現(xiàn)而無需對系統(tǒng)進行大的修改。2. 表示層框架Struts簡介
最初Struts于2002年問世的時候,由于其創(chuàng)始人希望其能夠?qū)撕瀻炫cJSP等開發(fā)技術有所助益,所以它被設計成了一個開源項目。它很好的對MVC系統(tǒng)的開發(fā)提供了底層支持,有效的縮短了運用MVC模型對WEB應用的開發(fā)周期,最終成為了MVC模式事實上的行業(yè)標準。
Struts由四個組件協(xié)同工作,其中ActionServlet類是中央控制器,在每個項目中唯一存在。而Action作為分控制器對具體流程進行實際上的控制,調(diào)用相應的業(yè)務邏輯模塊來實現(xiàn)功能并送出結果?ActionMapping作用是幫助控制器將請求映射到操作,ActionForm的作用則是接受和存儲表示層中接受的數(shù)據(jù)。這四部分共同實現(xiàn)了Struts框架對流程的控制,
由于Struts框架屬于開源項目,這給了我們深入理解其內(nèi)部實現(xiàn)機制的機會?總體而言,Struts的優(yōu)勢很明顯?它的優(yōu)點在于它擁有大量的成功案例可供開發(fā)者借鑒?同時提供了豐富的標記庫(Taglib),可大大提高開發(fā)的效率?而它將表現(xiàn)與邏輯分離的做法,使得結構更加清晰,有助于開發(fā)者將精力集中于業(yè)務邏輯的實現(xiàn)?最后,它具有優(yōu)秀的頁面導航功能,這對后期的維護有著不可估量的好處。3. 持久層框架Hibernate簡介
Hibernate是一款開源的對象——關系映射框架,它對JDBCAPI進行了極其輕量級的對象封裝,從而極大的擴展了開發(fā)人員對數(shù)據(jù)庫的操縱程度,同時它封裝了數(shù)據(jù)訪問的細節(jié),使得開發(fā)者可以將更多的精力集中在業(yè)務邏輯上。
Hibernate有6個核心接口,分別是擁有負責將其初始化的SessionFactory接口,負責執(zhí)行被持久化對象的CRUD操作的Session接口,負責事務相關的操作的可選接口Transaction以及負責執(zhí)行各種數(shù)據(jù)庫查詢Query接口與Criteria接口?Hibernate通過這些接口,對持久化對象進行各種存取操作并進行事務控制。
Hibernate主要有四塊內(nèi)容:持久化類PO,它是數(shù)據(jù)庫表的一個映射,是Hibernate的操作對象,而操作結果會反映到對應的數(shù)據(jù)庫表中,映射文件XMLMapping,它存放著PO和數(shù)據(jù)庫表的映射信息,如表名和類名的對應,PO的屬性與數(shù)據(jù)庫表中字段的對應,hibernate.cfg.xml,存放著連接數(shù)據(jù)庫的配置信息已經(jīng)映射文件的路徑,在Hibernate初始化時Configuration會加載該文件信息到計算機內(nèi)存,并創(chuàng)建一個SessionFactory對象,把讀入的配置信息拷貝到SessionFactory對象的緩存中,HibernateAPI,主要是前文中所述的六大接口,彼此配合最終實現(xiàn)Hibernate對PO的各種操作并持久化到數(shù)據(jù)庫中。4. Spring框架簡介
Spring框架提供了一種能夠完全獨立于各種應用服務器并可與現(xiàn)有框架無縫整合的解決方案,其主要通過控制反轉(zhuǎn)與面向方面編程兩種方式來進行實現(xiàn),其主要優(yōu)點在于無論你是否使用了EJB,SPRING都能夠有效的對你的中間層對象進行組織,它為數(shù)據(jù)存取提供了一個統(tǒng)一的框架,并能夠以一種統(tǒng)一的方式對不同的程序與項目的配置文件進行處理,它是一個全面的解決方案,包括了非常豐富的內(nèi)容,包括視圖層?模型層?數(shù)據(jù)層等,它提供了很多原來只有EJB能提供的功能(如聲明式事務管理),卻又無須運行在EJB容器上。
Spring框架由七個有著明確定義的模塊組成,其中SpringCore是它的基礎部分,是控制反轉(zhuǎn)的承載容器?而在此基礎上衍生出來的SpringAOP則提供了對面向類編程的支持,Springweb與Springorm則分別提供了對MVC框架與ORM框架的支持,SpringDAO則簡化了JDBC編程,使代碼更健壯,SpringContext作為一個強大的集成工具箱,有利于進行企業(yè)級程序的開發(fā),而相比之下,SpringWebMVC則聲名不彰,盡管它作為一款MVC框架提供了比Struts更自由的配置度但卻未能得到廣泛的應用,以上七個模塊均可單獨或聯(lián)合實現(xiàn),具有較高的自由度。5. 使用Spring對Struts與Hibernate加以整合
我們從前文中可以清晰的看到,Struts是目前應用于MVC框架中的業(yè)界實際標準,其具備高度的可靠性與穩(wěn)定性,同時將表現(xiàn)與邏輯分離,從而使得結構更加清晰?同時提供了豐富的標記庫(Taglib)與頁面導航,大大提高了開發(fā)的效率與易維護性,但是在模型層卻缺少相應的實現(xiàn)。
而Hibernate作為目前業(yè)界最成熟的持久層框架之一,封裝了數(shù)據(jù)訪問的細節(jié),使得開發(fā)者可以將更多的精力集中在業(yè)務邏輯上,極大的提高了開發(fā)效率。
SSH框架的指導思想就是將這兩個框架有機的整合在一起,充分發(fā)揮出二者各自的優(yōu)點, Spring通過Springweb與SpringORM兩個模塊分別對Struts和Hibernate兩個框架進行了整合,為企業(yè)級的應用程序提供了一套模塊化的一攬子解決方案,在讓前者發(fā)揮出其對程序流程的良好控制作用的同時讓后者負責數(shù)據(jù)庫的訪問,以達到優(yōu)勢互補、降低開發(fā)難度、提高開發(fā)效率的目的。
篇2
關鍵詞:Java;中文亂碼;ssh;數(shù)據(jù)庫;參數(shù)傳遞
中圖分類號:TP311文獻標識碼:A文章編號: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的應用中,中文字符亂碼問題是個由來已久和讓人頭疼的問題,尤其是剛剛接觸Java Web編程的人員,往往在解決中文字符亂碼問題上花費了大量的時間和精力。
要了解Java中文亂碼問題的產(chǎn)生原因,先要從Java的字符編碼說起,常用的Java字符編碼集有以下幾種:
ASCII(American Standard Code for Information Interchange,美國信息互換標準代碼),是基于常用的英文字符的一套電腦編碼系統(tǒng)。我們知道英文經(jīng)常使用的字符、數(shù)字符號被計算機處理時都是以二進制碼的形式出現(xiàn)的。這種二進制碼的形式就是所謂的ASCII碼。每個ASCII與一個8位二進制數(shù)對應。其最高位是0,相應的十進制數(shù)是0-127。另有128個擴展的ASCII碼,最高位都是1,由一些制表符和其它符號組成。ASCII是現(xiàn)今最通用的單字節(jié)編碼系統(tǒng)。
GB2312:GB2312碼是中華人民共和國國家漢字信息交換用編碼,全稱《信息交換用漢字編碼字符集-基本集》。主要用于給每個中文字符指定相應的數(shù)字,也就是通行編碼。一個中文字符用兩個字節(jié)的數(shù)字來表示,為了與ASCII碼有所區(qū)別,將中文字符每一個字節(jié)的最高位置都用1來表示。
GBK:為了對更多的字符進行編碼,國家又了新的編碼系統(tǒng)GBK(GBK的K是“擴展”的漢語拼音的第一個字母)。在新的編碼系統(tǒng)里,除了兼容GB2312外,還對繁體中文、一些不常用的漢字和許多符號進行了編碼。
ISO-8859-1:ISO-8859-1編碼是單字節(jié)編碼,向下兼容ASCII,其編碼范圍是0x00-0xFF,0x00-0x7F之間完全和ASCII一致,0x80-0x9F之間是控制字符,0xA0-0xFF之間是文字符號。 ISO-8859-1收錄的字符除ASCII收錄的字符外,還包括西歐語言、希臘語、泰語、阿拉伯語、希伯來語對應的文字符號。歐元符號出現(xiàn)的比較晚,沒有被收錄在ISO-8859-1當中。
Unicode:這是一種通用的字符集,對所有語言的文字進行了統(tǒng)一編碼,對每一個字符都用2個字節(jié)來表示,對于英文字符前面加“0”字節(jié)的策略實現(xiàn)等長兼容。如“a”的ASCII碼為0x61,Unicode就為0x00,0x61。
UTF-8:Unicode Transformation Format-8bit。是用以解決國際上字符的一種多字節(jié)編碼,它對英文使用8位(即一個字節(jié)),中文使用24為(三個字節(jié))來編碼。UTF-8包含全世界所有國家需要用到的字符,是國際編碼,通用性強。UTF-8編碼的文字可以在各國支持UTF8字符集的瀏覽器上顯示。如,如果是UTF8編碼,則在外國人的英文IE上也能顯示中文,他們無需下載IE的中文語言支持包。
Java使用Unicode來存儲字符數(shù)據(jù),處理字符時通常有3個步驟:
1)按給定的字符編碼形式,從源輸入流中讀取字符數(shù)據(jù);
2)以Unicode編碼形式將字符數(shù)據(jù)存儲在內(nèi)存中;
3)按指定的字符編碼形式,將字符數(shù)據(jù)編碼并寫入目的輸入流中。
所以Java處理字符時總是經(jīng)過了兩次編碼轉(zhuǎn)換,一次是從指定編碼轉(zhuǎn)換為Unicode編碼,一次是從Unicode編碼轉(zhuǎn)換為指定編碼。如果讀入時用錯誤的形式解碼字符,則內(nèi)存存儲的是錯誤的Unicode字符。而從最初文件中讀出的字符數(shù)據(jù),到最終在屏幕終端顯示這些字符,期間經(jīng)過了應用程序的多次轉(zhuǎn)換。如果中間某次字符處理,用錯誤的編碼方式解碼了從輸入流讀取的字符數(shù)據(jù),或用錯誤的編碼方式將字符寫入輸出流,則下一個字符數(shù)據(jù)的接收者就會編解碼出錯,從而導致最終顯示亂碼。
2 中文字符亂碼問題的分類和解決方法
SSH框架即strut+hibernate+spring,是目前比較流行的開源框架,提出了一種開發(fā)J2EE Web應用的輕量級解決方案,以幫助開發(fā)人員在短期內(nèi)搭建結構清晰、可復用性好、維護方便的Web應用程序。本文分析了在開發(fā)工具為Eclipse,數(shù)據(jù)庫為oracle,開發(fā)框架為SSH,應用服務器為tomcat的環(huán)境下中文字符亂碼問題的分類和解決方法。
2.1 數(shù)據(jù)庫寫入和讀出亂碼
一旦數(shù)據(jù)庫創(chuàng)建后,數(shù)據(jù)庫的字符集是不能改變的。因此,在設計和安裝之初考慮使用哪一種字符集是十分重要的。數(shù)據(jù)庫字符集應該是操作系統(tǒng)本地字符集的一個超集。存取數(shù)據(jù)庫的客戶使用的字符集將決定選擇哪一個超集,即數(shù)據(jù)庫字符集應該是所有客戶字符集的超集。
在oracle中,我們關心的是三個地方的字符集:oracle服務器內(nèi)部的字符集;ns_lang變量里保存的字符集,客戶端應用的字符集。在Java編程中,需要統(tǒng)一Java應用中的字符集,oracle服務器內(nèi)部的字符集,ns_lang變量里保存的字符集。通常,在Java開發(fā)中, oracle10g在創(chuàng)建數(shù)據(jù)庫實例時需要指定SIMPLIFIED CHINESE_CHINA.ZHS16GBK字符集。有時,在安裝oracle過程中自動創(chuàng)建數(shù)據(jù)庫實例時使用AMERICAN_AMERICA.WE8ISO8859P1字符集或者一些與Java字符集不兼容的字符集,就會出現(xiàn)亂碼問題,這時需要先安裝數(shù)據(jù)庫,不自動生成數(shù)據(jù)庫實例,在安裝完數(shù)據(jù)庫之后,再通過oracle配置和移植工具DataBase Configuration Assistance創(chuàng)建數(shù)據(jù)庫,在圖1的界面中選擇ZHS16GBK字符集。
2.2 JSP頁面顯示和傳遞中文參數(shù)亂碼
要解決這類亂碼問題,涉及到幾個方面的設置:
1)在struts的配置文件struts.properties中設置struts.i18n.encoding=gbk,struts.i18n.encoding用在了請求和返回兩個階段中流的編碼方式,該參數(shù)為gbk時,相當于調(diào)用HttpServletRequest的setCharacterEncoding()方法。
2)在web.xml中添加下面的程序代碼,指定字符過濾器對字符的編碼方式為gbk。
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
gbk
encodingFilter
/*
3)在編輯器中用gbk編碼保存JSP文件,并設置JSP文件開頭的,其中pageEncoding用來告訴tomcat此文件所用的字符編碼。Tomcat以此編碼來讀取JSP文件并編譯。還要設置,當JSP頁面用post方法提交數(shù)據(jù)時,用此處指定的編碼方式編碼。
4)設置Tomcat的URIEncoding,如果URIEncoding不加以設置,則默認使用ISO-8859-1來解碼URL,設置后便用設置的編碼方式來解碼。這個解碼同時包括Path部分和查詢字符串部分。即在Tomcat配置端口的語句中加入URIEncoding="GBK"。
進行完這些設置之后,基本上就不會出現(xiàn)JSP頁面亂碼問題了。
2.3 Action中redirect傳遞中文參數(shù)亂碼
在開發(fā)中有時需要用response.sendRedirect做轉(zhuǎn)向,它其實是向瀏覽器發(fā)送一個特別的Header,然后由瀏覽器來做轉(zhuǎn)向,轉(zhuǎn)到指定的頁面,所以用sendRedirect時,瀏覽器的地址欄上能夠看到地址的變化。通常sendRedirect需要把參數(shù)掛在地址后面以&分隔傳遞,傳遞中文字符時,有時會需要亂碼,這時就需要用到Java的URLEncoder類了,這個類有個encode方法,形式為public static String encode(String s, String encoding),在encoding參數(shù)中,可以指定字符編碼的方式,通常我們傳遞中文字符時,需要這樣寫ceshi.jsp?param1=.URLEncoder.encode(“你好”,”gbk”)。這樣就能防止傳遞的中文參數(shù)亂碼了。
2.4 Ajax傳遞中文參數(shù)亂碼
Ajax即“Asynchronous JavaScript and XML”(異步JavaScript和XML)。Ajax提供與服務器異步通信的能力,從而使用戶從請求/響應的循環(huán)中解脫出來。借助于Ajax,可以在用戶單擊按鈕時,使用JavaScript和DHTML立即更新UI,并向服務器發(fā)出異步請求,以執(zhí)行更新或查詢數(shù)據(jù)庫。當請求返回時,就可以使用JavaScript和CSS來相應地更新UI,而不是刷新整個頁面。最重要的是,用戶甚至不知道瀏覽器正在與服務器通信:Web站點看起來是即時響應的。
Ajax默認中文提交以UTF-8格式,解決Ajax中文參數(shù)亂碼問題有兩種方式,一種是提交中文后,在服務端用UTF-8編碼提取參數(shù):request.setCharsetEncoding(“UTF-8”);String str=request.getParameter(“param”);另一種是在Jsp頁面用encodeURI編碼兩次,即encodeURI(encodeURI(”str”)),然后在服務端用String str=request.getParameter(“param”); .URIDecoder.decode(str, “UTF-8”)。
3 結束語
本文介紹了在開發(fā)工具為Eclipse,數(shù)據(jù)庫選用oracle,開發(fā)框架選用SSH,應用服務器選擇tomcat的環(huán)境下中文字符亂碼問題的分類和解決。根據(jù)環(huán)境的不同,可將文中編碼為GBK的部分替換為其它編碼來解決中文亂碼問題。
參考文獻:
[1] 李剛.輕量級J2EE企業(yè)應用實戰(zhàn)[M].北京:電子工業(yè)出版社,2007.
篇3
關鍵詞:Android;SSH;框架;客戶端;服務器端
中圖法分類號:TP311.52
隨著人們要求的提高以及3G網(wǎng)絡的發(fā)展,傳統(tǒng)互聯(lián)網(wǎng)已不能滿足人們的要求,移動互聯(lián)網(wǎng)應運而生。Android系統(tǒng)作為目前最為流行的智能手機平臺,其相關應用越來越多。本系統(tǒng)開發(fā)了一個基于Android的校園購物平臺,為在校學生提供一個買賣商品的平臺,滿足學生物品交換的需求。
校園購物系統(tǒng)(Business In School,簡稱BIS),是一個學生校內(nèi)交易的平臺,用戶可以使用該平臺進行商品檢索,找到自己需要的商品,聯(lián)系賣家進行面對面交易,也可以二手交易,或者做為一個換客,以物易物。由于平臺只面向校內(nèi),所以不提供交易風險擔保,平臺只是提供給買家和賣家一個相互了解渠道。
1 系統(tǒng)架構設計
校園購物平臺有服務端及客戶端,客戶端主要用到Android技術。
1.1 Android客戶端設計
客戶端使用Android技術[1],借助該技術可以將客戶端系統(tǒng)很好的移植到手機上,使用戶可以隨時隨地登錄到此系統(tǒng)上。客戶端頁面主要由所謂的活動(Activity)組成,每個活動之間由Internet負責頁面的跳轉(zhuǎn)及頁面之間的數(shù)據(jù)傳遞。
1.2 系統(tǒng)服務器端架構設計
校園購物平臺的服務端采用MVC分層設計思想,將各個層面互相獨立,便于系統(tǒng)的開發(fā)以及后期的維護。本系統(tǒng)采用SSH(Structs+Spring+Hibernate)框架來實現(xiàn),整個服務器端擴展性強,可維護性高。數(shù)據(jù)庫通過利用Hibernate的數(shù)據(jù)庫映射工具完成從表到Java類的映射,通過Hibernate對該對象完成持久化操作;然后通過使用Spring的控制反轉(zhuǎn)機制(IoC)將對象之間的依賴關系交由Spring進行控制,從而避免硬編碼所造成的過度程序耦合[2]。
表示層,負責邏輯層與表現(xiàn)層的交互。調(diào)用業(yè)務邏輯層,并將業(yè)務數(shù)據(jù)返回給表現(xiàn)層作組織表現(xiàn),該部分采用Structs框架的Action處理??刂茖迂撠煍r截所有Http請求,然后根據(jù)用戶請求決定是否需要調(diào)用業(yè)務邏輯控制器,如果需要則請求轉(zhuǎn)發(fā)給Action處理,否則直接轉(zhuǎn)向請求的JSP頁面。業(yè)務控制層是整個系統(tǒng)的核心部分,它與實現(xiàn)的業(yè)務功能緊密聯(lián)系,其中的各個功能模塊各自實現(xiàn)不同的業(yè)務功能[3]。
業(yè)務邏輯層,負責實現(xiàn)業(yè)務邏輯,該層以DAO為基礎,通過對DAO組件的模式包裝,實現(xiàn)業(yè)務層組件與具體的數(shù)據(jù)庫訪問技術分離,使所有的數(shù)據(jù)庫訪問依賴于DAO組件,這樣就可以把邏輯層與DAO層分開,達到松散耦合的效果[4],完成系統(tǒng)所要求的業(yè)務邏輯。
數(shù)據(jù)持久層,負責與持久化對象交互。該層封裝了數(shù)據(jù)的增、刪、改、查的操作。
持久化對象,通過實體關系映射工具將關系型數(shù)據(jù)庫的數(shù)據(jù)映射成對象,很方便地實現(xiàn)以面向?qū)ο蠓绞讲僮鲾?shù)據(jù)庫,該系統(tǒng)采用Hibernate作為框架。Spring框架貫穿整個中間層,將Web層、業(yè)務邏輯層、DAO層和持久化對象無縫整合,其數(shù)據(jù)服務層用來存放數(shù)據(jù)。
2.2 服務器端實現(xiàn)
2.3 運行效果圖
3 結語
本文設計并實現(xiàn)了基于Android平臺的校園購物系統(tǒng)。系統(tǒng)在實現(xiàn)過程中結合了軟件工程理論和先進的智能手機應用,開發(fā)出符合手機終端用戶行為習慣的系統(tǒng),以方便自己的生活和學習,具有很大的實用價值。
參考文獻:
[1][英]梅爾.Android高級編程[M].王鵬杰,霍建同譯.北京:清華大學出版社,2010.
[2]李剛.整合Struts+ Hibernate+ Spring應用開發(fā)詳解[M].北京:清華大學出版社,2007.
[3]余志龍.GoogleAndroidSDK開發(fā)范例大全[M].北京:人民郵電出版社,2O10.
[4]孫鑫.Struts2深入詳解[M].北京:電子工業(yè)出版社,2008.
[5]李寧.人人都玩開心網(wǎng):gxtJS+Android+SSH整合開發(fā)Web與移動SNS[M].北京:電子工業(yè)出版社,2010.
[6]徐玲,蔣欣志,張杰.手機二維碼識別系統(tǒng)的設計與實現(xiàn)[J].計算機應用,2012,32(5):1474-1476.
篇4
關鍵詞:Spring Struts Hibernate 教師科研管理系統(tǒng)
中圖分類號:TP311.52 文獻標識碼:A 文章編號:1672-3791(2016)02(a)-0010-02
針對教學科研工作中存在的以下問題:更新不及時、新舊信息錯雜、獲取信息復雜,相關管理人員管理工作繁重等,筆者進行了教學科研Web系統(tǒng)的開發(fā)。以期解決現(xiàn)行管理過程中存在的問題,使對教學科研活動的管理有序有效地進行,并提供多種查詢統(tǒng)計功能和教師業(yè)績點計算功能,進一步減輕管理員的工作強度,同時實行多權限設置,增加權限賦予功能,使得查詢統(tǒng)計功能在擁有安全性的同時,加強了靈活性[2]。
該論文將會講述運用Web應用技術,采用目前較流行的Spring+Struts+Hibernate開發(fā)框架,實現(xiàn)教學科研管理系統(tǒng),其中詳細講述管理員功能模塊的設計與實現(xiàn)[3]。
1 系統(tǒng)功能分析
該文主要是對教師科研信息管理系統(tǒng)中管理員模塊的設計,該模塊主要包括資料上傳、公告、授權功能、審批管理、人員管理和業(yè)績點計算等功能。主要的使用者是管理員。
1.1 通知功能
在管理員登錄之后,進入管理員界面。在此頁面,可以進入通知頁面,其中包括兩部分,通知和通知管理。
管理員可以新建通知,對新建的通知,管理員可以,或存為草稿日后,或取消。對于存為草稿的通知,管理員可以修改后,或修改后存為草稿,或取消,或直接刪除。通知之后,系統(tǒng)會發(fā)送郵件通知所有用戶,通知,主要便于及時查看。
提交完成之后的通知則可通過通知管理功能進行管理,同樣可以對已的新聞進行刪除或修改操作,同時考慮到的通知可能會很多,在界面中增加了分頁的功能。對于修改已的通知,系統(tǒng)將會發(fā)郵件通知用戶通知已經(jīng)改變,并將該通知置頂。
1.2 審批管理功能
審批管理功能主要分為,審批上傳資料和管理上傳資料兩塊,是對用戶上傳的論文、著作、科研項目、專利發(fā)明、學術活動及學院相關資料等進行審批和統(tǒng)一管理。鑒于在功能模塊上的類似,在此,以審批論文信息為例對審批功能的實現(xiàn)進行說明。
點擊審批論文信息,進入待審批列表界面,表中將羅列論文的一些基本信息。點擊論文題目,打開該論文的相關信息,進行審批,管理員沒有權力更改用戶提交的論文信息,如果這些信息不符合要求,管理員則可以拒絕,并填寫審批不通過的理由,同時填寫自己郵箱密碼,系統(tǒng)將通過該管理員的郵箱向用戶發(fā)出郵件,通知用戶其論文未通過審批,并要求其進行修改,再提交。同樣,若審批通過,管理員也會通過系統(tǒng)發(fā)郵件給用戶,通知他論文審批通過。
在管理上傳資料中,主要是對于那些超過了保存期限的資料,進行備份或刪除,然后將其移出服務器。
1.3 人員管理功能
人員管理功能是對系統(tǒng)用戶的基本信息的管理,也包括兩個功能,人員添加和人員修改。人員添加,主要是用于添加新用戶??紤]到本系統(tǒng)是內(nèi)部服務系統(tǒng),因此不通過用戶自行注冊,而是通過管理員添加來完成用戶添加。管理員需填寫用戶的基本信息,并將用戶的登錄賬號告知用戶。
考慮到信息的公正性,用戶不具備對其基本信息的改動權限,因此如果基本信息改動,用戶應及時通知管理員,進行修改。管理員在人員管理中可以進行用戶資料的修改,同時也可將離校教師的賬戶刪除。
1.4 授權權限功能
授權權限是對用戶查看統(tǒng)計信息權限的管理。管理員可根據(jù)用戶的申請,賦予用戶查看統(tǒng)計信息的權限,并適時關閉其權限。
管理員在授予權限頁面中賦予用戶權限,可一次賦予一個或多個用戶,如果拒絕用戶的權限申請,需填寫拒絕理由。
管理員通過權限管理,可取消用戶的權限。在用戶的權限到期之后,管理員可取消用戶的查看統(tǒng)計權限。
1.5 業(yè)績點計算功能
業(yè)績點計算主要是將每個用戶的總的業(yè)績點統(tǒng)計出來,羅列在一張表中,管理員可以通過備份,將上一年的業(yè)績點導出,然后存放在服務器上,同時通過點擊每個用戶的工號,可查看每個用戶具體的業(yè)績點情況。
1.6 資料上傳功能
資料上傳功能主要是對課表信息和教材信息的導入和管理。管理員首先將規(guī)定列名的Excel表上傳到服務器,然后再通過資料上傳界面中的導入功能,將該表導入到數(shù)據(jù)庫中,從而實現(xiàn)課表信息和教材信息的導入[1]。
同時,管理員可以通過上傳資料中的管理功能實現(xiàn)對數(shù)據(jù)庫中的課程信息和教材信息的修改或刪除。
2 系統(tǒng)實現(xiàn)
在此,按照系統(tǒng)架構逐步闡述管理員功能的主要實現(xiàn)框架。該系統(tǒng)主要分為3個層次,表現(xiàn)層、中間層及數(shù)據(jù)庫層[5]。
2.1 表現(xiàn)層
表現(xiàn)層提供與用戶交互的界面,用Web頁面實現(xiàn)。主要使用JSP技術實現(xiàn),在個別靜態(tài)頁面中,使用HTML靜態(tài)技術實現(xiàn)[6]。
2.2 中間層
該系統(tǒng)又將中間層劃分為Web層、Service層、DAO層和common層。
(1)Web層。
該層包含了Formbean和Action兩部分,同時也通過這兩部分分別聯(lián)系表現(xiàn)層和業(yè)務邏輯層,F(xiàn)ormbean對應了JSP頁面中的內(nèi)容,而Action則調(diào)用了業(yè)務邏輯層中的內(nèi)容。
(2)Service層。
在該系統(tǒng)中,Service層完成了業(yè)務邏輯層的工作,其中主要是對Hibernate所封裝的對數(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("通過主鍵獲取日報錯誤");
}
return news;
}
(3)DAO層。
該層主要包括DAO層和PO層,其中DAO層的類都繼承了common層中封裝了Hibernate對數(shù)據(jù)庫的操作的類CommonDAOHibernate.java,而不是直接封裝Hibernate對數(shù)據(jù)庫的訪問。
PO,持久化對象,其中完全采用普通Java對象作為持久化對象使用,也是將數(shù)據(jù)庫中的對象對應到Java對象,從而使對數(shù)據(jù)庫的操作更加簡單。大家可以利用MyEclipse自動生成POJO及其對應的配置文件。
(4)common層。
該層存放了公用的代碼,包括對數(shù)據(jù)的增、刪、查、改操作的封裝,異常處理,日志處理,數(shù)據(jù)類型的轉(zhuǎn)換,時間的處理,文件上傳與發(fā)送郵件的方法,基礎Action類,以及系統(tǒng)要使用的常量。其中,對數(shù)據(jù)庫的操作的封裝主要是由MyEclipse中的方法自動生成。
2.3 數(shù)據(jù)庫層
數(shù)據(jù)層負責存放和管理應用的持久性業(yè)務數(shù)據(jù)。Hibernate提供了從映射文件到數(shù)據(jù)庫Schema的轉(zhuǎn)換工具,即hbm2ddl[7]。
執(zhí)行該任務的Java類net.Sf.Hibernate.tool.hbm2bbl.SchemaExportTask。在該系統(tǒng)中是應用MyEclipse中的自動轉(zhuǎn)換工具實現(xiàn)數(shù)據(jù)庫與持久性數(shù)據(jù)的對應。
3 結語
該系統(tǒng)結構清晰,注重功能的功能性和使用方便性。根據(jù)各功能的特點,將各功能的流程考慮周到,流程設計完整。用戶如有需要,可以申請查看統(tǒng)計權限,系統(tǒng)具有一定的靈活性。同時應用了SSH架構,在簡化代碼的同時,使系統(tǒng)具有較強的可擴展性。
參考文獻
[1] 張芹.關于軟件開發(fā)中數(shù)據(jù)庫設計相關問題的探討[J].信息通信,2015(12):166-167.
[2] 宋陽.新時期高??蒲行畔⒒ㄔO工作思考[J].中國高校科技,2014(7):71-73.
[3] 陳亞輝,繆勇.Struts+Spring+Hibernate框架技術與項目實戰(zhàn)[M].北京:清華大學出版社,2012.
[4] 傅偉,高海俠,涂剛,等.基于J2ME-J2EE的高校科研信息管理系統(tǒng)的設計與實現(xiàn)[J].微計算機應用,2011(7):76-80.
[5] 王進.B/S模式下的三層架構模式[J].軟件導刊,2011(3):30-31.
篇5
【關鍵詞】Struts2;Hibernate;辦公自動化
1.介紹
目前,我們處于一個信息化和大數(shù)據(jù)的時代,各行各業(yè)都需要對大量信息進行處理。在日常辦公中,人們開始面對越來越多的復雜與繁冗的數(shù)據(jù),傳統(tǒng)的辦公方式逐漸無法滿足人類和社會發(fā)展的需求。計算機技術的迅猛發(fā)展,使其在辦公室中的應用越來越廣泛,辦公自動化開始成為主流的辦公方式。國務院電子振興辦辦公自動化專家會議對辦公自動化作了如下定義:辦公自動化是利用先進的科學技術,不斷使人的辦公業(yè)務活動物化于人以外的各種設備中,并由這些設備與辦公室人員構成服務于某種目標的人機信息處理系統(tǒng)。如今,辦公自動化系統(tǒng)已經(jīng)逐漸進入各個行業(yè),其便利的信息交流方式,較高的辦公工作效率受到了人們的歡迎[1]。
2.系統(tǒng)設計
2.1 系統(tǒng)目標
本文從辦公自動化系統(tǒng)的基礎要求出發(fā),將辦公的方便性和高效性考慮入內(nèi),達到降低系統(tǒng)的耦合性的目標,并實現(xiàn)OA辦公自動化系統(tǒng)的主要功能模塊的操作。這樣可以保證系統(tǒng)實現(xiàn)后的高效性、高擴展性和靈活性,達到協(xié)助工作人員處理日常工作的目標,從而減少了管理的繁瑣,實現(xiàn)辦公自動化和信息化。
系統(tǒng)采用BS構架模式并結合時下最流行的SSH框架,利用因特網(wǎng)信息交流的方便性與高效性,合理設計與規(guī)劃,最終實現(xiàn)員工信息管理、在線交流信息管理、個人公開文件夾管理、會議安排管理等典型辦公自動化功能。
2.2 相關框架介紹
1)Struts2框架介紹:Struts2框架是在Struts1和WebWork技術基礎上進行合并而產(chǎn)生的。Struts2以WebWork為核心,采用攔截器的機制實現(xiàn)用戶的請求。其主要分為模型、視圖和控制器三部分(即MVC),主要的設計理念是通過控制器解除表現(xiàn)邏輯和業(yè)務邏輯的耦合性,以提高系統(tǒng)的可維護性、可擴展性和重用性。
2)Hibernate框架介紹:Hibernate是一個開源的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,方便開發(fā)人員開發(fā),使其可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫,從而提高開發(fā)效率[2]。Hibernate的HQL查詢數(shù)據(jù)語言是根據(jù)SQL面向?qū)ο蟮淖钚〉臄U展來設計的,在對象和關系領域間提供了一個交互的橋。
3)Spring框架介紹:spring是為了解決應用程序開發(fā)復雜性而創(chuàng)建的一個開源框架。其主要優(yōu)勢之一是分層架構,分層架構方便開發(fā)者選擇組件。Spring提供了面向切面編程的豐富支持,允許通過分離應用的業(yè)務邏輯和系統(tǒng)級服務進行內(nèi)聚性開發(fā)。其簡單性、可測試性和松耦合性使得應用程序受益。
2.3 功能模塊劃分
經(jīng)過我們對辦公單位實際情況考察并認真分析后,本系統(tǒng)包括的用戶有普通員工、部門領導和系統(tǒng)管理員三個角色,其分別具有不同的權限。普通員工具有個人信息的修改功能,可以查看部門通訊錄,管理個人在線信息,并可以查看個人日程安排和委托他人事項。部門領導不僅具有普通員工所有功能,還可以安排會議,查看會議記錄,并安排所在部門員工的待辦事項。系統(tǒng)管理員的權限最高,主要負責管理通知通告,具有對部門信息、員工信息和角色信息的增刪查改的功能。該OA辦公自動化系統(tǒng)功能體系結構如圖2.1所示:
2.4 數(shù)據(jù)庫設計
OA辦公自動化系統(tǒng)的設計離不開數(shù)據(jù)庫的設計,而該系統(tǒng)在設計過程中遇到的主要難點也是數(shù)據(jù)庫設計。數(shù)據(jù)庫的設計在整個系統(tǒng)設計過程當中扮演著舉足輕重的角色,一個好的數(shù)據(jù)庫能對系統(tǒng)的實現(xiàn)起到事半功倍的作用。系統(tǒng)在數(shù)據(jù)庫設計中需要充分考慮數(shù)據(jù)之間聯(lián)系,保證數(shù)據(jù)庫設計的規(guī)范化,從而在系統(tǒng)實現(xiàn)和之后的維護過程中不會發(fā)生插入、刪除和更新異常,使得后續(xù)工作高效的進行。本系統(tǒng)主要數(shù)據(jù)表列舉如下:
該系統(tǒng)數(shù)據(jù)庫管理系統(tǒng)采用MySQL,其開源性、多線程性和健壯性深受人們的歡迎[3]。數(shù)據(jù)庫部署于后臺服務器中,只有系統(tǒng)管理人員才能通過一定的認證訪問數(shù)據(jù)庫表中的數(shù)據(jù)。除此以外,系統(tǒng)不提供任何訪問數(shù)據(jù)庫的接口。
3.系統(tǒng)實現(xiàn)
3.1 關鍵模塊實現(xiàn)
在OA辦公自動化系統(tǒng)實現(xiàn)過程中,在線信息和工作安排兩個模塊相對于其它較為復雜,同時也耗費了大量的精力和時間。在此將這兩個模塊的實現(xiàn)過程詳細介紹如下:
a)在線信息管理
在線信息模塊相對復雜主要是因為在系統(tǒng)的首頁需要動態(tài)地顯示用戶的未讀信息數(shù)目,需要用到局部動態(tài)刷新技術——Ajax技術[4]。同時,用戶對在線信息模塊的增、刪、查、改操作相對于其它模塊也更多,因此對我們的數(shù)據(jù)庫設計提出了更高的要求,這也增加了該模塊的復雜度。在數(shù)據(jù)庫表的設計過程中,難度主要集中在對于已讀信息、未讀信息、已發(fā)信息、草稿等的表示和狀態(tài)轉(zhuǎn)換的設計,需要設計人員極大的耐心。
b)工作安排管理
工作安排管理模塊涉及到員工之間相互指定待辦事項,而該功能又需得到相互間的授權,使其業(yè)務邏輯較為復雜。同時,待辦事項的狀態(tài)最終會從未完成轉(zhuǎn)換為已完成,這也增加了該模塊的難度。
授權的業(yè)務流程也較為復雜,例如員工A想向員工B指定代辦任務,員工A必須首先得到員工B的授權。與此同時,在得到B的授權后,A可以向B指定代辦任務,B也可隨時解除授權。因此,在設計該模塊的數(shù)據(jù)庫表時需要考慮復雜的邏輯關系,對數(shù)據(jù)庫的設計能力提出了很高的要求。此處涉及到了user表、authorization表以及assignment表大量的增、刪、查、改的操作,工作量較大。
3.2 技術難點
在文件管理功能模塊中,維護與管理文件上傳和下載相對于其它操作較為復雜,下載模塊需要進行較為復雜的struts配置,同時上傳和下載時還要進行編碼轉(zhuǎn)換。
針對文件夾/文件的操作主要是增加文件夾、上傳文件、更改文件名、刪除文件/文件夾、分享文件夾、獲得全部文件夾。這部分的難度主要集中在SQL語句,需要有足夠耐心和細心。
對于上傳文件這塊,其struts的配置文件相對簡單。而文件下載模塊struts比較復雜,其主要配置文件如下:
application/octet-stream;charset=utf-8
此處將下載文件contentType統(tǒng)一指定為application/octet-stream,同時將charset的值設置為utf-8
attachment;filename=”${name}”
attachment是告訴瀏覽器下載該文件,而filename則是在action中接收該文件的文件名,以便在用戶保存該文件時使用該文件名。
文件下載模塊的action部分,其主要步驟如下:
1)定義所需的變量;
2)創(chuàng)建需要下載的文件
File file=new File(“保存文件的路徑"+dowFileName)
3)將下載的字節(jié)流寫入剛剛創(chuàng)建的文件
try{
//從file文件中獲得輸入字節(jié)流
fdlInputStream=new FileInput-Stream(file);
//下載時指定的文件名字用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.結束語
本文結合現(xiàn)代辦公需求,依賴當今流行的SSH框架整合技術,具有良好的分層體系,使得該系統(tǒng)具有良好的擴展性,可維護性和穩(wěn)定性。經(jīng)過后期的內(nèi)部測試,該系統(tǒng)很大程度上提高了辦公效率,節(jié)約了成本和資源,其高效數(shù)據(jù)處理能力在一定程度推進了企業(yè)資源計劃(ERP)的實現(xiàn),值得繼續(xù)推廣和使用。
參考文獻
[1]孫敏.辦公自動化[M].北京:北京理工大學出版社,2010.
[2]李剛.輕量級JavaEE企業(yè)應用實戰(zhàn)(第3版)-Struts2 +Spring3+Hibernate整合開發(fā)[M].北京:電子工業(yè)出版社,2012.
[3]周靖,許青松譯.Leon Atkinson.MySQL核心編程:高級開發(fā)者者指南[M].北京:清華大學出版社,2003.
[4]王莉軍.在Web2.0設計模式下利用Ajax技術實現(xiàn)網(wǎng)頁數(shù)據(jù)動態(tài)更新[J].渤海大學學報(自然科學版),2008,3:29.
作者簡介:
篇6
1 相關概念
1.1 Struts 2框架
Struts 2是Struts的下一代產(chǎn)品,是在WebWork基礎上發(fā)展起來的。Struts 2的工作流程為[1]:當用戶發(fā)送請求時,由核心控制器FilterDispatcher接受請求然后決定調(diào)用適當?shù)腶ction,同時,WebWork的攔截器鏈自動對請求應用常用的功能,如工作流、驗證、文件上傳等功能。然后回調(diào)Action的execute方法,execute方法該執(zhí)行諸如存儲數(shù)據(jù)、檢索數(shù)據(jù)之類的數(shù)據(jù)庫相關操作,由于Action只是一個控制器,因此,execute方法會調(diào)用業(yè)務邏輯組件處理用戶的請求,最后Action的execute方法的執(zhí)行結果將被輸出到瀏覽器中。
1.2 Hibernate框架
Hibernate是一個面向Java環(huán)境的O/R mapping工具,通過對JDBC的封裝,屏蔽了底層的數(shù)據(jù)庫操作,把對象模型表示的對象映射到基本SQL的關系模型數(shù)據(jù)結構中,并且使用數(shù)據(jù)庫和配置文件來為Web應用程序提供JSP持久化服務[2]。
1.3 Spring框架
Spring是Java EE領域一個非常優(yōu)秀的框架,它提供了一種輕量級的IOC容器,該容器負責創(chuàng)建、管理應用組件。從最前端的控制器,到中間層的業(yè)務邏輯組件,以及底層的DAO組件,都處于Spring容器的管理之下,以一種低耦合的方式運行[3]。
2 基于S2SH框架Ajax應用
本節(jié)將以注冊表單中驗證用戶名是否可用為例,對S2SH框架下Ajax的使用方法進行探討。
2.1 環(huán)境搭建
本文使用Eclipse 6.6開發(fā)平臺創(chuàng)建Web項目,然后依次為項目添加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包復制到項目的WEB-INF/lib目錄下。
2.2 創(chuàng)建實體類和映射文件
可以使用MyEclipse工具自動生成數(shù)據(jù)表account的實體類Account.java和映射文件Account.hbm.xml,并將這些文件存放在com.test.entity包下。
2.3 業(yè)務邏輯層開發(fā)
1)業(yè)務層接口
編寫接口文件UserBiz.java,將其放在com.test.servcice包下。在接口中聲明用戶名驗證方法。
public interface UserBiz {
public boolean checkUser(String username);
}
2)業(yè)務層接口實現(xiàn)類
編寫業(yè)務層接口UserBiz的實現(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包下,在接口中聲明用戶名驗證方法。
public interface UserDAO {
public boolean isExist(String username);
}
2)編寫數(shù)據(jù)訪問層接口UserDAO的實現(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整合
給項目添加完Spring、Hibernate和Struts 2支持后,為了能將三者整合起來,還需要對相關的配置文件進行設置,主要的配置文件包括: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的核心過濾器,該核心過濾器負責攔截所有用戶的請求,代碼如下:
strutsorg.apache.struts2.dispatcher.FilterDispatcherstruts/*
Struts 2與Spring整合的關鍵在于,要讓Struts 2的Action可以訪問Spring容器中的業(yè)務邏輯組件。有兩種整合策略,第一種策略是將Aciton實例的生成、管理交給Spring容器來負責;第二種策略是使用Spring插件的自動裝配機制,即當Spring插件創(chuàng)建Action實例后,立即將Spring容器中對應的業(yè)務邏輯組件注入到Action實例。這里選擇后一種策略,因此需要安裝Struts 2的Spring插件,即將struts2-spring-plugin-2.0.8.jar文件復制到項目的WEB-INF/lib目錄下,同時由于Spring框架還依賴于commons-logging.jar文件,該文件也需要復制到WEB-INF/lib目錄下。此外,在使用Spring容器前,必須先進行Spring容器的初始化,可以使用ContextLoaderListener類,該類會在Web應用程序啟動時自動加載WEB-INF下的applicationContext.xml配置文件,以創(chuàng)建Spring容器。使用ContextLoaderListener類時只需在web.xml文件中添加如下代碼:
org.springframework.web.context.ContextLoaderListener
并在web.xml文件中指定spring的應用上下文路徑,配置如下:
contextConfigLocation
classpath:applicationContext.xml
為了將Struts 2的Action交由Spring處理,需要在struts.xml文件中添加一個常量,配置如下:
這樣,所有的Action無需在applicationContext.xml中顯式配置依賴的業(yè)務邏輯組件,只要為Action提供一個setXxx的方法,Spring可將名為xxx的Bean依賴注入給該Action組件。
2.6 使用Struts 2的JSON插件實現(xiàn)用戶名Ajax驗證
JSON是JavaScript對象符號的簡稱,是一種輕量級的數(shù)據(jù)交換格式。JSON插件提供了一種名為json的ResultType,如果給某個Action指定了一個類型為json的Result,則該Result無需映射到任何視圖資源,而是由JSON插件負責將Action中通過屬性設置的狀態(tài)信息序列化成JSON格式,并返回給調(diào)用頁面,從而完成Ajax交互。為了使用JSON插件,需要將jsonplugin-0.7.jar文件復制到項目WEB-INF/lib目錄下。
以注冊表單中驗證用戶輸入的用戶名是否可用為例,當用戶輸完用戶名后,系統(tǒng)應立即提示該用戶名是否可用,可以在用戶名文本域失去焦點時,立即發(fā)送一個異步請求,將輸入的用戶名作為參數(shù)發(fā)送到服務器進行判斷。注冊表單Register.jsp中主要的代碼如下所示:
上述代碼中,validateName是一個JavaScript函數(shù),用于向服務器端發(fā)送異步請求,代碼如下所示:
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 }); }
每當創(chuàng)建Ajax.Request對象時,就會發(fā)送一次Ajax請求。其中,url表示請求的地址,method表示發(fā)送請求的方式,parameters表示請求的參數(shù),onComplete用于指定回調(diào)函數(shù),asynchronous表示是否異步發(fā)送請求。為了使用Ajax.Request對象,需要在注冊表單中導入prototype-1.4.0.js函數(shù)庫,通過該函數(shù)庫可以更加簡單地訪問頁面中的DOM節(jié)點,從而更好、更簡單地實現(xiàn)Ajax交互。頁面中導入該函數(shù)庫的代碼如下所示:
回調(diào)函數(shù)processResponse代碼如下所示:
function processResponse(request){
$("message").innerHTML = request.responseText.parseJSON().message; }
上述代碼中使用了字符串的parseJSON()方法,使用該方法時需要在注冊表單中導入json.js函數(shù)庫,同時需要將該函數(shù)庫復制到項目中。導入json.js函數(shù)庫的代碼如下所示:
從創(chuàng)建Ajax.Request對象時使用的參數(shù)url可以看到,該Ajax請求是發(fā)送給validateName.aciton的,該Action是一個普通的Action,代碼如下所示:
public class ValidateUserNameAction implements Action {
private UserBiz userBiz; //該屬性代表業(yè)務邏輯組件的引用
private String username; //該屬性用于封裝用戶名請求參數(shù)
private String message;//該屬性用于封裝服務器響應的提示消息
public String execute() throws Exception {
if(userBiz.checkUser(username)){
setMessage("對不起,該用戶已存在,請重換一個!");
}else{
setMessage("恭喜你,"+username+" ,該用戶可以使用!");}
return SUCCESS; }
…… //由于篇幅,此處省略了屬性userBiz、username和message的setter方法 }
上述Action代碼中,由于Action返回的結果總是“SUCCESS”邏輯視圖名,如果業(yè)務邏輯userBiz中的checkUser方法驗證用戶名可用,則將該Action的message屬性設置為:“恭喜你,"+username+" ,該用戶可以使用!”,否則設置為“對不起,該用戶已存在,請重換一個!”。而message屬性的值是需要直接顯示在注冊表單的message元素中的,因此需要使用Struts JSON插件為該Action指定一個json類型的Result,這樣就無需使用視圖頁面來輸出響應結果,系統(tǒng)會將該Action中的message屬性序列化為以JSON格式的字符串,并將該字符串作為服務器的響應結果。為了實現(xiàn)上述功能,需要在struts.xml文件中配置該Action,配置如下:
客戶端收到JSON格式的字符串后,使用parseJSON()方法將字符串解析為一個JSON對象,該對象包含的屬性與Action完全相同,也包含了username和message這兩個屬性,其中message屬性所設置的內(nèi)容顯示在id為message的HTML元素中。
2.7 使用DWR框架實現(xiàn)用戶名Ajax驗證
除了使用Struts 2的JSON插件外,還可以通過DWR框架[4]實現(xiàn)用戶名的Ajax驗證。為了讓Web應用增加DWR支持,需要將dwr.jar文件復制到項目的WEB-INF/lib目錄下。DWR框架可以自動將普通的Java類轉(zhuǎn)化為javascript類,這個過程是通過一個核心Servlet的轉(zhuǎn)換實現(xiàn)的。為了讓DWR的核心Servlet能夠起作用,需要在web.xml添加如下配置:
dwrorg.directwebremoting.servlet.DwrServlet
dwr/dwr/*
在web.xml中配置完DWR的核心Servlet后,該Servlet負責將服務器端的Java方法暴露出來,要暴露出來的方法是在dwr.xml文件中指定的,因此需要在項目中新建一個dwr.xml文件,并進行如下配置:
根據(jù)上述配置,從spring容器中取得beanName為userBiz的bean,即將UserBizImpl類創(chuàng)建為一個名為CheckUserExist的JavaScript對象。include表示允許調(diào)用的方法,這里將允許使用UserBizImpl類中的checkUser方法。為了能在表單中調(diào)用JavaScript對象,必須進行如下引用:
當用戶在注冊表單Register.jsp中輸入用戶名,失去焦點后,執(zhí)行JavaScript函數(shù)checkUserExists,該函數(shù)中通過JavaScript對象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 結束語
篇7
(西安交通大學數(shù)據(jù)與信息中心,陜西西安710049)
摘要:通過對高??蒲泄芾憩F(xiàn)狀的分析與研究,運用基于Struts,Spring和Hibernate的輕量級Web集成開發(fā)框架,并結合Ext 富客戶端技術,從科研管理的基礎數(shù)據(jù)組織入手,認真分析科研業(yè)務管理流程及信息交互特點,最終構建高效、靈活和穩(wěn)定的高??蒲泄芾硇畔⑾到y(tǒng)。該系統(tǒng)實現(xiàn)了科研管理的網(wǎng)絡化和數(shù)字化,有效提高了信息的集成效率,提升了科研信息精細化管理水平。
關鍵字:科研管理;SSH;Ext;精細化管理
中圖分類號:TN911?34 文獻標識碼:A 文章編號: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
學??茖W研究能力的發(fā)展是制約高校整體辦學水平的重要因素,對于建設“研究型大學”更是具有舉足輕重的作用。近年來,隨著學??蒲泄ぷ鞣秶鸵?guī)模的迅速擴大,信息交互頻繁,科研業(yè)務的復雜度日益增大,這就要求科研信息要做到快速流轉(zhuǎn)和有效管理,為了滿足科研管理系統(tǒng)建設的實際要求,構建了基于Struts,Spring,Hibernate 輕量級集成開發(fā)框架和Ext 富客戶端技術的高??蒲泄芾硐到y(tǒng),為科研工作提供了重要保障。
1 SSH 和Ext 框架介紹
1.1 基于SSH的Web系統(tǒng)開發(fā)框架介紹
SSH 是一種基于J2EE 技術的MVC 軟件開發(fā)框架,與J2EE 重量級體系相對應,輕量級Web框架SSH 不僅保持了J2EE的優(yōu)勢(例如事務管理),還簡化了Web的開發(fā)[1],提高開發(fā)效率。SSH 集成框架從邏輯上分為三層:表示層、業(yè)務邏輯層、數(shù)據(jù)持久層[2]。系統(tǒng)架構圖如圖1所示。在表示層,Struts 作為系統(tǒng)的整體基礎架構,它利用控制器分離模型和視圖,把用戶界面和事務邏輯進行分離,從而極大地縮短了開發(fā)時間。在數(shù)據(jù)持久層,Hibernate 框架對JDBC 進行了輕量級的對象封裝,將數(shù)據(jù)庫表通過配置文件映射成對象。程序開發(fā)人員無需關心數(shù)據(jù)庫的具體結構,直接操作數(shù)據(jù)對象即可。Spring 管理Struts 和Hibernate,通過Spring 的反轉(zhuǎn)機制,利用容器來創(chuàng)建對象,即在運行期間將對象的依賴關系注入到組件之中,使得應用代碼可直接使用實例。
1.2 基于Ext的富客戶端技術
Ext是一個基于純HTML/CSS+ JavaScript技術的開源的富客戶端應用程序框架,它與后臺開發(fā)技術無關,可以用在多種開發(fā)語言的開發(fā)應用中,使B/S應用更具有活力和生命力,大幅度提升了用戶體驗。Ext提供了豐富的跨瀏覽器UI組件,靈活采用JSON和XML為交換格式,減輕了服務端表示層的負荷,從而達到客戶端的RIA 應用[3]。Ext還提供了豐富的學習文檔和方便易查的API文檔,方便開發(fā)者查詢和使用。
Ext 在開發(fā)中主要使用到Application,Controller,Viewport,View,Store,Model 和Data 七大類[4],其邏輯關系如圖2 所示。Application 控制Ext 到找對應Con?troller 與View 等Javascript 文件;Controller 用來實現(xiàn)View 上的所觸發(fā)事件和操作,并將對應的View,Store ,Model 進行關聯(lián);Model 和Store 是模型數(shù)據(jù)類,主要是給View類提供數(shù)據(jù);View主要負責頁面展示。
2 科研管理系統(tǒng)的設計與實現(xiàn)
2.1 科研管理系統(tǒng)的功能模塊設計科研管理系統(tǒng)的設計與開發(fā)以“高效管理、服務師生、信息共享、公正公開”為建設目標,以科研管理的內(nèi)容、流程為中心。從管理內(nèi)容的覆蓋范圍來看,科研管理系統(tǒng)的主要分為了科研項目管理、科研成果管理、經(jīng)費管理、科研問題管理、科研機構管理、科研辦公管理功能、統(tǒng)計管理、專家?guī)旃芾?、基地管理?大功能模塊。各個功能模塊具有相對獨立性,同時也相互聯(lián)系。從服務對象來看,為校領導、學院、科研基地、教師、科研管理人員5大服務對象提供全方位的服務。
2.2 基于Ext和SSH集成框架的系統(tǒng)架構設計良好架構的選擇對提高項目的開發(fā)效率有著重大影響。基于Ajax 的Web 應用程序打破了傳統(tǒng)Web 程序開發(fā)模式,大大提高了程序的可用性用戶體驗。因此SSH和Ext的組合構建了一個具有健壯架構體系和具有良好用戶體驗的Web系統(tǒng)開發(fā)架構[5]。
Ext+SSH 集成架構整合的基本原理如圖3 所示。
Ext 實現(xiàn)Struts 框架中的頁面表示和頁面跳轉(zhuǎn),管理界面上的各種操作事件,同時做出相應的響應,由于其提供了豐富的UI 組件,并采用JSON 數(shù)據(jù)格式傳輸數(shù)據(jù),提高程序員的開發(fā)效率[6]。在業(yè)務層,Spring實現(xiàn)MVC三層分離,控制各層負責不同的任務,協(xié)作完成一次完整的請求/響應。在數(shù)據(jù)持久層,Hibernate 實現(xiàn)數(shù)據(jù)庫表到Java類的映射,簡化數(shù)據(jù)庫事務管理。
2.3 關鍵技術的實現(xiàn)
Ext框架擁有豐富的組件,而且創(chuàng)建組件的方法也非常簡單,可以直接通過new 關鍵字來創(chuàng)建,比如創(chuàng)建一個窗口,可以使用new Ext.window(),創(chuàng)建一個表格可以使用new Ext.grid.GridPanel()。在本系統(tǒng)中,用戶登錄后的首頁面板顯示了用戶基本信息,科研通知公告,代辦事宜等信息,它們可以通過拖拽的方式調(diào)整位置,這里采用的Ext的Ext.ViewPort組件來實現(xiàn)頁面布局,它可以隨著瀏覽器的大小而自適應。部分核心代碼如下所示:
科研數(shù)據(jù)不僅數(shù)量大,而且數(shù)據(jù)關聯(lián)性也較強,在每個數(shù)據(jù)列表上建立快捷查詢項是非常必要的,如圖4所示。
圖4 Ext的panel組件實現(xiàn)快捷查詢頁面
以下代碼是利用Ext的panel組件實現(xiàn)的快速查詢頁面的代碼:
3 結語
采用Ext+SSH集成架構開發(fā)的科研管理信息系統(tǒng),結構清晰,快速高效,可維護性和靈活性較高。目前該系統(tǒng)已在西安交通大學科研院的科研管理工作中得到了應用,體現(xiàn)了“人性化操作”的設計理念,充分兼顧了校領導、科研管理人員、教師等用戶的不同需求,實現(xiàn)了與校園信息化平臺的其他應用系統(tǒng)對接,提升了學??蒲泄芾砟芰退?。
參考文獻
[1] 邵雄凱,楊京濤.基于Struts,Spring和Hibernate的集成框架研究[J].軟件導刊,2007(23):25?28.
[2] 張瑋,陳為.基于Struts+Spring+Hibernate框架的探討與研究[J].長春大學學報,2006(12):75?80.
[3] 王曉燕,宋紹云.Ext的組件體系結構研究[J].電腦知識與技術,2011(9):1999?2002.
[4] 田建偉,黎曦,劉瀟瀟,等.基于Ext和SSH 開發(fā)架構的電力生產(chǎn)信息系統(tǒng)的研究與應用[J].湖南電力,2014(2):16?19.
[5] 郭永樂,劉列根,張宇.基于輕量級框架構建Web應用[J].電子技術應用,2007(4):78?90.
[6] 王淵,懷自國,羅怡桂.基于Ext+Spring+Hibernate的Web系統(tǒng)開發(fā)架構的研究與應用[J].計算機與現(xiàn)代化,2009(12):78?81.
篇8
關鍵詞:Android LinuxSSH QuickSSHD可行性
中圖分類號:TN918.1 文獻標識碼:A 文章編號:1007-9416(2012)03-0000-00
Android操作系統(tǒng)最初由Andy Rubin領頭的開發(fā)小組開發(fā),最初主要支持手機。2005年由Google注資收購經(jīng)過開發(fā)改良,逐漸擴展到平板電腦及其他領域上。Android操作系統(tǒng)采用了軟件堆層(software stack,又名軟件疊層)的架構,主要分為三部分。底層Linux內(nèi)核只提供基本功能,其他的應用軟件則由各公司自行開發(fā),部分程序以Java編寫。
SSH為Secure Shell的縮寫,由IETF的網(wǎng)絡工作小組(Network Working Group)所制定;SSH為建立在應用層和傳輸層基礎上的安全協(xié)議。
傳統(tǒng)的網(wǎng)絡服務程序,如FTP、POP和Telnet其本質(zhì)上都是不安全的;因為它們在網(wǎng)絡上用明文傳送數(shù)據(jù)、用戶帳號和用戶口令,很容易受到中間人(man-in-the-middle)攻擊方式的攻擊。就是存在另一個人或者一臺機器冒充真正的服務器接收用戶傳給服務器的數(shù)據(jù),然后再冒充用戶把數(shù)據(jù)傳給真正的服務器。而SSH是目前較可靠,專為遠程登錄會話和其他網(wǎng)絡服務提供安全性的協(xié)議。利用SSH協(xié)議可以有效防止遠程管理過程中的信息泄露問題。透過SSH可以對所有傳輸?shù)臄?shù)據(jù)進行加密,也能夠防止DNS欺騙和IP欺騙。
SSH之另一項優(yōu)點為其傳輸?shù)臄?shù)據(jù)是經(jīng)過壓縮的,所以可以加快傳輸?shù)乃俣?。SSH有很多功能,它既可以代替Telnet,又可以為FTP、POP、甚至為PPP提供一個安全的“通道”。有點類似于VPN,但是它在保密方面的能力,遠遠強于VPN。
SSH協(xié)議框架中最主要的部分是三個協(xié)議:傳輸層協(xié)議、用戶認證協(xié)議和連接協(xié)議。同時SSH協(xié)議框架中還為許多高層的網(wǎng)絡安全應用協(xié)議提供擴展的支持。
QuickSSHD在智能手機中的使用。
通過下面介紹的一個使用過程,用來證明SSH安全傳輸協(xié)議在Android平臺下的可行性,本次實驗使用的軟硬件及其各版本如下:(1)基于Android2.3.5版本的智能手機一部(已經(jīng)獲得root權限),(2)x86電腦一部;(3)在手機端安裝了QuickSSHD的2.0.2(已付費)版本軟件;(4)在電腦端安裝了FileZilla軟件,版本號是3.5.3。
QuickSSHD支持sftp與xterm(命令行終端)方式管理手機,可USB可3G可wifi,我這次使用的軟件是FileZilla,因此測試了sftp功能,用的是wifi登錄方式進行實驗。在圖1所示是QuickSSHD軟件登錄界面。
當你安裝好QuickSSHD軟件后開始使用,你可以獲取一個由軟件自動提供給你的IP地址(本次實驗中得到的地址是192.168.1.102),且你進入時可以提供密碼或者共享Keys的方式進行加密,一般建議采用密碼的形式,這個密碼是自定義的,也就是在x86電腦端開啟軟件FileZilla時所需輸入的密碼,第一次使用后,可以將這個IP地址和密碼都設置為常用,以后登錄不必每次都輸入。
當在Android端設定好命令之后,你可以到x86電腦端設定好軟件FileZilla的各項命令,上圖顯示我本次實驗是進行sftp傳輸?shù)膶嶒?,使用的登錄名是root,密碼就是你在Android端已經(jīng)輸入的密碼,最后一個是端口,這個一般是固定的,sftp都是采用的22端口,圖2所示是FileZilla軟件在Android端和x86計算機端傳輸文件的界面,其中左圖為x86計算機端路徑,右圖為Android端的/sdcard路徑所示。
設置好點擊快速連接之后,就會進入圖5所示界面,該界面就是一個進行進行sftp方式傳輸?shù)慕缑?,左半面是x86電腦的磁盤驅(qū)動器,右半面你可以選擇Android操作系統(tǒng)所屬的各個文件夾,因為Linux是特性是利用文件管理系統(tǒng),因此,你只要管理好了文件,也就是管理好了這個Linux,乃至你的Android系統(tǒng),由于本次軟件所測試的sftp協(xié)議在Android上的傳輸可行性,因此我在右半面選擇的是該電子設備所攜帶的sdcard文件夾。通過測試,通常使用在Linux操作系統(tǒng)中的sftp傳輸協(xié)議完全能夠使用在x86電腦和Android系統(tǒng)系統(tǒng)之間。
在本篇文章所述中,雖然只是針對SSH協(xié)議的sftp傳輸方式進行了驗證,但是SSH傳輸協(xié)議的優(yōu)點遠不止此,因為是一種相對安全的傳輸協(xié)議方式,SSH協(xié)議今后還會在更多的應用區(qū)域得到更加廣泛的推廣,例如需要在公共區(qū)域的WIFI上網(wǎng),雖然利用VPN也可以,但是有的地方封殺VPN,SSH比較安全,當然,還可以利用更改配置文件的方法,更改SSH的默認端口和對登錄IP進行限制,進一步的保證利用SSH協(xié)議傳輸數(shù)據(jù)的安全性。
參考文獻
[1] 余永洪.用SSH技術遠程管理Linux服務器.《計算機與現(xiàn)代化》,2002.
[2] 孔祥真,徐小龍,邢宏健.Linux操作系統(tǒng)服務器SSH遠程管理配置.《網(wǎng)絡安全技術與應用》,2011.
[3] 劉平.Android手機訪問服務器的一種數(shù)據(jù)交互方法.《電子設計工程》,2010.
[4] 劉振昌.讓SSH遠程管理更安全.《中國教育網(wǎng)絡》,2011
篇9
關鍵詞:SSH架構;Appfuse;代碼自動生成
中圖分類號:TP311文獻標識碼:A文章編號: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技術的應用已經(jīng)日益廣泛。在J2EE體系架構中,基于各種開源框架的J2EE架構的應用逐漸成為主流。優(yōu)秀的開源框架在J2EE中的應用在一定程度上也促進了企業(yè)級應用的發(fā)展。然而,在實際開發(fā)中仍然存在著項目開發(fā)周期長,開發(fā)效率低,不能快速響應需求變化等普遍問題。代碼生成技術的發(fā)展已逐漸成為解決上述問題的有效途徑之一。本文將對應用廣泛的SSH架構的代碼自動生成展開討論。
1 SSH架構
SSH架構就是一個基于三種開源框架Stuts,Hibernate和Spring的輕量級J2EE架構,目前已是企業(yè)級應用開發(fā)中應用最廣泛的J2EE架構之一。其架構層次主要劃分為:表現(xiàn)層,業(yè)務層,數(shù)據(jù)持久層和領域?qū)ο髮印T诒憩F(xiàn)層中應用了Struts框架,這種基于請求驅(qū)動的MVC框架給架構也帶來了清晰的MVC劃分。在業(yè)務層引入Spring,使用其提供的IoC容器對業(yè)務類進行裝配和管理,使類與類之間的耦合度降到最小,利用其提供的AOP框架對業(yè)務層中的事務進行聲明式管理。由于Spring對Hibernate提供了良好的支持,通過使用HibernateTemplate可以方便地對數(shù)據(jù)進行持久化操作。數(shù)據(jù)持久層正是由Spring和Hibernate共同打造的。其中DAO接口的裝配和管理也是由Spring提供的IoC容器實現(xiàn)的。
該類架構層次清晰,結構明顯,同一層中類或接口的代碼往往具有類似的結構,非常適于使用代碼生成工具實現(xiàn)部分代碼自動生成。
2 AppFuse框架
AppFuse 是一個開源項目,它使用了在 Java 平臺上構建的開源工具來幫助開發(fā)者快速而高效地開發(fā) Web 應用程序。它使用 Ant 來驅(qū)動測試、代碼生成、編譯和部署。它提供了目錄和包結構,以及開發(fā)基于 Java 語言的 Web 應用程序所需要的庫。AppFuse支持的Web框架有:Struts、Spring MVC、WebWork、JSF and Tapestry,支持的持久層框架有:Hibernate和iBates,支持的測試環(huán)境有:DBUnit,Junit,Jmock和Canoon’s Web Test。AppFuse中集成了XDoclet,并應用它自動生成代碼和相關的配置文件。
Appfuse實現(xiàn)代碼自動生成的核心就是應用XDoclet引擎按照代碼模板文件進行代碼生成。Appfuse要支持很多不同的框架和技術,所以其中的代碼模板就要做到最通用。代碼模板通用性的提高,在一定程度上降低了其功能和效率。而且,Appfuse中代碼自動生成模塊只能生成簡單少量的Spring配置文件,大部分的配置工作沒有實現(xiàn)自動化。基于此,本文對Appfuse中支持Struts,Hibernate和Spring的代碼自動生成模塊進行了提取,改進了其中的代碼模板文件,增強了該模塊的代碼自動生成能力,并使得Spring配置文件的大部分配置工作實現(xiàn)自動化。
3 基于Struts,Hibernate,Spring框架的J2EE架構的代碼自動生成
3.1 代碼自動生成的任務列表
因為Ant配置文件build.xml是代碼自動生成的控制核心,所以可以通過改寫build.xml文件提取出Appfuse中的相關模塊。修改后的build.xml文件包括:變量配置如項目包的名稱、源文件目錄等,定義相關類的引用路徑,還有一系列的代碼生成任務。任務列表如下:
<target name="help">
<echo message="提供以下任務:" />
<echo message="create-dir-->生成工程目錄"/>
<echo message="generate-hbm -->運行HibernateDoclet,生成Hibernate 類的映射文件" />
<echo message="schemaexport -->運行SchemaExport,利用hbm.xml 文件生成數(shù)據(jù)表" />
<echo message="gen-forms --> 運行xdoclet,生成相應的Form類文件"/>
<echo message="webdoclet -->運行webdoclet,生成Struts配置文件和validation.xml" />
<echo message="gen --> 運行xdoclet生成相應類的dao,daoHibernate,manager等文件"/>
<echo message="move-gens--> 把生成相應類的dao,daoHibernate,manager等java文件移到當前工程文件夾下"/>
<echo message="gen-springxml --> 生成spring的配置文件context-spring.xml" />
</target>
3.2 對Appfuse中代碼自動生成模塊的改進
使用XDoclet自動生成代碼需要有代碼模板以及相應模板語言的支持,另外改進該模塊時加入了一些通用基類,這些都是代碼自動生成模塊的基本組成部分。代碼模板文件主要應用了Form和Method兩個標簽,其中Form標簽是Appfuse中自定義的,而Method標簽則是在原有XDoclet標簽的基礎上做了擴展。提取出的模塊仍然需要Appfuse中FormTagsHandler和MethodExTagsHandler這兩個標簽類的支持,應把他們置于模塊中WEB-INF的Class目錄下。以下就是對原有模板文件的修改及改進:
(1)對Dao.xdt模板文件進行了改進,添加了兩個常用方法,merge()以及find()方法。前者是用于在一個session中存在兩個相同的對象擁有同一個identifer的情況下,而后者則用于執(zhí)行HQL查詢語言。兩者在項目開發(fā)中使用頻率頗高,所以需要增加。
(2)對相應的DAOHibernate類模板即DAO的實現(xiàn)類進行相應的改進,實現(xiàn)merge()和find()方法。
(3)在相應的DAOTest類模板中添加testMerge()和testFind()方法。
(4)在manager類模板中添加add方法,主要是在添加一個新對象時需要先判斷是否有重復,所以應該與save方法分開。
(5)改進DaoHibernate.xdt文件,原模板文件中的get()只適用于對象的主標示的類型為java.Long.*中的情況,修改模板后使之也適用于long和int的情形。
(6)修改Manager.xdt,去掉了用不到的import語句。
(7)在ManagerImpl.xdt文件中添加 import .service.Manager;在改進DaoHibernate.xdt文件后應該相應的修改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,修改模板文件中get()和remove()方法,使之也適用于pirmary key是long 和int 的情形。
(10)去掉了Appfuse框架中context-hibernate.xdt和context-service.xdt模板文件。通過在DaoHibernate.xdt和ManagerImpl.xdt模板文件中添加相應的XDoclet標簽(@spring),利用xdoclet.modules.spring.SpringDocletTask任務可以自動生成spring的配置文件,省去了人工維護。
通過以上的修改和改進,使得這些模板功能更加強大,更符合我們的編程習慣從而更加實用。其中都是對原有模板文件比較大的改進,在一定程度上比Appfuse中的原有模塊更能提高開發(fā)效率。
3.3 代碼自動生成模塊的應用步驟
應用該模塊的步驟如下:
(1)在build.xml中設置項目的程序包、源文件目錄、生成文件的輸出目錄、XDoclet模板文件放置目錄、輸出的Form文件目錄、輸出的測試類文件目錄等一系列變量。
(2)設置各個庫的引用路徑,如Spring,Hibernate的jar文件 的引用。
(3)運行build.xml中的create-dir任務,創(chuàng)建工程詳細目錄。
(4)編寫領域?qū)ο箢?,類文件中要添加詳細的XDoclet標簽;在關系數(shù)據(jù)庫中建立一個空數(shù)據(jù)庫文件。
(5)順序執(zhí)行Ant任務generate-hbm,schemaexport,gen-forms,gen-forms,gen,move-gens,gen-springxml,可以自動的連續(xù)執(zhí)行也可以單步執(zhí)行。
通過執(zhí)行以上一系列任務,就會在相應的目錄下自動生成Hibernate配置文件,相應領域?qū)ο蟮腟truts Form文件以及在Struts-config.xml中的相關配置,領域?qū)ο髮腄ao接口及Hibernate實現(xiàn)類,領域?qū)ο髮腗anager接口及簡單實現(xiàn)類,相應DaoTest類和ManagerTest類文件,還有簡單的Spring配置文件。此外,還在已創(chuàng)建的數(shù)據(jù)庫中產(chǎn)生與領域?qū)ο髮臄?shù)據(jù)表。
3.4 改進后模塊的優(yōu)勢
這樣在整個架構中,一旦實現(xiàn)領域?qū)ο髮?,以下?nèi)容會自動實現(xiàn):(1)基于Hibernate的對象關系映射層。(2)基于Hibernate的數(shù)據(jù)持久層。(3)基于Spring的業(yè)務層的部分代碼,即Manager接口和Manager實現(xiàn)。對于Manager實現(xiàn)還需要根據(jù)不同的業(yè)務作相應的修改。(4)基于Struts的表現(xiàn)層的部分代碼,即在應用中可能會用到的Struts中的Form類,對應每一個領域?qū)ο笙茸詣由梢粋€Form,以節(jié)省可能的工作量。此外,針對數(shù)據(jù)持久層和業(yè)務層接口的測試用例也會自動生成,大部分可以直接應用,只有小部分需要稍作修改以增強測試效果。
4 基于SSH架構的代碼自動生成模塊在權限管理系統(tǒng)的應用
4.1 RBAC模型
本權限管理系統(tǒng)基于RBAC模型設計。RBAC(Role-Based Access Control)模型的基本思想就是根據(jù)安全策略劃分出不同的角色,資源訪問許可被封裝在角色中,用戶被指派到角色,用戶通過角色間接地訪問資源。RBAC 的最大優(yōu)點在于它能夠靈活表達和實現(xiàn)組織的安全策略,使管理員從訪問控制底層的具體實現(xiàn)機制中脫離出來,十分接近日常的組織管理規(guī)則。RBAC 被認為是一種更普遍適用的訪問控制模型,可以有效地表達和鞏固特定事務的安全策略,有效緩解傳統(tǒng)安全管理處理瓶頸問題。其中RBAC96模型如圖1所示。
4.2參照RBAC模型以及實際需求對權限管理系統(tǒng)進行建模
此權限管理系統(tǒng)把權限管理和組織機構管理結合起來,分配給用戶的角色來自于部門,部門和角色之間是一對多的關系。權限許可是針對某一權限資源對象和權限操作,所以權限許可和權限資源對象以及權限操作都是一對一的關系。通過Borland公司的建模工具Together,將權限管理系統(tǒng)模型建立如下:
4.3 利用代碼自動生成模塊進行開發(fā)
按照3.3所討論的步驟,先進行(1)到(3)步。然后根據(jù)圖2中的模型,開始編寫領域?qū)ο髮哟a并在代碼中添加XDoclet標簽。再依次執(zhí)行第(4)、(5)步后,就會在相應的目錄下自動生成了Hibernate配置文件,User等領域?qū)ο蟮腟truts Form文件以及在Struts-config.xml中的相關配置,對應的Dao接口及Hibernate實現(xiàn)類,對應的Manager接口及簡單實現(xiàn)類,相應DaoTest類和ManagerTest類文件,還有簡單的Spring配置文件。此外,還在已創(chuàng)建的數(shù)據(jù)庫中產(chǎn)生與領域?qū)ο髮臄?shù)據(jù)表。在該系統(tǒng)開發(fā)完畢后,將利用該模塊自動生成的代碼與已經(jīng)完成的代碼進行了比較,經(jīng)估算可以節(jié)省近40%的代碼量,于是就節(jié)省出了大量的時間用于核心業(yè)務邏輯的處理。
5 總結
改進后的自動化模塊可以在相對穩(wěn)定的對象關系映射層和數(shù)據(jù)持久層實現(xiàn)完全的自動化,而在業(yè)務層和表現(xiàn)層也可以減少一部分代碼量,并且測試方面的代碼量也會大大減少。 所以,在類似基于Struts,Hibernate,Spring的輕量級J2EE架構的系統(tǒng)的開發(fā)中應用該自動化模塊會大大提高工作效率,縮短項目周期,提高對需求變化的快速響應速度。
參考文獻:
[1] Rod Johnson.J2EE Development Frameworks[J].Computer,2005(01)107-110.
[2] 汪厚祥,李卉.基于角色的訪問控制研究[J].計算機應用研究,2005(4):125-127.
篇10
關鍵詞:SSH開源框架技術;檔案管理系統(tǒng);分布式檔案管理
隨著高校檔案管理的復雜化和網(wǎng)絡技術的發(fā)展,基于Web的檔案管理系統(tǒng)具有很大的使用價值。研究檔案管理系統(tǒng)軟件,提出其設計開發(fā)標準的規(guī)范化建議,是為了促進檔案系統(tǒng)軟件開發(fā)設計的規(guī)范化與標準化,避免盲目設計與開發(fā),節(jié)省研制成本,減少經(jīng)濟損失,擴大軟件適用規(guī)模,達到檔案管理的自動化、統(tǒng)一化,提高檔案工作效率,保證檔案管理安全性、通用性、可靠性,進而促進檔案信息化的發(fā)展。
一、架構技術分析
1.Struts簡介
Struts是一個為開發(fā)基于模型(Model)-視圖(View)-控制器(Controller)(MVC)模式的應用架構的開源框架,是利用Java Servlet和JSP構建Web應用的一項非常有用的技術。
2.Hibernate
Hibernate是一個免費的開源Java包,它使得與關系數(shù)據(jù)庫打交道變得十分輕松,同時不必考慮如何把它們從神秘的數(shù)據(jù)庫表中取出(或放回到數(shù)據(jù)庫表中)。
3.Spring
Spring是一個開源框架,它由Rod Johnson創(chuàng)建。它是為了解決企業(yè)應用開發(fā)的復雜性而創(chuàng)建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。
4.SSH整合后的特點
(1)大大降低了開發(fā)成本。SSH 的架構是基于Struts、Spring和 Hibernate開源框架開發(fā)設計的,所以它在技術成本上會很低,又由于應用框架技術可以更清晰的劃分開發(fā)過程中每個人的工作任務,從而降低了人力成本。
(2)低耦合,增強了系統(tǒng)的可擴張性。對于傳統(tǒng)的ASP和PHP等腳本站點技術,將整個站點的業(yè)務邏輯和表現(xiàn)邏輯都混雜在ASP和PHP頁面里,從而導致頁面的可讀性相當差,可維護性非常低。即使需要簡單改變頁面的按鈕,也不得不打開頁面文件,冒著破壞系統(tǒng)的風險,因而具有良好的可擴展性。
(3)縮短項目的開發(fā)周期。使用框架技術可以避免反復開發(fā)的問題。無形中減少了開發(fā)過程中的編寫代碼量,提高了開發(fā)速度,縮短開發(fā)周期。
(4)重用性。為了避免重復開發(fā),降低成本,我們希望能夠重用以前的代碼和設計。重用是我們不斷追求的目標之一,但事實上,做到這一點不是很容易。
二、系統(tǒng)功能需求
于檔案管理管理系統(tǒng)來說,總體上的目標就是提高檔案管理的效率,將大量復雜的統(tǒng)計,重復的事務性操作等交給系統(tǒng)自動處理,在提高效率的同時,也減少了人工的投入和人工操作可能產(chǎn)生的錯誤。本系統(tǒng)的開發(fā)依據(jù)J2EE分層的系統(tǒng)框架,提出基于SSH(Struts+Spring+Hibernate)集成框架的檔案管理系統(tǒng)的設計與實現(xiàn)。基于SSH的檔案管理系統(tǒng)開發(fā)要實現(xiàn)的具體功能如下圖所示。
三、系統(tǒng)實現(xiàn)
1.Web應用層實現(xiàn)
表示層主要包括系統(tǒng)和用戶交互的頁面,它的主要功能是收集用戶的輸入、驗證和轉(zhuǎn)換輸入數(shù)據(jù),并把轉(zhuǎn)換后的數(shù)據(jù)傳遞給業(yè)務邏輯層。另外,表示層還發(fā)揮呈現(xiàn)數(shù)據(jù)、控制頁面導航,以及處理國際化編程的功能。該層使用Struts框架來實現(xiàn),Struts為基于Java的應用提供一種用戶界面開發(fā)框架以及應用邏輯和業(yè)務邏輯的連接。它通過一個控制器ActionServlet提供Web應用程序生命周期管理,而且能夠在服務器上處理客戶端事件、輸入驗證等用戶界面問題。
應用層Struts的設計主要包括用戶Struts界面以及與之協(xié)作的事件Action的設計。檔案管理系統(tǒng)設計的Action主要有:LoginAction、MenuAction、OrgAction、ParaAction、RoleAction、UserAction、DoucumentInfoAction、BorrowInfoAction
2.業(yè)務邏輯層實現(xiàn)
業(yè)務邏輯層使用Spring框架來實現(xiàn)業(yè)務邏輯處理,可以實現(xiàn)與各種框架良好的集成。同時Spring的IOC的依賴注入功能給開發(fā)人員減輕了負擔,使程序代碼邏輯結構清晰,實現(xiàn)組件間的松散耦合,加快開發(fā)進度。業(yè)務邏輯層主要定義與應用層組件事件關聯(lián)的類和接口,用于向上層提供處理事件的服務,主要包括表示事件域處理方法的Service接口和Service實現(xiàn)類。
由于系統(tǒng)中的DAO對象緊密關聯(lián),因此采用Facade模式將DAO對象封裝起來,應用層在使用業(yè)務邏輯層的服務時,僅僅與業(yè)務邏輯的Service接口發(fā)生聯(lián)系,無需知道業(yè)務服務組件的具體實現(xiàn),也無需了解底層的DAO對象。
3.持久層實現(xiàn)
數(shù)據(jù)持久層使用Hibernate持久化框架,也是使用接口與實現(xiàn)分開的方式。這樣可以在持久層使用多種持久化技術。持久層主要定義應用程序通過具體的類與數(shù)據(jù)庫交互。遵循系統(tǒng)架構圖,持久層的設計將使用 Facade模式定義系統(tǒng)中各個模塊的業(yè)務入口Facade接口,并定義它的實現(xiàn)類Impl,通過接口得到具體業(yè)務的DAO實現(xiàn)。通過DAO和對應模式的Domain Object,就能對數(shù)據(jù)庫進行增刪查改動作。
4.數(shù)據(jù)庫設計
系統(tǒng)數(shù)據(jù)庫的設計實現(xiàn),對系統(tǒng)的應用具有很重要的意義。根據(jù)檔案管理系統(tǒng)的實際數(shù)據(jù)量考慮,采用了Mysql數(shù)據(jù)庫。Mysql是一個精巧的SQL數(shù)據(jù)庫管理系統(tǒng),以操作簡便著稱。由于其強大的功能、豐富的應用編程接口以及精巧的系統(tǒng)結構設計,在基于數(shù)據(jù)庫的應用軟件開發(fā)總得到了廣泛的應用。
作為一個數(shù)據(jù)庫管理系統(tǒng),MySQL是客戶機/服務器模式的分布式系統(tǒng),由SQL服務器、客戶端、管理工具和應用編程接口等一整套工具組成。它的平臺無關性優(yōu)點使其能在多個操作系統(tǒng)上運行。此外,MySQL還是多線程的,不僅具有運行速度快,可處理大批量數(shù)據(jù)等特點,還支持多CPU使用。
檔案管理系統(tǒng)共建立了7張數(shù)據(jù)表:t_user(用戶表)、t_channel(菜單表)、t_news(新聞表)、t_org(機構信息表)、t_para(參數(shù)信息表)、t_info(檔案信息表)、t_borrow(檔案借閱信息表)。
四、結束語
本文采用了基于Java平臺的多層架構,通過運用Struts技術,Spring技術,Hibernate技術,建立一套可伸縮性高的系統(tǒng)開發(fā)架構。同時,由于接口的采用,使系統(tǒng)可以很好地滿足與其它系統(tǒng)集成的需要,使利用計算機系統(tǒng)和網(wǎng)絡服務系統(tǒng)的檔案管理更加方便。 ■
參考文獻
[1] 孫更新,周峰.Struts框架結構的Java Web開發(fā)技術基礎與實踐教程[M].北京:電子工業(yè)出版社.2008