`
longgangbai
  • 浏览: 7332529 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java 实现天气预报功能

阅读更多

题外话:
本程序利用网络上发布的公共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实现天气预报

    3. **Java实现天气预报**:在实现天气预报系统时,我们可能需要从提供天气数据的服务器获取XML文件,如OpenWeatherMap等。使用DOM4J,我们可以轻松地解析这些XML文件,提取出城市的温度、湿度、风速等信息。以下是一...

    java天气预报

    以上就是基于Java实现天气预报功能所需的关键知识点。每个环节都需要深入理解和实践,才能构建出一个稳定、高效的天气预报应用。在实际开发过程中,还要不断学习和适应新的技术和最佳实践,以提升应用程序的质量和...

    JAVA用WebService实现调用天气预报功能

    本项目名为"JAVA用WebService实现调用天气预报功能",其核心是利用Java技术对接中央气象台的Web服务接口,获取并显示实时天气信息。 首先,理解Java中的WebService调用原理至关重要。SOAP是用于在Web上交换结构化和...

    java基于高德地图实现实时查询天气功能源代码.zip

    java基于高德地图实现实时查询天气功能源代码。基于高德地图实现实时查询天气功能,api二次开发java基于高德地图实现实时查询天气功能源代码。基于高德地图实现实时查询天气功能,api二次开发java基于高德地图实现...

    简易版天气预报java实现

    在本项目"简易版天气预报java实现"中,我们探讨了一个使用Java编程语言构建的天气预报系统。这个系统能够提供实时天气信息,并且能够展示未来七天的天气预报。通过这个项目,我们可以学习到如何利用网络API获取数据...

    获取天气预报API,免费接口,项目下载可运行,Java实现

    标题中的“获取天气预报API,免费接口,项目下载可运行,Java实现”表明这是一个关于使用Java语言开发的天气预报API项目,它提供了免费的API接口,并且已经打包为可直接运行的形式。这样的项目通常对开发者来说是很...

    Java 天气预报 & 万年历(带农历)

    天气预报功能通常依赖于第三方的WebService接口,比如OpenWeatherMap、AccuWeather等,这些服务提供实时的天气数据。开发者通过发送HTTP请求到指定的API地址,并附带必要的参数(如城市名或经纬度),来获取天气信息...

    天气预报系统(java)

    标题“天气预报系统(Java)”揭示了这是一个使用Java编程语言开发的应用程序,其主要功能是提供实时的天气查询服务。这个系统允许用户输入他们感兴趣的城市名,然后系统会返回该城市的当前天气信息。这样的应用在...

    用JAVA实现的天气预报

    在实现天气预报的功能时,开发者可能会创建一个Weather类,包含城市名、日期、温度、湿度等属性,并提供相应的getter和setter方法。这些对象可以存储在ArrayList或其他集合结构中,以便进一步处理和展示。 用户界面...

    java调用weather接口实现天气预报

    用java代码调用weather的webservice,实现天气预报功能

    java天气预报源程序接口

    这可能涉及到Java的模板设计模式,通过模板类和具体实现类来实现天气信息的多样化展示。开发者可以根据需要创建不同的显示策略,比如创建一个适用于移动应用的简洁样式,或者一个适合桌面应用的详细样式。 最后,...

    webservice 实现天气预报功能

    在本例中,我们关注的是使用Web Service实现天气预报功能,这涉及到SOAP(Simple Object Access Protocol)协议的运用。 SOAP是用于交换结构化信息的协议,它基于XML(Extensible Markup Language)格式,使得数据...

    Android Studio实现天气预报小程序

    在Android Studio中实现一个天气预报小程序,涉及到许多关键的Android开发技术。...以上是实现天气预报小程序的主要步骤和技术点,实际开发过程中还需要考虑性能优化、异常处理、用户反馈等功能,持续迭代改进。

    Android实现天气预报功能

    在Android平台上实现天气预报功能是一项常见的任务,尤其对于开发本地生活服务类应用的开发者来说更是必不可少。本教程将深入探讨如何利用Android技术结合百度地图API来实现这一功能。首先,我们要理解Android应用的...

    使用JAVA实现的天气预报代码

    在本文中,我们将深入探讨如何使用Java编程语言来实现天气预报功能。首先,我们要理解天气预报系统的基本原理,然后分析给定的源代码,并探讨其关键组成部分。 天气预报是通过收集大量的气象数据,如气温、湿度、...

    Spring Boot项目:使用第三方天气API接口实现天气预报功能 weather.zip

    Spring Boot项目:使用第三方天气API接口实现天气预报功能;使用redis缓存数据库进行数据缓存 接口示例:http://t.weather.sojson.com/api/weather/city/101010100

    基于小程序实现天气预报微信小程序设计与实现带JAVA后台源码分享

    实现天气预报小程序,开发工具导入项目即可查看源码分享 ## 小程序设计过程 小程序是一个易上手的东西, 对于新手来说,多看官方文档,可以初步做出比较完整的小程序,正是因为简单上手,功能实现简单,小程序是...

    天气预报数据获取java代码(风和天气、高德地图)

    本主题将详细介绍如何使用Java语言来获取天气预报数据,特别是通过"风和天气"以及"高德地图"这两个服务提供商。本文将深入探讨相关技术细节和步骤,以便开发者可以有效地集成到自己的项目中。 首先,我们要了解“风...

    基于java swing的天气预报查询软件.zip

    这个“基于java swing的天气预报查询软件”是一个利用Java Swing库开发的应用程序,旨在帮助用户查询不同地区的天气预报信息。下面将详细介绍Java Swing的相关知识点以及可能在这款软件中涉及的技术。 1. **Java ...

    webservice 网页实现天气预报

    - 要实现天气预报功能,通常需要接入第三方气象API,如OpenWeatherMap、AccuWeather、WorldWeatherOnline等。 - 这些API提供了城市、邮政编码、经纬度等查询方式,返回的天气信息包括温度、湿度、风速、天气状况、...

Global site tag (gtag.js) - Google Analytics