首页 > 文章中心 > 正文

Java在线农业辅助分析

Java在线农业辅助分析

1问题的提出

随着信息技术的飞速发展,互联网已经渗透到社会生产和生活的各个方面。农业专家系统正是这一背景下的产物,它将农业生产技术和计算机网络技术高效结合,将与农业生产相关的地质情况、土壤类型、肥料配方等数据通过互联网整合起来,对缓解农业生产技术的地区差异、解决农业生产中所遇到的问题和加快科技成果的交流起到了积极作用。Java语言是一个“简单、强大、面向对象、平台独立、多线程、动态和通用的编程环境”,它被广泛采用和迅速普及的核心在于其平台的独立性[1]。Java语言不仅仅是一个程序设计语言,更是一个网络操作系统。Java语言将从根本上改变网络应用程序的开发和使用方式,使它逐渐成为在Internet网络以及操作系统等方面的应用上最受欢迎的开发与编程语言之一。笔者将基于土壤信息管理、生产力评价和肥料配方等几方面来研究互联网环境下农业专家系统的辅助系统的设计与实现,以期为相关研究提供借鉴。

2在线农业辅助系统的结构体系

2.1整体结构如图1所示,因为用户较为分散,同时为了节约成本,该系统采用基于客户端/服务器的B/S结构:第1层为客户端,用户使用Web浏览器进行登陆;通过互联网与处于第2层的服务器端进行连接;第3层为数据库,实现数据的存储与管理。

2.2客户端模块客户端使用JavaApplet来实现,通过在Web页面中嵌入具有计算功能的Applet小程序来完成Ap-plet与Servlet的通信,以及将集成有数据访问和计算功能的类包随同Web页面一起下载到客户端,从而实现对分布异构数据的调用和分布式计算。如图2所示,在线农业辅助系统的客户端有4个相对独立的模块:土壤信息、生产力信息、肥料名称和数量以及配方施肥结果。

2.3服务器端模块服务器端使用JavaServlet程序实现,如图3所示。与客户端相对应,同样有4个模块:土壤信息查询、生产力信息分析、肥料名称查询和施肥配方分析。

2.4数据库设计数据库的内容和数据的组织形式,是系统各功能之间数据共享的基础。该系统数据库采用SQLServer2005,它的主要内容包括土壤信息(土壤养分、土壤环境和土壤类型)和肥料信息(有机肥和化肥)。数据库的主要操作流程为:读取土壤信息和肥料信息,传给Applet供用户选择使用,也可以为施肥配方分析提供依据。

2.5系统功能用户依据土壤信息、生产力情况和选择施用的肥料,通过该在线系统制定农作物在每个生长时期的科学施肥方案,从而提高作物产量,具体功能有8个。①用户给出土壤养分及环境条件,系统根据土壤生产潜力模型预估土地单位面积产量。②利用土地的历年平均产量得到目标年该土地的推荐目标产量。③根据土壤的氮、磷含量和土地目标产量进行目标产量与土壤养分的有效性检验。④利用氮、磷素肥建立数学模型,根据土壤养分和目标产量求出土壤所需纯氮、磷量。⑤用户输入所需有机肥的数量和种类。⑥通过模型计算用户选择施用的有机肥的纯氮、磷含量。⑦根据土壤所需纯氮、磷量和用户施用有机肥的纯氮、磷量,得到土壤所需化肥的纯氮、磷量。⑧根据土壤所需化肥纯氮、磷量和施肥配比模型,得到每个生育期的肥料计划。施肥量的计算模型为:施肥量=(作物单位产量养分吸收量×目标产量-土壤测试值×0•15×土壤养分校正系数)/(肥料中养分含量×肥料当季利用率)[2]。其中,土壤养分校正系数=(无肥区产量×作物单位产量养分吸收量)/(土壤养分测定值×0.15)。

3实现系统的关键环节

3.1JavaServlet技术主要利用JavaServlet技术来实现该系统[3]。JavaServlet程序运行在服务器端,与传统的CGI技术相比,JavaServlet效率高、容易使用,具有强大的功能,可移植性更强,有利于节约资金。JavaServlet的运行机制为:客户建立一个Web服务请求,命名一个Serverle,t就如同URL的一部分,Web服务器向由Servlet类对象所定位的Servlet引擎发送一个请求,Servlet引擎调用一个Servlet服务方法。即:浏览器(客户)←URL请求→Web服务器←→Servlet对象(应用程序服务器)。

3.2系统运行环境系统采用基于B/S结构的3层网络结构,因此客户端需要拥有支持JavaApplet的浏览器、支持JavaServlet的服务器和能运行相关的数据库,并且客户端的浏览器需要支持Java虚拟机[4]。服务器端的应用程序要运行在一个支持JavaServlet的Web服务器上,或者在现有的Web服务器上安装Servlet软件包。该系统采用的是Sun的JavaWebServer。该服务器用Java语言写成。实现该系统时,主要涉及以下几个关键技术:客户端Ja-vaApplet与服务器端JavaServlet的通信;服务器端对数据库的操作。客户端和服务器端可以通过Http协议的Get和Post进行交互,客户端必须打开一个到指定服务器端的URL连接;一旦建立了此连接,客户端就可以从服务器端得到一个OutputStream或InputStream对象。实现客户端与服务器通信的关键代码为://Applet与Servlet通讯的连接URLurl=newURL(serverURL);URLConnectionuc=ur.lopenConnection();//输出流DataOutputStreamFlush=newDataOutputStream(uc.getOutputStream());Flush.writeBytes(querystring);Flush.flush();Flush.close();//接受流InputStreamReadinFlush=newInputStreamReader(uc.getInputStream());服务器通过Servlet中的getParameter来获取客户端请求,通过ServletOutputStream将服务器响应流输出,相应程序片段为://服务器端获取请求和响应StringSQL=new(req.getParamenter(“param”);//响应ServletOutputStreamservletout=res.getOutputStream();…servletou.tprintln(responsel);

3.3JavaServlet与数据库的连接首先使用Connection对象的createStatement()方法创建一个可以有查询的State-ment类的对象。然后使用该类的executiveQuery()方法,它的参数是包含SQL语句的字符串,并且会返回数据库中的所有内容,并把它作为ResultSet类的对象,然后使用ResultSet类的geMtetaData()方法,返回一个ResultSeMtetaData类的对象。

3.4数据处理在数据库访问的基础上,可将所获数据传递给相应Applet进行计算分析。由于数据库访问过程中采用字符串的数据格式读出数据,所以在涉及计算的应用中,所获数据不能直接进行计算,还需进一步将数据流转化为双精度格式。完成相应数据读取和数据转换格式的程序为://读取数据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关闭数据库连接当访问完某个数据库时,应该关闭数据连接,释放与连接有关的资源。具体方法为:依次调用Result类、SetStatement类和Connection类的close()方法。另外,在程序中,使用继承方法,实现了带有有效性检验的浮点型单行编辑器,并可自定义小数进行四舍五入的运算。同时可以运用多态方法,使控件对象的使用更具灵活性。

4结论与讨论

采用Java技术,设计和实现了在线农业辅助系统,即由客户端通过浏览器访问服务器,下载集成有计算分析功能的Applet小程序,通过Applet和Servlet通讯,调用和处理服务器与客户端本地数据,再利用客户端的计算资源实现计算。在未来的工作中,将研究如何将分布式网络用于该系统中,以便更好地利用网络资源。