日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

java 實現天氣預報功能

系統 2773 0

題外話:
本程序利用網絡上發布的公共webservice endpoint

www.webxml.com.cn/WebServices/WeatherWebService.asmx


大致步驟是
1? 利用soap向webservice endpoint進行請求,取回請求結果
2? 把結果顯示在web界面上,web界面采用 Java +Jsp(呵呵,有點丑陋,篇幅所迫)
好,廢話少說,直接進入核心程序講解。

一? WeatherReport類??
??? 方法 1? 構造soap請求(請求格式請見上面的鏈接),用用戶輸入的城市名稱鑲在此請求里面

java 代碼
  1. /** ?
  2. ?????*?獲取SOAP的請求頭,并替換其中的標志符號為用戶輸入的城市 ?
  3. ?????*? ?
  4. ?????*?編寫者:王景輝 ?
  5. ?????*? ?
  6. ?????*?@param?city ?
  7. ?????*????????????用戶輸入的城市名稱 ?
  8. ?????*?@return?客戶將要發送給服務器的SOAP請求 ?
  9. ?????*/ ??
  10. ???? private ? static ?String?getSoapRequest(String?city)?{ ??
  11. ????????StringBuilder?sb?=? new ?StringBuilder(); ??
  12. ????????sb ??
  13. ????????????????.append( "<?xml?version=\"1.0\"?encoding=\"utf-8\"?>" ??
  14. ????????????????????????+? "<soap:Envelope?xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"?" ??
  15. ????????????????????????+? "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"?" ??
  16. ????????????????????????+? "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" ??
  17. ????????????????????????+? "<soap:Body>????<getWeatherbyCityName?xmlns=\"http://WebXml.com.cn/\">" ??
  18. ????????????????????????+? "<theCityName>" ?+?city ??
  19. ????????????????????????+? "</theCityName>????</getWeatherbyCityName>" ??
  20. ????????????????????????+? "</soap:Body></soap:Envelope>" ); ??
  21. ???????? return ?sb.toString(); ??
  22. ????}??

?

方法 2? 向endpoint發送上述SOAP請求,并設置一些請求屬性,返回一個服務器端的InputStream(XML文檔流)

java 代碼
  1. /** ?
  2. ?????*?用戶把SOAP請求發送給服務器端,并返回服務器點返回的輸入流 ?
  3. ?????*? ?
  4. ?????*?編寫者:王景輝 ?
  5. ?????*? ?
  6. ?????*?@param?city ?
  7. ?????*????????????用戶輸入的城市名稱 ?
  8. ?????*?@return?服務器端返回的輸入流,供客戶端讀取 ?
  9. ?????*?@throws?Exception ?
  10. ?????*/ ??
  11. ???? private ? static ?InputStream?getSoapInputStream(String?city)? throws ?Exception?{ ??
  12. ???????? try ?{ ??
  13. ????????????String?soap?=?getSoapRequest(city); ??
  14. ???????????? if ?(soap?==? null )?{ ??
  15. ???????????????? return ? null ; ??
  16. ????????????} ??
  17. ????????????URL?url?=? new ?URL( ??
  18. ???????????????????? "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx" ); ??
  19. ????????????URLConnection?conn?=?url.openConnection(); ??
  20. ????????????conn.setUseCaches( false ); ??
  21. ????????????conn.setDoInput( true ); ??
  22. ????????????conn.setDoOutput( true ); ??
  23. ??
  24. ????????????conn.setRequestProperty( "Content-Length" ,?Integer.toString(soap ??
  25. ????????????????????.length())); ??
  26. ????????????conn.setRequestProperty( "Content-Type" ,? "text/xml;?charset=utf-8" ); ??
  27. ????????????conn.setRequestProperty( "SOAPAction" , ??
  28. ???????????????????? "http://WebXml.com.cn/getWeatherbyCityName" ); ??
  29. ??
  30. ????????????OutputStream?os?=?conn.getOutputStream(); ??
  31. ????????????OutputStreamWriter?osw?=? new ?OutputStreamWriter(os,? "utf-8" ); ??
  32. ????????????osw.write(soap); ??
  33. ????????????osw.flush(); ??
  34. ????????????osw.close(); ??
  35. ??
  36. ????????????InputStream?is?=?conn.getInputStream(); ??
  37. ???????????? return ?is; ??
  38. ????????}? catch ?(Exception?e)?{ ??
  39. ????????????e.printStackTrace(); ??
  40. ???????????? return ? null ; ??
  41. ????????} ??
  42. ????}??

?

方法 3? 解析方法2返回的XML文檔流,并用特定的符號分隔,以便我們在Jsp頁面進行結果分析

java 代碼
  1. /** ?
  2. ?????*?對服務器端返回的XML進行解析 ?
  3. ?????*? ?
  4. ?????*?編寫者:王景輝 ?
  5. ?????*? ?
  6. ?????*?@param?city ?
  7. ?????*????????????用戶輸入的城市名稱 ?
  8. ?????*?@return?字符串?用,分割 ?
  9. ?????*/ ??
  10. ???? public ? static ?String?getWeather(String?city)?{ ??
  11. ???????? try ?{ ??
  12. ????????????Document?doc; ??
  13. ????????????DocumentBuilderFactory?dbf?=?DocumentBuilderFactory.newInstance(); ??
  14. ????????????dbf.setNamespaceAware( true ); ??
  15. ????????????DocumentBuilder?db?=?dbf.newDocumentBuilder(); ??
  16. ????????????InputStream?is?=?getSoapInputStream(city); ??
  17. ????????????doc?=?db.parse(is); ??
  18. ????????????NodeList?nl?=?doc.getElementsByTagName( "string" ); ??
  19. ????????????StringBuffer?sb?=? new ?StringBuffer(); ??
  20. ???????????? for ?( int ?count?=? 0 ;?count?<?nl.getLength();?count++)?{ ??
  21. ????????????????Node?n?=?nl.item(count); ??
  22. ???????????????? if (n.getFirstChild().getNodeValue().equals( "查詢結果為空!" ))?{ ??
  23. ????????????????????sb?=? new ?StringBuffer( "#" )?; ??
  24. ???????????????????? break ?; ??
  25. ????????????????} ??
  26. ????????????????sb.append(n.getFirstChild().getNodeValue()?+? "#\n" ); ??
  27. ????????????} ??
  28. ????????????is.close(); ??
  29. ???????????? return ?sb.toString(); ??
  30. ????????}? catch ?(Exception?e)?{ ??
  31. ????????????e.printStackTrace(); ??
  32. ???????????? return ? null ; ??
  33. ????????} ??
  34. ????}??

?

二?? weatherInfo.jsp頁面

?????? 核心功能是解析 方法3 所返回的字符串,向endpoint進行請求時,一個XML文檔片段是

xml 代碼
  1. <? xml ? version = "1.0" ? encoding = "utf-8" ? ?> ? ??
  2. < ArrayOfString ? xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" ? xmlns:xsd = "http://www.w3.org/2001/XMLSchema" ? xmlns = "http://WebXml.com.cn/" > ??
  3. < string > 湖南 </ string > ? ??
  4. < string > 長沙 </ string > ? ??
  5. < string > 57687 </ string > ? ??
  6. < string > 57687.jpg </ string > ? ??
  7. < string > 2007-12-26?14:35:26 </ string > ? ??
  8. < string > 7℃?/?6℃ </ string > ? ??
  9. < string > 12月26日?小雨 </ string > ? ??
  10. < string > 西北風 < =3級 </ string > ? ??
  11. < string > 7.gif </ string > ? ??
  12. < string > 7.gif </ string > ? ??
  13. < string > 今日天氣實況:多云;7.4℃;風向/風力:西北風2級;空氣質量:較差;紫外線強度:最弱 </ string > ? ??
  14. < string > 穿衣指數:感冒指數:溫度較低,較易發生感冒,請適當增加衣服。體質較弱的朋友尤其應該注意防護。晨練指數:早晨天氣陰沉,氣溫極低,請盡量避免戶外晨練,若堅持戶外晨練請注意保暖防凍。交通指數:中暑指數:溫度不高,其他各項氣象條件適宜,中暑機率極低。公園指數:天氣不好,不適宜放風箏。防曬指數:屬弱紫外輻射天氣,長期在戶外,建議涂擦SPF在8-12之間的防曬護膚品。旅行指數:陰天,缺少陽光的陪伴,加上過低的溫度會給出行帶來些不便,旅游指數一般,請您在旅游時注意增加衣物。 </ string > ? ??
  15. < string > 8℃?/?5℃ </ string > ? ??
  16. < string > 12月27日?小雨 </ string > ? ??
  17. < string > 西北風 < =3級 </ string > ? ??
  18. < string > 7.gif </ string > ? ??
  19. < string > 7.gif </ string > ? ??
  20. < string > 10℃?/?4℃ </ string > ? ??
  21. < string > 12月28日?小雨 </ string > ? ??
  22. < string > 西北風 < =3級 </ string > ? ??
  23. < string > 7.gif </ string > ? ??
  24. < string > 7.gif </ string > ? ??
  25. < string > 長沙市位于湖南省東部偏北,湘江下游和長瀏盆地西緣。其地域范圍為東經111°53′-114°15′,北緯27°51′-28°41′。東鄰江西省宜春地區和萍鄉市,南接株洲、湘潭兩市,西連婁底、益陽兩市,北抵岳陽、益陽兩市。東西長約230公里,南北寬約88公里。全市土地面積11819.5平方公里,其中城區面積556平方公里。長沙是一座有2000余年悠久文化歷史的古城,早在春秋時期,就是楚國雄踞南方的戰略要地之一。漢朝的劉邦立國之后,于公元前206年改臨江為長沙,并設立漢朝的屬國----長沙國,自此之后,長沙開始筑建城墻,并逐漸成為兵家必爭之地。長沙屬亞熱帶季風性濕潤氣候。氣候特征是:氣候溫和,降水充沛,雨熱同期,四季分明。長沙市區年平均氣溫17.2℃,各縣16.8℃-17.3℃,年積溫為5457℃,市區年均降水量1361.6毫米。景觀:岳麓山、桔子洲、天心閣、烈士公園、月亮島等。 </ string > ? ??
  26. </ ArrayOfString > ??

在Jsp中解析的代碼如下,基本上是對字符串的操作,截取及截取長度的控制

java 代碼
  1. //穿衣指數 ??
  2. ??????????s1?=?str.substring(str.indexOf( "穿衣指數:" ),str.indexOf( "穿衣指數:" )+ 4 )?; ??
  3. ??????????s1Content?=?str.substring(str.indexOf( "穿衣指數:" )+ 5 ,str.indexOf( "感冒指數:" ))?; ??
  4. ?????????? //感冒指數 ??
  5. ??????????s2?=?str.substring(str.indexOf( "感冒指數:" ),str.indexOf( "感冒指數:" )+ 4 )?; ??
  6. ??????????s2Content?=?str.substring(str.indexOf( "感冒指數:" )+ 5 ,str.indexOf( "晨練指數:" ))?; ??
  7. ?????????? ??
  8. ?????????? //晨練指數 ??
  9. ??????????s3?=?str.substring(str.indexOf( "晨練指數:" ),str.indexOf( "晨練指數:" )+ 4 )?; ??
  10. ??????????s3Content?=?str.substring(str.indexOf( "晨練指數:" )+ 5 ,str.indexOf( "交通指數:" ))?; ??
  11. ?????????? //交通指數 ??
  12. ??????????s7?=?str.substring(str.indexOf( "交通指數:" ),str.indexOf( "交通指數:" )+ 4 )?; ??
  13. ??????????s7Content?=?str.substring(str.indexOf( "交通指數:" )+ 5 ,str.indexOf( "中暑指數:" ))?; ??
  14. ?????????? //中暑指數 ??
  15. ??????????s4?=?str.substring(str.indexOf( "中暑指數:" ),str.indexOf( "中暑指數:" )+ 4 )?; ??
  16. ??????????s4Content?=?str.substring(str.indexOf( "中暑指數:" )+ 5 ,str.indexOf( "防曬指數:" ))?; ??
  17. ?????????? //防曬指數 ??
  18. ??????????s5?=?str.substring(str.indexOf( "防曬指數:" ),str.indexOf( "防曬指數:" )+ 4 )?; ??
  19. ??????????s5Content?=?str.substring(str.indexOf( "防曬指數:" )+ 5 ,str.indexOf( "旅行指數:" ))?; ??
  20. ?????????? //旅行指數 ??
  21. ??????????s6?=?str.substring(str.indexOf( "旅行指數:" ),str.indexOf( "旅行指數:" )+ 4 )?; ??
  22. ??????????s6Content?=?str.substring(str.indexOf( "旅行指數:" )+ 5 )?;??

程序運行效果見附件上的截圖!!!運行附件: http://localhost:8080/yourProject/tianqi.jsp

好了,基本上核心代碼就是上邊那些了!不僅如此,加入我們想要在自己的系統里加入飛機票,火車票,股票信息等等之類的功能,只要有相應的webservice,我們都可以實現(呵呵,好像免費的少哦),各位有什么疑問,留言吧!!!

  • D9e075b4-57ec-47c4-be33-de8914f5e307-thumb
  • 描述: 天氣預報效果圖
  • 大小: 1.6 MB

java 實現天氣預報功能


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 寻乌县| 东台市| 额尔古纳市| 长丰县| 宁海县| 黄大仙区| 观塘区| 临漳县| 岗巴县| 两当县| 嘉黎县| 芒康县| 阜南县| 孝义市| 改则县| 江陵县| 扬中市| 易门县| 辽阳市| 四川省| 乌审旗| 荔浦县| 西宁市| 天长市| 荆州市| 新乐市| 营口市| 芦溪县| 玉环县| 东平县| 京山县| 四川省| 招远市| 团风县| 桦川县| 乌拉特中旗| 祁门县| 英吉沙县| 壤塘县| 云梦县| 陵水|