前言:本站為你精心整理了Java在線農(nóng)業(yè)輔助分析范文,希望能為你的創(chuàng)作提供參考價(jià)值,我們的客服老師可以幫助你提供個(gè)性化的參考范文,歡迎咨詢。
1問(wèn)題的提出
隨著信息技術(shù)的飛速發(fā)展,互聯(lián)網(wǎng)已經(jīng)滲透到社會(huì)生產(chǎn)和生活的各個(gè)方面。農(nóng)業(yè)專家系統(tǒng)正是這一背景下的產(chǎn)物,它將農(nóng)業(yè)生產(chǎn)技術(shù)和計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)高效結(jié)合,將與農(nóng)業(yè)生產(chǎn)相關(guān)的地質(zhì)情況、土壤類型、肥料配方等數(shù)據(jù)通過(guò)互聯(lián)網(wǎng)整合起來(lái),對(duì)緩解農(nóng)業(yè)生產(chǎn)技術(shù)的地區(qū)差異、解決農(nóng)業(yè)生產(chǎn)中所遇到的問(wèn)題和加快科技成果的交流起到了積極作用。java語(yǔ)言是一個(gè)“簡(jiǎn)單、強(qiáng)大、面向?qū)ο?、平臺(tái)獨(dú)立、多線程、動(dòng)態(tài)和通用的編程環(huán)境”,它被廣泛采用和迅速普及的核心在于其平臺(tái)的獨(dú)立性[1]。Java語(yǔ)言不僅僅是一個(gè)程序設(shè)計(jì)語(yǔ)言,更是一個(gè)網(wǎng)絡(luò)操作系統(tǒng)。Java語(yǔ)言將從根本上改變網(wǎng)絡(luò)應(yīng)用程序的開(kāi)發(fā)和使用方式,使它逐漸成為在Internet網(wǎng)絡(luò)以及操作系統(tǒng)等方面的應(yīng)用上最受歡迎的開(kāi)發(fā)與編程語(yǔ)言之一。筆者將基于土壤信息管理、生產(chǎn)力評(píng)價(jià)和肥料配方等幾方面來(lái)研究互聯(lián)網(wǎng)環(huán)境下農(nóng)業(yè)專家系統(tǒng)的輔助系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),以期為相關(guān)研究提供借鑒。
2在線農(nóng)業(yè)輔助系統(tǒng)的結(jié)構(gòu)體系
2.1整體結(jié)構(gòu)如圖1所示,因?yàn)橛脩糨^為分散,同時(shí)為了節(jié)約成本,該系統(tǒng)采用基于客戶端/服務(wù)器的B/S結(jié)構(gòu):第1層為客戶端,用戶使用Web瀏覽器進(jìn)行登陸;通過(guò)互聯(lián)網(wǎng)與處于第2層的服務(wù)器端進(jìn)行連接;第3層為數(shù)據(jù)庫(kù),實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與管理。
2.2客戶端模塊客戶端使用JavaApplet來(lái)實(shí)現(xiàn),通過(guò)在Web頁(yè)面中嵌入具有計(jì)算功能的Applet小程序來(lái)完成Ap-plet與Servlet的通信,以及將集成有數(shù)據(jù)訪問(wèn)和計(jì)算功能的類包隨同Web頁(yè)面一起下載到客戶端,從而實(shí)現(xiàn)對(duì)分布異構(gòu)數(shù)據(jù)的調(diào)用和分布式計(jì)算。如圖2所示,在線農(nóng)業(yè)輔助系統(tǒng)的客戶端有4個(gè)相對(duì)獨(dú)立的模塊:土壤信息、生產(chǎn)力信息、肥料名稱和數(shù)量以及配方施肥結(jié)果。
2.3服務(wù)器端模塊服務(wù)器端使用JavaServlet程序?qū)崿F(xiàn),如圖3所示。與客戶端相對(duì)應(yīng),同樣有4個(gè)模塊:土壤信息查詢、生產(chǎn)力信息分析、肥料名稱查詢和施肥配方分析。
2.4數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)的內(nèi)容和數(shù)據(jù)的組織形式,是系統(tǒng)各功能之間數(shù)據(jù)共享的基礎(chǔ)。該系統(tǒng)數(shù)據(jù)庫(kù)采用SQLServer2005,它的主要內(nèi)容包括土壤信息(土壤養(yǎng)分、土壤環(huán)境和土壤類型)和肥料信息(有機(jī)肥和化肥)。數(shù)據(jù)庫(kù)的主要操作流程為:讀取土壤信息和肥料信息,傳給Applet供用戶選擇使用,也可以為施肥配方分析提供依據(jù)。
2.5系統(tǒng)功能用戶依據(jù)土壤信息、生產(chǎn)力情況和選擇施用的肥料,通過(guò)該在線系統(tǒng)制定農(nóng)作物在每個(gè)生長(zhǎng)時(shí)期的科學(xué)施肥方案,從而提高作物產(chǎn)量,具體功能有8個(gè)。①用戶給出土壤養(yǎng)分及環(huán)境條件,系統(tǒng)根據(jù)土壤生產(chǎn)潛力模型預(yù)估土地單位面積產(chǎn)量。②利用土地的歷年平均產(chǎn)量得到目標(biāo)年該土地的推薦目標(biāo)產(chǎn)量。③根據(jù)土壤的氮、磷含量和土地目標(biāo)產(chǎn)量進(jìn)行目標(biāo)產(chǎn)量與土壤養(yǎng)分的有效性檢驗(yàn)。④利用氮、磷素肥建立數(shù)學(xué)模型,根據(jù)土壤養(yǎng)分和目標(biāo)產(chǎn)量求出土壤所需純氮、磷量。⑤用戶輸入所需有機(jī)肥的數(shù)量和種類。⑥通過(guò)模型計(jì)算用戶選擇施用的有機(jī)肥的純氮、磷含量。⑦根據(jù)土壤所需純氮、磷量和用戶施用有機(jī)肥的純氮、磷量,得到土壤所需化肥的純氮、磷量。⑧根據(jù)土壤所需化肥純氮、磷量和施肥配比模型,得到每個(gè)生育期的肥料計(jì)劃。施肥量的計(jì)算模型為:施肥量=(作物單位產(chǎn)量養(yǎng)分吸收量×目標(biāo)產(chǎn)量-土壤測(cè)試值×0•15×土壤養(yǎng)分校正系數(shù))/(肥料中養(yǎng)分含量×肥料當(dāng)季利用率)[2]。其中,土壤養(yǎng)分校正系數(shù)=(無(wú)肥區(qū)產(chǎn)量×作物單位產(chǎn)量養(yǎng)分吸收量)/(土壤養(yǎng)分測(cè)定值×0.15)。
3實(shí)現(xiàn)系統(tǒng)的關(guān)鍵環(huán)節(jié)
3.1JavaServlet技術(shù)主要利用JavaServlet技術(shù)來(lái)實(shí)現(xiàn)該系統(tǒng)[3]。JavaServlet程序運(yùn)行在服務(wù)器端,與傳統(tǒng)的CGI技術(shù)相比,JavaServlet效率高、容易使用,具有強(qiáng)大的功能,可移植性更強(qiáng),有利于節(jié)約資金。JavaServlet的運(yùn)行機(jī)制為:客戶建立一個(gè)Web服務(wù)請(qǐng)求,命名一個(gè)Serverle,t就如同URL的一部分,Web服務(wù)器向由Servlet類對(duì)象所定位的Servlet引擎發(fā)送一個(gè)請(qǐng)求,Servlet引擎調(diào)用一個(gè)Servlet服務(wù)方法。即:瀏覽器(客戶)←URL請(qǐng)求→Web服務(wù)器←→Servlet對(duì)象(應(yīng)用程序服務(wù)器)。
3.2系統(tǒng)運(yùn)行環(huán)境系統(tǒng)采用基于B/S結(jié)構(gòu)的3層網(wǎng)絡(luò)結(jié)構(gòu),因此客戶端需要擁有支持JavaApplet的瀏覽器、支持JavaServlet的服務(wù)器和能運(yùn)行相關(guān)的數(shù)據(jù)庫(kù),并且客戶端的瀏覽器需要支持Java虛擬機(jī)[4]。服務(wù)器端的應(yīng)用程序要運(yùn)行在一個(gè)支持JavaServlet的Web服務(wù)器上,或者在現(xiàn)有的Web服務(wù)器上安裝Servlet軟件包。該系統(tǒng)采用的是Sun的JavaWebServer。該服務(wù)器用Java語(yǔ)言寫(xiě)成。實(shí)現(xiàn)該系統(tǒng)時(shí),主要涉及以下幾個(gè)關(guān)鍵技術(shù):客戶端Ja-vaApplet與服務(wù)器端JavaServlet的通信;服務(wù)器端對(duì)數(shù)據(jù)庫(kù)的操作。客戶端和服務(wù)器端可以通過(guò)Http協(xié)議的Get和Post進(jìn)行交互,客戶端必須打開(kāi)一個(gè)到指定服務(wù)器端的URL連接;一旦建立了此連接,客戶端就可以從服務(wù)器端得到一個(gè)OutputStream或InputStream對(duì)象。實(shí)現(xiàn)客戶端與服務(wù)器通信的關(guān)鍵代碼為://Applet與Servlet通訊的連接URLurl=newURL(serverURL);URLConnectionuc=ur.lopenConnection();//輸出流DataOutputStreamFlush=newDataOutputStream(uc.getOutputStream());Flush.writeBytes(querystring);Flush.flush();Flush.close();//接受流InputStreamReadinFlush=newInputStreamReader(uc.getInputStream());服務(wù)器通過(guò)Servlet中的getParameter來(lái)獲取客戶端請(qǐng)求,通過(guò)ServletOutputStream將服務(wù)器響應(yīng)流輸出,相應(yīng)程序片段為://服務(wù)器端獲取請(qǐng)求和響應(yīng)StringSQL=new(req.getParamenter(“param”);//響應(yīng)ServletOutputStreamservletout=res.getOutputStream();…servletou.tprintln(responsel);
3.3JavaServlet與數(shù)據(jù)庫(kù)的連接首先使用Connection對(duì)象的createStatement()方法創(chuàng)建一個(gè)可以有查詢的State-ment類的對(duì)象。然后使用該類的executiveQuery()方法,它的參數(shù)是包含SQL語(yǔ)句的字符串,并且會(huì)返回?cái)?shù)據(jù)庫(kù)中的所有內(nèi)容,并把它作為ResultSet類的對(duì)象,然后使用ResultSet類的geMtetaData()方法,返回一個(gè)ResultSeMtetaData類的對(duì)象。
3.4數(shù)據(jù)處理在數(shù)據(jù)庫(kù)訪問(wèn)的基礎(chǔ)上,可將所獲數(shù)據(jù)傳遞給相應(yīng)Applet進(jìn)行計(jì)算分析。由于數(shù)據(jù)庫(kù)訪問(wèn)過(guò)程中采用字符串的數(shù)據(jù)格式讀出數(shù)據(jù),所以在涉及計(jì)算的應(yīng)用中,所獲數(shù)據(jù)不能直接進(jìn)行計(jì)算,還需進(jìn)一步將數(shù)據(jù)流轉(zhuǎn)化為雙精度格式。完成相應(yīng)數(shù)據(jù)讀取和數(shù)據(jù)轉(zhuǎn)換格式的程序?yàn)?//讀取數(shù)據(jù)do{Stringreturninfo=rs.getString();Listtable1.add(returninfo);Seclections0=listtable1.getItems();for(intloopIndex=0;loopIndex<selection0.lengtn();loopIndex++){al[loopIndex]=Double.parseDouble(selection0[loopIn-dex];}}while(rs.next())
3.5關(guān)閉數(shù)據(jù)庫(kù)連接當(dāng)訪問(wèn)完某個(gè)數(shù)據(jù)庫(kù)時(shí),應(yīng)該關(guān)閉數(shù)據(jù)連接,釋放與連接有關(guān)的資源。具體方法為:依次調(diào)用Result類、SetStatement類和Connection類的close()方法。另外,在程序中,使用繼承方法,實(shí)現(xiàn)了帶有有效性檢驗(yàn)的浮點(diǎn)型單行編輯器,并可自定義小數(shù)進(jìn)行四舍五入的運(yùn)算。同時(shí)可以運(yùn)用多態(tài)方法,使控件對(duì)象的使用更具靈活性。
4結(jié)論與討論
采用Java技術(shù),設(shè)計(jì)和實(shí)現(xiàn)了在線農(nóng)業(yè)輔助系統(tǒng),即由客戶端通過(guò)瀏覽器訪問(wèn)服務(wù)器,下載集成有計(jì)算分析功能的Applet小程序,通過(guò)Applet和Servlet通訊,調(diào)用和處理服務(wù)器與客戶端本地?cái)?shù)據(jù),再利用客戶端的計(jì)算資源實(shí)現(xiàn)計(jì)算。在未來(lái)的工作中,將研究如何將分布式網(wǎng)絡(luò)用于該系統(tǒng)中,以便更好地利用網(wǎng)絡(luò)資源。