樊潔馨
(寧強(qiáng)縣氣象局,陜西寧強(qiáng) 724400)
?
基于J2EE自動(dòng)站數(shù)據(jù)查詢系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
樊潔馨
(寧強(qiáng)縣氣象局,陜西寧強(qiáng)724400)
摘要:基于J2EE開(kāi)發(fā)技術(shù)和現(xiàn)有數(shù)據(jù)庫(kù)環(huán)境,采用MVC(Model-View-Controller)設(shè)計(jì)模式,開(kāi)發(fā)自動(dòng)站數(shù)據(jù)查詢系統(tǒng),實(shí)現(xiàn)了以網(wǎng)頁(yè)方式為用戶提供漢中市各縣區(qū)溫度、降水量數(shù)據(jù)查詢及圖形顯示等功能。
關(guān)鍵詞:自動(dòng)站數(shù)據(jù); J2EE;自動(dòng)站數(shù)據(jù)查詢
自動(dòng)站數(shù)據(jù)查詢業(yè)務(wù)系統(tǒng)在基層氣象工作中占有重要地位,不僅能及時(shí)有效地為工作人員提供自動(dòng)站觀測(cè)業(yè)務(wù)信息,還可以為開(kāi)展氣象服務(wù)提供高效的數(shù)據(jù)保障。根據(jù)J2EE技術(shù)特點(diǎn),設(shè)計(jì)開(kāi)發(fā)了適合市縣使用的自動(dòng)站數(shù)據(jù)查詢系統(tǒng),該系統(tǒng)操作便捷,數(shù)據(jù)顯示直觀,且易于維護(hù)和功能擴(kuò)展。本文介紹系統(tǒng)的研發(fā)思路及所用到的開(kāi)發(fā)技術(shù),供相關(guān)技術(shù)人員參考。
1開(kāi)發(fā)語(yǔ)言及工具
J2EE(Java 2 Platform,Enterprise Edition)是一個(gè)為大企業(yè)主機(jī)級(jí)的計(jì)算類型而設(shè)計(jì)的Java平臺(tái),它簡(jiǎn)化了應(yīng)用程序的開(kāi)發(fā),具有可伸縮性、靈活性、易維護(hù)等優(yōu)點(diǎn);Eclipse 是一個(gè)開(kāi)放源代碼的基于Java的可擴(kuò)展開(kāi)發(fā)平臺(tái),它為編程開(kāi)發(fā)提供了一個(gè)框架和一組服務(wù),用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境;MyEclipse是一個(gè)用于開(kāi)發(fā)J2EE的插件集合,其功能強(qiáng)大,支持廣泛。
2軟件運(yùn)行環(huán)境
服務(wù)器端軟件環(huán)境為JDK8、Tomcat6.0;數(shù)據(jù)庫(kù)為SQLServer2008;客戶端軟件環(huán)境為IE8.0以上;支持環(huán)境為windowsXP/Windows 7/Windows 8。
3系統(tǒng)主要功能
實(shí)現(xiàn)任意時(shí)段內(nèi)自動(dòng)站小時(shí)平均氣溫、最高(最低)氣溫及出現(xiàn)時(shí)間、降水量等要素記錄查詢;統(tǒng)計(jì)該時(shí)段內(nèi)平均溫度、最高(低)氣溫、總降水量;顯示并輸出該時(shí)段內(nèi)溫度變化曲線圖和降水量柱狀圖。
4具體實(shí)現(xiàn)
4.1主頁(yè)功能
在index.jsp頁(yè)面,主要進(jìn)行查詢時(shí)段、臺(tái)站范圍、查詢要素選擇,運(yùn)用JSP、JavaScript將所選信息提交至ZDZServlet.java頁(yè)面處理。
(1) index.jsp頁(yè)面嵌套技術(shù)
運(yùn)用JSP頁(yè)面嵌套方式,將查詢信息選擇頁(yè)面left.jsp嵌套至主頁(yè)index.jsp頁(yè)面中。index.jsp頁(yè)面不進(jìn)行業(yè)務(wù)邏輯處理,而將處理程序放置于left.jsp頁(yè)面,減少了index.jsp頁(yè)面的代碼量,并提高了代碼的利用率與可移植性。
實(shí)現(xiàn)方式:
(2) left.jsp數(shù)據(jù)提交及時(shí)間插件使用技術(shù)
查詢信息選擇頁(yè)面left.jsp,運(yùn)用HTML語(yǔ)言編寫(xiě),使用“form”表單中“post”方法提交數(shù)據(jù)至ZDZServlet.java,用于下一步數(shù)據(jù)處理。為方便、直觀地選擇所要查詢的時(shí)間范圍,“時(shí)間”選項(xiàng)使用“My97DatePicker”日歷插件來(lái)實(shí)現(xiàn)。將“My97DatePicker”文件導(dǎo)入至工程中,然后使用標(biāo)簽將其引入,并根據(jù)該插件所提供的方法,按需求進(jìn)行調(diào)用。
實(shí)現(xiàn)方式:
4.2數(shù)據(jù)庫(kù)查詢
以查詢?nèi)恳貫槔?,運(yùn)用ConnDB.java、ZDZDataBean.java、ZDZDataBO.java、right.jsp、 ZDZServlet.java來(lái)進(jìn)行數(shù)據(jù)處理。ConnDB.java主要進(jìn)行數(shù)據(jù)庫(kù)鏈接;ZDZDataBean.java主要進(jìn)行對(duì)所需要查詢?cè)豨et、set方法的封裝;ZDZDataBO.java主要進(jìn)行數(shù)據(jù)庫(kù)查詢;ZDZServlet.java主要進(jìn)行數(shù)據(jù)的處理與傳遞;right.jsp主要進(jìn)行查詢結(jié)果的顯示。
(1) ConnDB.java連接數(shù)據(jù)庫(kù)技術(shù)。ConnDB.java用于數(shù)據(jù)庫(kù)的鏈接,在編寫(xiě)該方法前,應(yīng)在本工程中導(dǎo)入與SQL數(shù)據(jù)庫(kù)相關(guān)的sqljdbc4.jar包。
(2)ZDZDataBean.java技術(shù)。ZDZDataBean. java封裝所要調(diào)取元素的get、set方法,使其他類可以調(diào)用(設(shè)置和獲取)該方法。
(3) ZDZDataBO.java數(shù)據(jù)查詢技術(shù)。ZDZDataBO.java用于數(shù)據(jù)庫(kù)查詢,實(shí)現(xiàn)根據(jù)時(shí)間范圍與區(qū)站號(hào)進(jìn)行數(shù)據(jù)記錄數(shù)(即數(shù)據(jù)顯示頁(yè)碼數(shù)量)的統(tǒng)計(jì)、平均溫度、最高(低)溫度、總降水量的統(tǒng)計(jì)和查詢結(jié)果的分頁(yè)顯示。
實(shí)現(xiàn)方式:
①根據(jù)所給出的時(shí)間范圍與區(qū)站號(hào)查詢得到數(shù)據(jù)記錄總條數(shù),按照系統(tǒng)設(shè)置的每頁(yè)顯示記錄條數(shù)計(jì)算出顯示的頁(yè)數(shù)。
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為區(qū)站號(hào),timesta為開(kāi)始時(shí)間值,timeend為結(jié)束時(shí)間值,pageSize為每頁(yè)顯示數(shù)據(jù)條數(shù),rowCount為紀(jì)錄總條數(shù),pageCount為頁(yè)數(shù),tabtimedata 為數(shù)據(jù)庫(kù)名,ObservTimes、StationNum分別為數(shù)據(jù)庫(kù)中觀測(cè)時(shí)間字段名以及區(qū)站號(hào)字段名。
②根據(jù)所給出的時(shí)間范圍與區(qū)站號(hào)查詢出當(dāng)前頁(yè)碼下的全部數(shù)據(jù)。
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為當(dāng)前頁(yè)碼值,且pageNow≥1。
③根據(jù)所給出的時(shí)間范圍與區(qū)站號(hào)分別查詢統(tǒng)計(jì)出該時(shí)間范圍內(nèi)的平均溫度、最高(低)溫度、總降水量。以平均溫度統(tǒng)計(jì)為例,查詢語(yǔ)句如下:
select avg(convert(float,DryBulTemp)) from tabtimedata where ObservTimes between ’"+timesta+"’and ’"+timeend+"’and StationNum=’"+stationnum+"’
其中DryBulTemp為數(shù)據(jù)庫(kù)中溫度字段名。
(4)ZDZServlet.java中要素值查詢、處理技術(shù)。ZDZServlet.java用于網(wǎng)頁(yè)參數(shù)的接收、處理,并將處理過(guò)的數(shù)據(jù)返回到所要顯示的頁(yè)面。
實(shí)現(xiàn)方法:
public class ZDZServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1.接收網(wǎng)頁(yè)傳遞過(guò)來(lái)的數(shù)據(jù)
String stationnum=request.getParameter("stationnum");
String date1=request.getParameter("date1");
String date2=request.getParameter("date2");
//2.調(diào)用ZDZDataBO.java中方法查詢數(shù)據(jù)并處理
ZDZDateBO zbo=new ZDZDateBO();
double temp=zbo.getZDZAVGTEMP(stationnum, time1, time2);
String avgtemp=String.valueOf(temp);
//3.將處理后的數(shù)據(jù)再傳遞回網(wǎng)頁(yè)
request.setAttribute("avgtemp", avgtemp);
request.getRequestDispatcher("right.jsp").forward(request, response);}
}
(5)right.jsp中顯示統(tǒng)計(jì)值技術(shù)。right.jsp將ZDZServlet.java 所傳遞過(guò)來(lái)的值接收并進(jìn)行格式化處理,然后通過(guò)表格的方式顯示出結(jié)果。
實(shí)現(xiàn)方法:
<%float avgtemp=Float.parseFloat((String)request.getAttribute("avgtemp"));
float temp2=(float)(Math.round(avgtemp))/10;%>
4.3要素分頁(yè)顯示
以查詢?nèi)恳貫槔?,運(yùn)用right.jsp、ZDZServlet.java、ZDZDataBO.java來(lái)實(shí)現(xiàn)。right.jsp頁(yè)面主要用于參數(shù)的傳遞與顯示,ZDZServlet.java主要用于參數(shù)的傳遞與處理,ZDZDataBO.java主要進(jìn)行頁(yè)面總數(shù)的查詢計(jì)算以及數(shù)據(jù)的分頁(yè)查詢。
(1) right.jsp中分頁(yè)技術(shù)。right.jsp頁(yè)面中運(yùn)用超鏈接的方式進(jìn)行參數(shù)的傳遞,若當(dāng)前頁(yè)面不為第一頁(yè)時(shí),可顯示上一頁(yè),當(dāng)前頁(yè)面不為最后一頁(yè)時(shí),顯示下一頁(yè),頁(yè)碼值通過(guò)調(diào)用ZDZDataBO.java中的方法計(jì)算出頁(yè)碼總數(shù),并通過(guò)for循環(huán)來(lái)輸出顯示。
(2)ZDZServlet.java中分頁(yè)技術(shù)。ZDZServlet. java通過(guò)調(diào)用ZDZDataBO.java中的方法來(lái)進(jìn)行分頁(yè)查詢,并將結(jié)果傳遞至right.jsp頁(yè)面進(jìn)行顯示。
4.4要素圖形顯示
將查詢到的數(shù)據(jù),通過(guò)插件提供的方法轉(zhuǎn)換為圖形,并顯示輸出。圖形顯示應(yīng)用了“ChartDirector”插件,需在編寫(xiě)程序前導(dǎo)入ChartDirector.jar包與該插件提供的getchart.jsp文件,并配置web.xml文件。
以溫度變化曲線圖為例,運(yùn)用tempmap.jsp、ZDZServlet.java、ZDZDataBO.java來(lái)實(shí)現(xiàn)。tempmap.jsp主要進(jìn)行數(shù)據(jù)處理和圖像顯示,ZDZServlet.java、 ZDZDataBO.java主要用于數(shù)據(jù)查詢和結(jié)果傳遞。
tempmap.jsp圖形顯示技術(shù)的實(shí)現(xiàn)方法:
<%//1.將查詢到的數(shù)據(jù)進(jìn)行處理
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鄭馳,唐萱,劉元珺. 觀測(cè)資料實(shí)時(shí)備份的實(shí)現(xiàn)[J].陜西氣象,2016(2):41-42. (j); temp=zb.getDRYBULTEMP(); timex=zb.getOBSERVTIMES().substring(6,10); //2.將處理后的數(shù)據(jù)寫(xiě)入到插件提供的數(shù)組中 data0[j] = Math.round(temp)/10.0; labels[j]= timex; }%> //3.顯示圖形 usemap="#map1" border="0"> 5結(jié)語(yǔ) 該系統(tǒng)經(jīng)在業(yè)務(wù)中試用,運(yùn)行正常、穩(wěn)定,能基本滿足基層臺(tái)站業(yè)務(wù)人員對(duì)溫度、降水等常規(guī)氣象資料的日常訪問(wèn)要求,提高了自動(dòng)站數(shù)據(jù)應(yīng)用能力。隨著業(yè)務(wù)的進(jìn)一步發(fā)展和服務(wù)需要的進(jìn)一步提升,將對(duì)系統(tǒng)內(nèi)容和功能做更深入地完善。 參考文獻(xiàn): [1]武延軍,黃飛躍.精通JSP編程技術(shù)[M].北京:人民郵電出版社,2001. [2]陳海山.深入Java Servlet網(wǎng)絡(luò)編程[M].北京:清華大學(xué)出版社,2002. [3]Phil Hanna.JSP技術(shù)大全[M].北京:機(jī)械工業(yè)出版社, 2002. [4]Karl Moss.Java Servlet開(kāi)發(fā)人員指南[M].北京:清華大學(xué)出版社,2002. 中圖分類號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:B 基金項(xiàng)目:陜西省氣象局科技成果應(yīng)用與推廣項(xiàng)目(多普勒雷達(dá)PUPC運(yùn)行監(jiān)控系統(tǒng)推廣(2014T-8)) 作者簡(jiǎn)介:樊潔馨(1990—),女,漢族,陜西漢中人,助工,學(xué)士,主要從事縣級(jí)綜合業(yè)務(wù)。 收稿日期:2015-10-13 文章編號(hào):1006-4354(2016)02-0038-04