JSP从WebService取天气预报数据。
网上也有相关的代码,不过比较繁琐,我改进了一下。很简单地实现了。
package com.xxx.web;
import java.io.*; import java.net.*;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList;
public class Weather { private static String _url = "http://www.wopos.com/webservice/Weather.asmx/getWeather?mCity=";
private Weather() { }
/** * @param cityName * @return */ private static InputStream getSoapInputStream(String cityName) { try { /* * URL url = new URL(_url + cityName); HttpURLConnection hc = * (HttpURLConnection) url.openConnection(); hc.connect(); * InputStream urlStream = hc.getInputStream(); return urlStream; */ return new URL(_url + cityName).openStream(); } catch (Exception ex) { return null; }
} /** * 用W3C DOM对返回的XML进行解释 * @param cityName * @return */ public static String getWeatherByCityName(String cityName) { try { Document doc; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder db = dbf.newDocumentBuilder(); InputStream is = getSoapInputStream(cityName); if (is == null){ return null; } doc = db.parse(is); NodeList nl = doc.getElementsByTagName("string"); Node n = nl.item(0); String weather = n.getFirstChild().getNodeValue(); is.close(); return weather; } catch (Exception e) { e.printStackTrace(); return null; } }
/** * @param args */ public static void main(String[] args) { System.out.print(getWeatherByCityName("北京")); } }
得到一个String对象,剩下的就很好处理了。
最终实现效果: