- 浏览: 676826 次
- 性别:
- 来自: 安徽
文章分类
- 全部博客 (252)
- Html/Div+CSS (12)
- Js/Jquery (34)
- Flex (2)
- Ajax (3)
- Java (35)
- C# (15)
- Spring (16)
- Hibernate (13)
- Struts2 (12)
- Struts1 (7)
- DWR (1)
- iBatis/myBatis (9)
- Tag(JSTL、EL) (1)
- Android (44)
- SQL (7)
- SEO (7)
- Exception (3)
- Tool (10)
- Other (3)
- WebService (9)
- Apache (7)
- Ext (0)
- Utils (12)
- thinking in programme (2)
- Hadoop (0)
- ActiveMQ (0)
- HTML5/CSS3 (0)
- WPF (1)
- NodeJs (1)
- 设计模式 (0)
- 程序人生 (1)
- 随笔 (1)
- Linux (1)
- Load Balance (0)
最新评论
-
drinkjava2:
太复杂了而且不通用,利用ThreadLocal可完美解决这一问 ...
JDBC的多条件动态查询 -
u013107014:
multipartRequest.getFiles(" ...
多文件上传 by MultipartFile and Multiple -
liyys:
可惜没讲你mysql数据库的表的设计
iBatis入门 -
Mapple_leave:
效果还是挺不错的,谢谢了。
中文简体与繁体的转换 -
arcpad:
JS禁用浏览器退格键
随着项目的进行,总感觉以前写的东西不是很如意,或者说没有说到点子上去,比如说上次在“怎么在网站中插入天气预报,qq,发送邮件 ”,只是简单笼统的说了一下,并没有结合项目情况,现在假定项目中需要获取天气预报的信息而界面展示由程序员自己来设设计,ok,这里我们还是使用中国天气 这里提供的插件。
下面我们在浏览器中输入:http://m.weather.com.cn/data/101221001.html,来查看显示的信息:
{"weatherinfo":{"city":"黄山","city_en":"huangshan","date_y":"2012年11月26日","date":"","week":"星期一","fchh":"11","cityid":"101221001","temp1":"11℃~2℃","temp2":"13℃~7℃","temp3":"13℃~9℃","temp4":"10℃~8℃","temp5":"13℃~8℃","temp6":"11℃~8℃","tempF1":"51.8℉~35.6℉","tempF2":"55.4℉~44.6℉","tempF3":"55.4℉~48.2℉","tempF4":"50℉~46.4℉","tempF5":"55.4℉~46.4℉","tempF6":"51.8℉~46.4℉","weather1":"多云转晴","weather2":"阴转小雨","weather3":"小雨","weather4":"阴","weather5":"小雨","weather6":"中雨转小雨","img1":"1","img2":"0","img3":"2","img4":"7","img5":"7","img6":"99","img7":"2","img8":"99","img9":"7","img10":"99","img11":"8","img12":"7","img_single":"1","img_title1":"多云","img_title2":"晴","img_title3":"阴","img_title4":"小雨","img_title5":"小雨","img_title6":"小雨","img_title7":"阴","img_title8":"阴","img_title9":"小雨","img_title10":"小雨","img_title11":"中雨","img_title12":"小雨","img_title_single":"多云","wind1":"西北风转东风小于3级","wind2":"东南风小于3级","wind3":"东北风小于3级","wind4":"微风","wind5":"微风","wind6":"微风","fx1":"西北风","fx2":"东风","fl1":"小于3级","fl2":"小于3级","fl3":"小于3级","fl4":"小于3级","fl5":"小于3级","fl6":"小于3级","index":"凉","index_d":"天气凉,建议着厚外套加毛衣等春秋服装。年老体弱者宜着大衣、呢外套加羊毛衫。","index48":"温凉","index48_d":"建议着夹衣或西服套装加薄羊毛衫等春秋服装。年老体弱者宜着夹衣或风衣加羊毛衫。","index_uv":"弱","index48_uv":"最弱","index_xc":"不宜","index_tr":"适宜","index_co":"较舒适","st1":"11","st2":"0","st3":"14","st4":"8","st5":"13","st6":"10","index_cl":"较适宜","index_ls":"基本适宜","index_ag":"极不易发"}}
这里我们可以发现,返回的是一个JSON的字符串,那么我们可以通过定义实体类,通过GSON or json lib 来将JSON字符串转实体,然后将实体传到前台显示。
ok,下面我们再来理一下整体思路:
1、上面http://m.weather.com.cn/data/101221001.html,这个地址因不同的城市而编码不同,所以我们需要根据提供的xml,通过name查找对应的编码,然后设置路径(这里需要涉及XML的解析)
2、封装实体,将JSON转为对象
3、将对象传到前台通过我们自己定义的样式展示出来,废话说完了,上代码
一、根据不同城市获取不同的编码
City.java
package com.iflytek.demo; /** * @author xdwang * * @create 2012-11-26 下午1:30:17 * * @email:xdwangiflytek@gmail.com * * @description 城市实体类 * */ public class City { /** * 城市名称 */ private String name; /** * 城市对应的编码 */ private String code; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } }
CitySaxHelper.java
package com.iflytek.demo; import java.util.ArrayList; import java.util.List; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /** * @author xdwang * * @create 2012-11-26 下午1:33:37 * * @email:xdwangiflytek@gmail.com * * @description XMLTO City by sax * */ public class CitySaxHelper extends DefaultHandler { private List<City> cities = null; // 保存多条数据 private City city = null; @Override public void characters(char[] ch, int start, int length) throws SAXException { } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if ("city".equals(qName)) { this.cities.add(this.city); this.city = null; // 准备保存下次的数据 } } @Override public void startDocument() throws SAXException { this.cities = new ArrayList<City>(); // 表示开始解析文档,所以要设置集合 } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if ("city".equals(qName)) { // 是一个city节点 this.city = new City(); // 实例化city对象 } for (int i = 0; i < attributes.getLength(); i++) { if (attributes.getLocalName(i) != null && attributes.getLocalName(i) != "" && attributes.getValue(i) != null && attributes.getValue(i) != "") { if ("name".equals(attributes.getLocalName(i))) { this.city.setName(attributes.getValue(i)); } if ("code".equals(attributes.getLocalName(i))) { this.city.setCode(attributes.getValue(i)); } } } } public List<City> getAll() { return cities; } /** * @descrption 根据城市获取城市的编码 注意这里的黄山没有,只有黄山区、黄山站,其他可能还会存在相同情况,这里就不特殊处理了 * @author xdwang * @create 2012-11-26下午2:54:36 * @param CityName * @return */ public String getCodeByCityName(String CityName) { CityName = CityName.trim(); if (CityName == null || CityName == "") { return null; } for (City city : cities) { if (city.getName().equals(CityName)) { return city.getCode(); } } return null; } }
WeatherInfo.java
package org.elongcom.common; /** * @author xdwang * * @create 2012-11-25 下午2:32:01 * * @email:xdwangiflytek@gmail.com * * @description 天气实体类 * */ public class WeatherInfo { /** * 当天温度 */ private String temp1; /** * 第二天温度 */ private String temp2; /** * 当天天气,多云 */ private String weather1; /** * 第二天天气,多云 */ private String weather2; /** * 当天的天气图片 */ private String img1; /** * 第二天的天气图片 */ private String img2; /** * 当天的风向 */ private String wind1; /** * 第二天的风向 */ private String wind2; public String getTemp1() { return temp1; } public void setTemp1(String temp1) { this.temp1 = temp1; } public String getTemp2() { return temp2; } public void setTemp2(String temp2) { this.temp2 = temp2; } public String getWeather1() { return weather1; } public void setWeather1(String weather1) { this.weather1 = weather1; } public String getWeather2() { return weather2; } public void setWeather2(String weather2) { this.weather2 = weather2; } public String getImg1() { return img1; } public void setImg1(String img1) { this.img1 = img1; } public String getImg2() { return img2; } public void setImg2(String img2) { this.img2 = img2; } public String getWind1() { return wind1; } public void setWind1(String wind1) { this.wind1 = wind1; } public String getWind2() { return wind2; } public void setWind2(String wind2) { this.wind2 = wind2; } }
通过网页上展示的JSON字符串可以发现这里需要两个对象,WeatherInfoTemp.java
package org.elongcom.common; /** * @author xdwang * * @create 2012-11-25 下午3:06:41 * * @email:xdwangiflytek@gmail.com * * @description * */ public class WeatherInfoTemp { private WeatherInfo weatherinfo; public WeatherInfo getWeatherinfo() { return weatherinfo; } public void setWeatherinfo(WeatherInfo weatherinfo) { this.weatherinfo = weatherinfo; } }
读取网页内容,WeatherHelper.java
package org.elongcom.common; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; /** * @author xdwang * * @create 2012-11-25 下午2:51:23 * * @email:xdwangiflytek@gmail.com * * @description 天气帮助类 * */ public class WeatherHelper { public static String getWeatherInfoStr(String urlPath) { if (urlPath == null || urlPath == "") { return ""; } StringBuffer sb = new StringBuffer(); try { URL url = new URL(urlPath); HttpURLConnection hConnect = (HttpURLConnection) url.openConnection(); BufferedReader rd = new BufferedReader(new InputStreamReader(hConnect.getInputStream(),"UTF-8"));//这里需要指定编码格式,否则可能会出现乱码 int ch; for (int length = 0; (ch = rd.read()) > -1; length++) sb.append((char) ch); rd.close(); hConnect.disconnect(); } catch (Exception e) { } return sb.toString(); } }
Controller
SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = null; CitySaxHelper citySaxHelper = new CitySaxHelper(); saxParser = factory.newSAXParser(); File file = new File("D:" + File.separator + "WeatherCity.Xml"); saxParser.parse(file, citySaxHelper); String code = citySaxHelper.getCodeByCityName("黄山区"); String weatherInfoStr = WeatherHelper.getWeatherInfoStr("http://m.weather.com.cn/data/"+code+".html"); Gson gson = new Gson(); WeatherInfoTemp temp = gson.fromJson(weatherInfoStr, WeatherInfoTemp.class); WeatherInfo weatherInfo = temp.getWeatherinfo(); model.addAttribute("weather", weatherInfo);
- weather.rar (74.4 KB)
- 下载次数: 21
发表评论
-
统一中英文长度问题
2012-07-20 00:17 1938最近因为在做一个项目要求很多都是英文,所以这就涉及到在页 ... -
FireFox默认隐藏无效图片(broken image),而不是像IE中那般,显示一个红X
2012-07-11 00:07 1277直接上代码: <style type="te ... -
IE6,IE7下设置body{overflow:hidden;}失效Bug
2012-04-02 22:46 2694最近做项目发现在IE7下设置body{overflow:h ... -
【转】一些比较高效的CSS写法建议
2012-02-07 22:21 1137当浏览器解析html的时候,它构造了一个文档树来展现所有被显示 ... -
怎么在网站中插入天气预报,qq,发送邮件
2012-01-31 23:06 2720晚上看博客看到一个关于在网站中插入天气预报的,所以在这里收藏一 ... -
Java农历(阴历)工具类
2012-01-20 11:30 2361在真实的项目开发中会可能会遇到项目需要对阴历即我们所说的农历节 ... -
联系人导出(msn、邮箱)
2012-01-16 11:48 8351在项目开发中,不知道大家有没有涉及到导出邮箱或msn的联系人( ... -
Json lib
2012-01-15 10:04 2121Json_lib可以方便的将Java对象转成json格式 ... -
中文简体与繁体的转换
2012-01-15 10:07 7223虽然说中文繁体与简体的转换在项目中使用到的概念很小,但是这也 ... -
根据ip获得城市,根据手机号获得归属地,根据身份证号获得
2012-01-24 09:21 1793今天找到有道的一个api工具,根据ip获得城市,根据手机号获得 ... -
css设置未知尺寸图片的水平和垂直居中
2012-01-14 08:42 1794<!DOCTYPE html PUBLIC &qu ... -
Js/Jquery 实现checkbox全选,反选,全不选
2012-01-12 14:04 8344Use by JS: <!DOCTYPE html P ... -
CSS的ime-mode屏蔽中文输入法
2012-01-18 13:24 5337ime是Input Method Editor的简称。 ... -
css使用中文注释引起失效解决方法
2012-01-23 14:11 1557想必大家在设计页面的时候经常会遇到CSS也的没问题,缺不 ... -
表格 各行换色
2012-01-22 15:04 1388<!DOCTYPE html PUBLIC &qu ... -
js实现限时抢购
2012-01-12 10:44 2065<!DOCTYPE html PUBLIC &qu ... -
CSS 文字换行
2012-01-18 13:23 20151、强制不换行: div { ... -
省市联动 js
2012-01-12 08:44 1576在项目开发中我们可能会遇到需要选择省市的下拉框,上次在简明现代 ... -
汉字转拼音(pinyin4j)
2012-01-11 12:12 2178今天看了一篇博客(http://guyexin-126- ... -
设置IE浏览器文档模式版本
2012-01-11 08:53 5364浏览器版本问题是所有开发web的程序员共同的诟病,尤其是IE浏 ...
相关推荐
标题中的“smartweather调用天气预报”指的是使用特定的API(应用程序接口)或者服务来获取并展示天气预报信息。在本例中,"smartweather"可能是一个开发平台或工具,它提供了与天气预报数据交互的功能。这个过程...
这里我们关注的是“调用天气预报Web Service”使用Axis1.4,这是一个较老但仍然广泛使用的Java Web Service框架。下面将详细阐述相关知识点。 1. **Web Service**:Web Service是一种通过HTTP协议进行通信的服务,...
在这个示例中,我们关注的是如何使用WebService调用天气预报服务。 首先,我们需要了解`wsimport`工具。`wsimport`是Java SDK的一部分,用于从WSDL(Web Service Description Language)文件生成Java客户端存根类。...
标题中的“Java通过Axis调用天气预报的WebService”是指使用Java编程语言,通过Apache Axis库来访问和使用公开的天气预报Web服务。Apache Axis是一个开放源码的SOAP(简单对象访问协议)工具包,它允许开发者创建和...
在这个场景中,我们讨论的是如何利用ASP.NET技术调用天气预报接口,实现一个天气查询的功能。以下是对这个主题的详细解释: 一、ASP.NET Web API ASP.NET Web API 是ASP.NET框架的一部分,专门设计用来构建RESTful...
总的来说,通过这个`JAVA调用天气预报WEB服务实例`,你可以学习到如何在Java中创建Web服务客户端,理解SOAP请求和响应的处理过程,以及如何解析和使用返回的数据。这对于开发涉及跨系统通信的项目具有很高的实践价值...
4. **调用天气预报接口**: 使用生成的代理类,我们可以调用Web服务提供的方法,比如获取某个城市的天气预报。假设服务有一个名为`GetWeather`的方法,接受城市名称作为参数并返回天气信息,我们可以这样调用: `...
在本例中,我们将调用一个提供天气预报的WebService接口。 1. **安装NuGet包** 在C#项目中,我们需要使用`System.ServiceModel`库来处理WebService调用。可以通过Visual Studio的NuGet包管理器安装这个库,如果...
总的来说,实现“Qt不规则窗体程序,含调用天气预报和翻译WebService”涉及到了Qt图形界面的自定义、网络请求的处理以及数据解析等多个方面。通过学习和实践,你可以创建出功能丰富、视觉效果独特的应用程序。
5. **调用天气预报Webservice**:天气预报Webservice通常提供特定的URL和方法,如GET或POST请求,以及需要传递的参数,如城市名。在Android中,我们可以通过Ksoap2的 SoapSerializationEnvelope 和 HttpTransportSE ...
VC++2012 调用 天气预报WebService 源代码,获取指定城市的天气信息 使用了GSOAP工具集,参考http://blog.csdn.net/startexcel/article/details/8208135
在这个例程中,我们使用GET方法调用天气预报接口,将请求参数附在URL后面。 3. **JSON格式**:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。天气...
本实例主要关注的是如何调用天气预报相关的Web Services,这是一个常见的跨平台、跨语言的数据交换技术,广泛应用于移动应用、网站以及企业级系统的集成。 首先,我们需要了解Web Services的基本概念。Web Services...
标题中的“webservice调用天气预报”指的是利用Web服务技术来获取和展示不同城市省份的天气预报信息。 在Java开发环境中,IntelliJ IDEA(简称IDEA)是一款广泛使用的集成开发环境,它提供了方便的工具来创建和消费...
VC++调用天气预报Web services方法总结 本文将详细介绍如何使用VC++调用天气预报Web services方法,包括下载和安装gsoap_2.8.14.zip工具,生成头文件和源文件,编译和运行程序等步骤。 一、下载和安装gsoap_2.8.14...
本项目名为"JAVA用WebService实现调用天气预报功能",其核心是利用Java技术对接中央气象台的Web服务接口,获取并显示实时天气信息。 首先,理解Java中的WebService调用原理至关重要。SOAP是用于在Web上交换结构化和...
在这个“WebService调用天气预报小例子”中,我们将探讨如何利用WebService获取并显示实时天气预报信息。 首先,WebService是基于标准的XML(Extensible Markup Language)和SOAP(Simple Object Access Protocol)...
Java调用天气预报WebService是一个常见的任务,特别是在开发集成多种服务的应用程序时。WebService是一种基于XML标准的、平台和语言无关的通信协议,用于在不同系统间交换数据。在这个场景中,我们将探讨如何使用...
标题中的“使用eclipse调用天气预报的测试代码WSDL”揭示了这是一个关于在Eclipse集成开发环境中,通过Web服务描述语言(WSDL)来访问天气预报API的教程。WSDL是一种XML格式,用于定义网络服务,特别是SOAP(简单...