1.引言?
????網(wǎng)絡(luò)服務(wù)已經(jīng)影響到整個(gè)社會(huì)的方方面面,Web應(yīng)用程序也變的越來越復(fù)雜,,近年來,,我國(guó)農(nóng)業(yè)生產(chǎn)形勢(shì)發(fā)生了諸多變化,,生態(tài)環(huán)境的改變使得新的病蟲害開始發(fā)生,在植物類產(chǎn)品生產(chǎn)過程中因未能及時(shí)診斷病蟲害而造成的損失是巨大的,,對(duì)植物病蟲害診斷工作提出了挑戰(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)耦合,會(huì)有邏輯混亂,,調(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)。平臺(tái)為創(chuàng)建,、部署和管理企業(yè)級(jí)類應(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平臺(tái)的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請(qǐng)求的入口點(diǎn)。它截取和分發(fā)這些請(qǐng)求到相應(yīng)的動(dòng)作類(都是Action類的子類),。同時(shí),,控制組件也負(fù)責(zé)用相應(yīng)的請(qǐ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ò)展、跨平臺(tái),、開放的特性無疑與Java相呼應(yīng),,形成了完美搭檔。在Web這樣一個(gè)公共的,、開放的資源平臺(tái)與計(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ù)的通用性,。
????在對(duì)數(shù)據(jù)庫的處理時(shí)我們采用面向?qū)ο蟮臄?shù)據(jù)持久化技術(shù)hibernate,,它是現(xiàn)在對(duì)數(shù)據(jù)庫處理的一個(gè)非常優(yōu)秀的O/R Mapping(對(duì)象關(guān)系映射框架)產(chǎn)品,它對(duì)JDBC進(jìn)行了輕量級(jí)的對(duì)象封裝,,使Java程序員可以隨心所欲的使用對(duì)象編程思想來操縱數(shù)據(jù)庫,。Hibernate不僅僅管理Java類到數(shù)據(jù)庫表的映射,還提供數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法,,主要包括以下幾個(gè)特點(diǎn):
1.具有開源和免費(fèi)的License
2.輕量級(jí)封裝,,避免引入過多復(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ā)展方向?;趯?duì)病和蟲診斷的不同特點(diǎn),,在推理機(jī)上也采用了不同的方法,對(duì)害蟲的診斷上采用了二叉樹推理機(jī),,而對(duì)病害的診斷采用神經(jīng)網(wǎng)絡(luò)推理機(jī)。
????系統(tǒng)主要包括以下功能:
1.?用戶認(rèn)證,。系統(tǒng)所有用戶的密碼采取MD5算法加密,,任何人無法從數(shù)據(jù)庫(或者數(shù)據(jù)包)中獲取到其他人員的密碼。
2.?系統(tǒng)管理員對(duì)系統(tǒng)的維護(hù),,包括對(duì)用戶的管理和對(duì)病蟲害數(shù)據(jù)的填加,、更新、刪除等操作,。
3.?用戶對(duì)信息的搜索,。用戶可以通過站內(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)中造成大量的損失。在后臺(tái)我們可以方便的對(duì)數(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請(qǐng)求傳來的數(shù)據(jù),,兩個(gè)業(yè)務(wù)邏輯Bean來處理業(yè)務(wù)邏輯,因?yàn)閷?duì)病和蟲的診斷機(jī)理不同,,所以才用了兩個(gè)業(yè)務(wù)邏輯Bean,,其中一個(gè)為進(jìn)行二叉樹推理,另一個(gè)為神經(jīng)網(wǎng)絡(luò)推理,,只所以分成兩個(gè)也是盡量的讓系統(tǒng)松耦合,,隨著系統(tǒng)的升級(jí)以后可能采用更為先進(jìn)的準(zhǔn)確的推理機(jī),那么到時(shí)我們只需更換相應(yīng)的業(yè)務(wù)邏輯Bean就可以了,,而對(duì)別的都不夠成影響,,這對(duì)以后的系統(tǒng)升級(jí)無疑是一件很好的事。在系統(tǒng)的推理過程中,,勢(shì)必會(huì)有很多的會(huì)話信息,,這里我們用系統(tǒng)狀態(tài)Bean來保存跨越多個(gè)HTTP請(qǐng)求的單個(gè)客戶的會(huì)話信息。
????視圖使用JSP建立,,用JSP產(chǎn)生XML文件,,再由XLST把XML文件轉(zhuǎn)換成HTML文件,然后傳送到客戶端,。
????控制器處理所有發(fā)送到Struts的HTTP請(qǐng)求,。根據(jù)對(duì)病和蟲的不同診斷需求,,他截取的請(qǐng)求分發(fā)到相應(yīng)的動(dòng)作類,負(fù)責(zé)用相應(yīng)的請(qǐ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ái)和后臺(tái)兩部分,,在前臺(tái)也就是客戶的登陸和推理界面,,然后提供系統(tǒng)的搜索功能。后臺(tái)則為系統(tǒng)管理員對(duì)整個(gè)系統(tǒng)的維護(hù)功能,。在整個(gè)系統(tǒng)的開發(fā)過程中就是按照系統(tǒng)的主體框架路線和系統(tǒng)的構(gòu)成圖兩條線來做的,,系統(tǒng)整體層次清晰,結(jié)構(gòu)合理,,把各個(gè)模塊都組件化,,使得系統(tǒng)在后續(xù)的維護(hù)和升級(jí)中都變的比較容易。
5.結(jié)束語?
????系統(tǒng)基于Web及人工智能,,可大大縮小“發(fā)現(xiàn)——診斷”的時(shí)滯,。由于在整個(gè)診斷過程中需要對(duì)大量數(shù)據(jù)進(jìn)行傳遞和處理,而Java和XML的完美組合正使得這一問題得到了很好的解決,。系統(tǒng)的松耦合性也使系統(tǒng)以后的升級(jí)中得以順利進(jìn)行,,在升級(jí)部分只需更換相應(yīng)組件即可,而對(duì)系統(tǒng)的其他部分沒有影響,,免去了傳統(tǒng)系統(tǒng)升級(jí)中的“牽一發(fā)而動(dòng)全身”之痛,。
????現(xiàn)在信息技術(shù)的發(fā)展使得遠(yuǎn)程診斷成為以后的發(fā)展趨勢(shì),為了保證診斷的準(zhǔn)確性和可靠性,,我們還需繼續(xù)利用數(shù)據(jù)挖掘技術(shù),發(fā)現(xiàn)蘊(yùn)涵在歷年病蟲害發(fā)生的統(tǒng)計(jì)數(shù)據(jù)中的知識(shí)和規(guī)則,,從而為診斷和決策支持提供服務(wù),。隨著數(shù)據(jù)量的不端增加,全文的檢索速度也慢慢的成為系統(tǒng)的瓶頸,,以后將用lucene來完成對(duì)大量信息的全文索引/檢索功能,,使系統(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è)級(jí)應(yīng)用開發(fā)指南.機(jī)械工業(yè)出版社,中信出版社,2004
[6] 封傳紅,廖華明,羅林明,涂建華.病蟲生物災(zāi)害遠(yuǎn)程診斷技術(shù)探討. 中國(guó)植保導(dǎo)刊,2004(5)
?