基于J2EE自动站数据查询系统设计与实现
2016-04-11樊洁馨
樊洁馨
(宁强县气象局,陕西宁强 724400)
基于J2EE自动站数据查询系统设计与实现
樊洁馨
(宁强县气象局,陕西宁强724400)
摘要:基于J2EE开发技术和现有数据库环境,采用MVC(Model-View-Controller)设计模式,开发自动站数据查询系统,实现了以网页方式为用户提供汉中市各县区温度、降水量数据查询及图形显示等功能。
关键词:自动站数据; J2EE;自动站数据查询
自动站数据查询业务系统在基层气象工作中占有重要地位,不仅能及时有效地为工作人员提供自动站观测业务信息,还可以为开展气象服务提供高效的数据保障。根据J2EE技术特点,设计开发了适合市县使用的自动站数据查询系统,该系统操作便捷,数据显示直观,且易于维护和功能扩展。本文介绍系统的研发思路及所用到的开发技术,供相关技术人员参考。
1开发语言及工具
J2EE(Java 2 Platform,Enterprise Edition)是一个为大企业主机级的计算类型而设计的Java平台,它简化了应用程序的开发,具有可伸缩性、灵活性、易维护等优点;Eclipse 是一个开放源代码的基于Java的可扩展开发平台,它为编程开发提供了一个框架和一组服务,用于通过插件组件构建开发环境;MyEclipse是一个用于开发J2EE的插件集合,其功能强大,支持广泛。
2软件运行环境
服务器端软件环境为JDK8、Tomcat6.0;数据库为SQLServer2008;客户端软件环境为IE8.0以上;支持环境为windowsXP/Windows 7/Windows 8。
3系统主要功能
实现任意时段内自动站小时平均气温、最高(最低)气温及出现时间、降水量等要素记录查询;统计该时段内平均温度、最高(低)气温、总降水量;显示并输出该时段内温度变化曲线图和降水量柱状图。
4具体实现
4.1主页功能
在index.jsp页面,主要进行查询时段、台站范围、查询要素选择,运用JSP、JavaScript将所选信息提交至ZDZServlet.java页面处理。
(1) index.jsp页面嵌套技术
运用JSP页面嵌套方式,将查询信息选择页面left.jsp嵌套至主页index.jsp页面中。index.jsp页面不进行业务逻辑处理,而将处理程序放置于left.jsp页面,减少了index.jsp页面的代码量,并提高了代码的利用率与可移植性。
实现方式:
(2) left.jsp数据提交及时间插件使用技术
查询信息选择页面left.jsp,运用HTML语言编写,使用“form”表单中“post”方法提交数据至ZDZServlet.java,用于下一步数据处理。为方便、直观地选择所要查询的时间范围,“时间”选项使用“My97DatePicker”日历插件来实现。将“My97DatePicker”文件导入至工程中,然后使用标签将其引入,并根据该插件所提供的方法,按需求进行调用。
实现方式:
4.2数据库查询
以查询全部要素为例,运用ConnDB.java、ZDZDataBean.java、ZDZDataBO.java、right.jsp、 ZDZServlet.java来进行数据处理。ConnDB.java主要进行数据库链接;ZDZDataBean.java主要进行对所需要查询元素get、set方法的封装;ZDZDataBO.java主要进行数据库查询;ZDZServlet.java主要进行数据的处理与传递;right.jsp主要进行查询结果的显示。
(1) ConnDB.java连接数据库技术。ConnDB.java用于数据库的链接,在编写该方法前,应在本工程中导入与SQL数据库相关的sqljdbc4.jar包。
(2)ZDZDataBean.java技术。ZDZDataBean. java封装所要调取元素的get、set方法,使其他类可以调用(设置和获取)该方法。
(3) ZDZDataBO.java数据查询技术。ZDZDataBO.java用于数据库查询,实现根据时间范围与区站号进行数据记录数(即数据显示页码数量)的统计、平均温度、最高(低)温度、总降水量的统计和查询结果的分页显示。
实现方式:
①根据所给出的时间范围与区站号查询得到数据记录总条数,按照系统设置的每页显示记录条数计算出显示的页数。
select count(*) from tabtimedata where ObservTimes between ’"+timesta+"’and ’"+timeend+"’and StationNum=’"+stationnum+"’
if(rs.next()){
rowCount=rs.getInt(1);
}if(rowCount%pageSize==0){
pageCount=rowCount/pageSize;
}else{
pageCount=rowCount/pageSize+1;
}
其中,stationnum为区站号,timesta为开始时间值,timeend为结束时间值,pageSize为每页显示数据条数,rowCount为纪录总条数,pageCount为页数,tabtimedata 为数据库名,ObservTimes、StationNum分别为数据库中观测时间字段名以及区站号字段名。
②根据所给出的时间范围与区站号查询出当前页码下的全部数据。
select top "+pageSize+" * from tabtimedata where ObservTimes between ’"+timesta+"’and ’"+timeend+"’and StationNum=’"+stationnum+"’ and ObservTimes not in (select top " +""+pageSize*(pageNow-1)+" ObservTimes from tabtimedata where ObservTimes between ’"+timesta+"’and ’"+timeend+"’and StationNum=’"+stationnum+"’Order By ObservTimes ) Order By ObservTimes
其中,pageNow为当前页码值,且pageNow≥1。
③根据所给出的时间范围与区站号分别查询统计出该时间范围内的平均温度、最高(低)温度、总降水量。以平均温度统计为例,查询语句如下:
select avg(convert(float,DryBulTemp)) from tabtimedata where ObservTimes between ’"+timesta+"’and ’"+timeend+"’and StationNum=’"+stationnum+"’
其中DryBulTemp为数据库中温度字段名。
(4)ZDZServlet.java中要素值查询、处理技术。ZDZServlet.java用于网页参数的接收、处理,并将处理过的数据返回到所要显示的页面。
实现方法:
public class ZDZServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1.接收网页传递过来的数据
String stationnum=request.getParameter("stationnum");
String date1=request.getParameter("date1");
String date2=request.getParameter("date2");
//2.调用ZDZDataBO.java中方法查询数据并处理
ZDZDateBO zbo=new ZDZDateBO();
double temp=zbo.getZDZAVGTEMP(stationnum, time1, time2);
String avgtemp=String.valueOf(temp);
//3.将处理后的数据再传递回网页
request.setAttribute("avgtemp", avgtemp);
request.getRequestDispatcher("right.jsp").forward(request, response);}
}
(5)right.jsp中显示统计值技术。right.jsp将ZDZServlet.java 所传递过来的值接收并进行格式化处理,然后通过表格的方式显示出结果。
实现方法:
<%float avgtemp=Float.parseFloat((String)request.getAttribute("avgtemp"));
float temp2=(float)(Math.round(avgtemp))/10;%>
4.3要素分页显示
以查询全部要素为例,运用right.jsp、ZDZServlet.java、ZDZDataBO.java来实现。right.jsp页面主要用于参数的传递与显示,ZDZServlet.java主要用于参数的传递与处理,ZDZDataBO.java主要进行页面总数的查询计算以及数据的分页查询。
(1) right.jsp中分页技术。right.jsp页面中运用超链接的方式进行参数的传递,若当前页面不为第一页时,可显示上一页,当前页面不为最后一页时,显示下一页,页码值通过调用ZDZDataBO.java中的方法计算出页码总数,并通过for循环来输出显示。
(2)ZDZServlet.java中分页技术。ZDZServlet. java通过调用ZDZDataBO.java中的方法来进行分页查询,并将结果传递至right.jsp页面进行显示。
4.4要素图形显示
将查询到的数据,通过插件提供的方法转换为图形,并显示输出。图形显示应用了“ChartDirector”插件,需在编写程序前导入ChartDirector.jar包与该插件提供的getchart.jsp文件,并配置web.xml文件。
以温度变化曲线图为例,运用tempmap.jsp、ZDZServlet.java、ZDZDataBO.java来实现。tempmap.jsp主要进行数据处理和图像显示,ZDZServlet.java、 ZDZDataBO.java主要用于数据查询和结果传递。
tempmap.jsp图形显示技术的实现方法:
<%//1.将查询到的数据进行处理
ArrayList al = (ArrayList) request.getAttribute("infos");
double temp=0;
double[] data0= new double[al.size()];
String timex;
String[] labels=new String[al.size()];
for(int j=0;j ZDZDataBean zb=(ZDZDataBean)al.get郑驰,唐萱,刘元珺. 观测资料实时备份的实现[J].陕西气象,2016(2):41-42. (j); temp=zb.getDRYBULTEMP(); timex=zb.getOBSERVTIMES().substring(6,10); //2.将处理后的数据写入到插件提供的数组中 data0[j] = Math.round(temp)/10.0; labels[j]= timex; }%> //3.显示图形 usemap="#map1" border="0"> 5结语 该系统经在业务中试用,运行正常、稳定,能基本满足基层台站业务人员对温度、降水等常规气象资料的日常访问要求,提高了自动站数据应用能力。随着业务的进一步发展和服务需要的进一步提升,将对系统内容和功能做更深入地完善。 参考文献: [1]武延军,黄飞跃.精通JSP编程技术[M].北京:人民邮电出版社,2001. [2]陈海山.深入Java Servlet网络编程[M].北京:清华大学出版社,2002. [3]Phil Hanna.JSP技术大全[M].北京:机械工业出版社, 2002. [4]Karl Moss.Java Servlet开发人员指南[M].北京:清华大学出版社,2002. 中图分类号:TP311.52 文献标识码:B 基金项目:陕西省气象局科技成果应用与推广项目(多普勒雷达PUPC运行监控系统推广(2014T-8)) 作者简介:樊洁馨(1990—),女,汉族,陕西汉中人,助工,学士,主要从事县级综合业务。 收稿日期:2015-10-13 文章编号:1006-4354(2016)02-0038-04