1.引言?
????網(wǎng)絡(luò)服務(wù)已經(jīng)影響到整個(gè)社會的方方面面,Web應(yīng)用程序也變的越來越復(fù)雜,近年來,我國農(nóng)業(yè)生產(chǎn)形勢發(fā)生了諸多變化,生態(tài)環(huán)境的改變使得新的病蟲害開始發(fā)生,在植物類產(chǎn)品生產(chǎn)過程中因未能及時(shí)診斷病蟲害而造成的損失是巨大的,對植物病蟲害診斷工作提出了挑戰(zhàn)。因此,建立和完善植物病蟲害診斷系統(tǒng)是新世紀(jì)的一個(gè)重要內(nèi)容,而植物病蟲害的遠(yuǎn)程診斷是智能農(nóng)業(yè)的一個(gè)重要技術(shù)功能,網(wǎng)絡(luò)通信技術(shù)的快速發(fā)展,使植物病蟲害診斷技術(shù)突破了時(shí)空限制。系統(tǒng)通過使用先進(jìn)的領(lǐng)先技術(shù)Java和XML來提供優(yōu)秀的診斷服務(wù)。
??? 在傳統(tǒng)的小型JSP應(yīng)用程序中,數(shù)據(jù)、業(yè)務(wù)邏輯和用戶界面通常組合在一個(gè)代碼模塊中,應(yīng)用程序通常還包含用來控制應(yīng)用程序流程的邏輯,這樣由于文件中HTML和Java的強(qiáng)耦合,會有邏輯混亂,調(diào)試?yán)щy等很多問題。本文介紹的植物病蟲害遠(yuǎn)程診斷系統(tǒng),采用了基于J2EE的分布式應(yīng)用體系結(jié)構(gòu)和MVC開發(fā)模型,是分布在不同地理位置上的數(shù)據(jù)庫與遠(yuǎn)程診斷系統(tǒng)通過Internet互聯(lián)在一起。MVC模式將復(fù)雜的系統(tǒng)劃分為M(model)、V(view)、C(controller)三層結(jié)構(gòu)。MVC模式不僅實(shí)現(xiàn)了功能模塊和顯示模塊的分離,同時(shí)它還提高了應(yīng)用系統(tǒng)的可維護(hù)性、可擴(kuò)展性、可移植性和組件的可復(fù)用性。MVC模式是目前基于B/S結(jié)構(gòu)開發(fā)的最為有效的一種模式。
2.技術(shù)背景?
????J2EE已經(jīng)成為企業(yè)應(yīng)用開發(fā)的標(biāo)準(zhǔn)。平臺為創(chuàng)建、部署和管理企業(yè)級類應(yīng)用以及代碼的可移植性及重用提供了一個(gè)安全的、伸縮的和可擴(kuò)展的環(huán)境?;谒?,開發(fā)者只需要集中精力編寫代碼來表達(dá)企業(yè)應(yīng)用的商業(yè)邏輯和表示邏輯,至于其他系統(tǒng)問題,如內(nèi)存管理、多線程、資源分布、垃圾收集等,都將由J2EE自動(dòng)完成。J2EE方案的實(shí)施可顯著地提高系統(tǒng)的可移植性、安全性、可伸縮性、負(fù)載平衡和可重用性。J2EE的發(fā)展,讓Java語言與MVC模式設(shè)計(jì)思想達(dá)到了完美的結(jié)合,使早就提出但一直未能突破語言障礙的MVC模式得以實(shí)現(xiàn)。
????由Apache組織開發(fā)的Struts框架是一個(gè)基于J2EE平臺的Web應(yīng)用系統(tǒng)框架,它采用MVC模型規(guī)范,結(jié)合了Servlet、JSP、JavaBean的技術(shù)特點(diǎn),使這些技術(shù)合理分工,緊密配合,達(dá)到程序結(jié)構(gòu)清晰,易于開發(fā)、維護(hù)的目的。Struts的主要部件是一個(gè)通用的控制組件。這個(gè)控制組件提供了處理所有發(fā)送到Struts的HTTP請求的入口點(diǎn)。它截取和分發(fā)這些請求到相應(yīng)的動(dòng)作類(都是Action類的子類)。同時(shí),控制組件也負(fù)責(zé)用相應(yīng)的請求參數(shù)填充FormBean,并傳給動(dòng)作類。動(dòng)作類實(shí)現(xiàn)核心業(yè)務(wù)邏輯,它可以訪問JavaBean或調(diào)用EJB。最后,動(dòng)作類把控制權(quán)傳給后續(xù)的JSP文件,后者則生成視圖。所有的這些控制邏輯都是利用一個(gè)XML文件來配置。
????XML與生俱來的可擴(kuò)展、跨平臺、開放的特性無疑與Java相呼應(yīng),形成了完美搭檔。在Web這樣一個(gè)公共的、開放的資源平臺與計(jì)算環(huán)境上,Java技術(shù)提供了豐富的實(shí)現(xiàn)機(jī)制;XML為信息的有效管理和數(shù)據(jù)集成提供了強(qiáng)大的功能,它提供了一種人和程序都能閱讀的描述機(jī)制。XLST用來把XML文件轉(zhuǎn)換成HTML文件,其中XML信息可由JSP動(dòng)態(tài)生成,通過將數(shù)據(jù)庫中的信息檢索轉(zhuǎn)換成XML數(shù)據(jù)信息增大數(shù)據(jù)的通用性。
????在對數(shù)據(jù)庫的處理時(shí)我們采用面向?qū)ο蟮臄?shù)據(jù)持久化技術(shù)hibernate,它是現(xiàn)在對數(shù)據(jù)庫處理的一個(gè)非常優(yōu)秀的O/R Mapping(對象關(guān)系映射框架)產(chǎn)品,它對JDBC進(jìn)行了輕量級的對象封裝,使Java程序員可以隨心所欲的使用對象編程思想來操縱數(shù)據(jù)庫。Hibernate不僅僅管理Java類到數(shù)據(jù)庫表的映射,還提供數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法,主要包括以下幾個(gè)特點(diǎn):
1.具有開源和免費(fèi)的License
2.輕量級封裝,避免引入過多復(fù)雜的問題,調(diào)試容易,減輕程序員負(fù)擔(dān)
3.具有可擴(kuò)展性,API開放,當(dāng)本身功能不夠用的時(shí)候可以允許自己遍碼進(jìn)行擴(kuò)展
4.開發(fā)者活躍,產(chǎn)品有穩(wěn)定發(fā)展的保障
5.具有豐富的文檔資料
6.有成功的項(xiàng)目開發(fā)實(shí)施案例
7.在開發(fā)者當(dāng)中有良好的口碑
3.系統(tǒng)功能?
????系統(tǒng)利用人工智能技術(shù),在internet上24小時(shí)運(yùn)轉(zhuǎn),遠(yuǎn)程擁護(hù)自助生產(chǎn)中的疑難病蟲,運(yùn)行成本低,這也是遠(yuǎn)程診斷的發(fā)展方向?;趯Σ『拖x診斷的不同特點(diǎn),在推理機(jī)上也采用了不同的方法,對害蟲的診斷上采用了二叉樹推理機(jī),而對病害的診斷采用神經(jīng)網(wǎng)絡(luò)推理機(jī)。
????系統(tǒng)主要包括以下功能:
1.?用戶認(rèn)證。系統(tǒng)所有用戶的密碼采取MD5算法加密,任何人無法從數(shù)據(jù)庫(或者數(shù)據(jù)包)中獲取到其他人員的密碼。
2.?系統(tǒng)管理員對系統(tǒng)的維護(hù),包括對用戶的管理和對病蟲害數(shù)據(jù)的填加、更新、刪除等操作。
3.?用戶對信息的搜索。用戶可以通過站內(nèi)搜索來查找自己需要的信息內(nèi)容。
4.?推理與診斷。根據(jù)用戶輸入的信息,系統(tǒng)將自動(dòng)的來推理診斷得出結(jié)論,反饋給用戶。
????系統(tǒng)還有一部分其他的附屬功能,但以上是整個(gè)系統(tǒng)最為核心的內(nèi)容。其他功能在此就不再贅述。下面我們以病害診斷為例看一下系統(tǒng)的構(gòu)成,蟲害診斷基本與病害系統(tǒng)構(gòu)成相同,就是中間的推理機(jī)和數(shù)據(jù)庫字段設(shè)置不同,以下是病害系統(tǒng)的構(gòu)成圖(圖1)。用戶通過登陸界面經(jīng)身份驗(yàn)證確認(rèn)后進(jìn)入開始頁面,在此頁面上就可一步一步的按系統(tǒng)的流程來進(jìn)行診斷,經(jīng)遠(yuǎn)程服務(wù)器端推理機(jī)推理即可將結(jié)果反饋給用戶,這樣用戶不出門就可完成遠(yuǎn)程診斷,節(jié)約了大量的人力、財(cái)力,縮短了診斷時(shí)間,減少了因病蟲害延誤而使植物生產(chǎn)中造成大量的損失。在后臺我們可以方便的對數(shù)據(jù)資料進(jìn)行適時(shí)的管理,保證了診斷信息的時(shí)效性,使診斷更為客觀、真實(shí)。
????
?圖1 植物病害遠(yuǎn)程診斷系統(tǒng)構(gòu)成
4.系統(tǒng)設(shè)計(jì)?
????在系統(tǒng)的設(shè)計(jì)中我們實(shí)現(xiàn)松耦合,系統(tǒng)里的所有組件都是服務(wù)。整個(gè)系統(tǒng)采用Struts結(jié)構(gòu),圖2是系統(tǒng)的主體框架設(shè)計(jì)圖,圖3為系統(tǒng)的底層結(jié)構(gòu)。
???
????????????????????????????????????????????????? 圖2 系統(tǒng)主體框架設(shè)計(jì)
圖3 底層結(jié)構(gòu)
????在Model中,用一個(gè)表單Bean來保存HTTP請求傳來的數(shù)據(jù),兩個(gè)業(yè)務(wù)邏輯Bean來處理業(yè)務(wù)邏輯,因?yàn)閷Σ『拖x的診斷機(jī)理不同,所以才用了兩個(gè)業(yè)務(wù)邏輯Bean,其中一個(gè)為進(jìn)行二叉樹推理,另一個(gè)為神經(jīng)網(wǎng)絡(luò)推理,只所以分成兩個(gè)也是盡量的讓系統(tǒng)松耦合,隨著系統(tǒng)的升級以后可能采用更為先進(jìn)的準(zhǔn)確的推理機(jī),那么到時(shí)我們只需更換相應(yīng)的業(yè)務(wù)邏輯Bean就可以了,而對別的都不夠成影響,這對以后的系統(tǒng)升級無疑是一件很好的事。在系統(tǒng)的推理過程中,勢必會有很多的會話信息,這里我們用系統(tǒng)狀態(tài)Bean來保存跨越多個(gè)HTTP請求的單個(gè)客戶的會話信息。
????視圖使用JSP建立,用JSP產(chǎn)生XML文件,再由XLST把XML文件轉(zhuǎn)換成HTML文件,然后傳送到客戶端。
????控制器處理所有發(fā)送到Struts的HTTP請求。根據(jù)對病和蟲的不同診斷需求,他截取的請求分發(fā)到相應(yīng)的動(dòng)作類,負(fù)責(zé)用相應(yīng)的請求參數(shù)填充FormBean并傳給動(dòng)作類。在動(dòng)作類通過訪問Model中的不同業(yè)務(wù)邏輯Bean實(shí)現(xiàn)核心業(yè)務(wù)邏輯后,根據(jù)動(dòng)作類的返回值把控制權(quán)交給相應(yīng)的JSP文件,生成試圖。
????以上是系統(tǒng)的主體框架設(shè)計(jì),在系統(tǒng)的開發(fā)中是按圖一的各個(gè)模塊來開發(fā),將系統(tǒng)分為前臺和后臺兩部分,在前臺也就是客戶的登陸和推理界面,然后提供系統(tǒng)的搜索功能。后臺則為系統(tǒng)管理員對整個(gè)系統(tǒng)的維護(hù)功能。在整個(gè)系統(tǒng)的開發(fā)過程中就是按照系統(tǒng)的主體框架路線和系統(tǒng)的構(gòu)成圖兩條線來做的,系統(tǒng)整體層次清晰,結(jié)構(gòu)合理,把各個(gè)模塊都組件化,使得系統(tǒng)在后續(xù)的維護(hù)和升級中都變的比較容易。
5.結(jié)束語?
????系統(tǒng)基于Web及人工智能,可大大縮小“發(fā)現(xiàn)——診斷”的時(shí)滯。由于在整個(gè)診斷過程中需要對大量數(shù)據(jù)進(jìn)行傳遞和處理,而Java和XML的完美組合正使得這一問題得到了很好的解決。系統(tǒng)的松耦合性也使系統(tǒng)以后的升級中得以順利進(jìn)行,在升級部分只需更換相應(yīng)組件即可,而對系統(tǒng)的其他部分沒有影響,免去了傳統(tǒng)系統(tǒng)升級中的“牽一發(fā)而動(dòng)全身”之痛。
????現(xiàn)在信息技術(shù)的發(fā)展使得遠(yuǎn)程診斷成為以后的發(fā)展趨勢,為了保證診斷的準(zhǔn)確性和可靠性,我們還需繼續(xù)利用數(shù)據(jù)挖掘技術(shù),發(fā)現(xiàn)蘊(yùn)涵在歷年病蟲害發(fā)生的統(tǒng)計(jì)數(shù)據(jù)中的知識和規(guī)則,從而為診斷和決策支持提供服務(wù)。隨著數(shù)據(jù)量的不端增加,全文的檢索速度也慢慢的成為系統(tǒng)的瓶頸,以后將用lucene來完成對大量信息的全文索引/檢索功能,使系統(tǒng)性能更為強(qiáng)大。
參考文獻(xiàn)?
[1] http://www-900.ibm.com/developerWorks/cn/java/j-strutscol
[2] http://gceclub.sun.com.cn/NASApp/sme/controller/teclist?tid=0102
[5] Stephen Asbury,Scott R.Weiner著.王強(qiáng),田原,王軍,等譯.Java企業(yè)級應(yīng)用開發(fā)指南.機(jī)械工業(yè)出版社,中信出版社,2004
[6] 封傳紅,廖華明,羅林明,涂建華.病蟲生物災(zāi)害遠(yuǎn)程診斷技術(shù)探討. 中國植保導(dǎo)刊,2004(5)
?