axis WebServices 完美调用天气预报,查询、显示 代码!
效果:
jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>城市天气信息</title> </head> <style> body{ font-size:12px; } table{ border-collapse:sparate; border-spacing:0px; } td{ padding:0px; border:0px solid #000; text-align:center; font-size:12px; color:#2A5CAA; border-color:#2A5CAA; } .noMess{ text-align: center; text-valign: center; } </style> <body> <form action="webservice.action" method="post" name="form1"> <input type="text" name="city" /> <input type="submit" value="查询" id="sub"/> </form> <br/> <!-- 显示天气 --> <c:if test="${not empty weathers}"> <table border="0" cellpadding="0" cellspacing="0" width="380"> <tr> <td>${weathers._regionFirst} ${weathers._regionSecond} 72小时天气预报</td> <td>最新上报时间:${weathers._reportTime}</td> </tr> <tr> <td colspan="2"> <!-- 今天天气 --> <table border="0" cellpadding="0" cellspacing="0"> <tr><td> ${weathers._todayDetail} </td></tr> <tr> <td>${weathers._todayDate} ${weathers._todayTemperature}</td> </tr> <tr> <td> ${weathers._todayWind}</td> </tr> <tr> <td> <img src="./images/weather/${weathers._todayPic_1}"/> <img src="./images/weather/${weathers._todayPic_2}"> </td> </tr> <tr> <td></td> </tr> </table> </td> </tr> <tr> <td colspan="2"> <!-- 明天天气 --> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>${weathers._tomorrowDate} ${weathers._tomorrowTemperature}</td> </tr> <tr> <td>${weathers._tomorrowWind}</td> </tr> <tr> <td> <img src="./images/weather/${weathers._tomorrowPic_1}"/> <img src="./images/weather/${weathers._tomorrowPic_2}"> </td> </tr> <tr> <td></td> </tr> </table> </td> </tr> <tr> <td colspan="2"> <!-- 后天天气 --> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>${weathers._affterTomorrowDate} ${weathers._affterTomorrowTemperature}</td> </tr> <tr> <td>${weathers._affterTomorrowWind}</td> </tr> <tr> <td> <img src="./images/weather/${weathers._affterTomorrowPic_1}"/> <img src="./images/weather/${weathers._affterTomorrowPic_2}"> </td> </tr> <tr> <td></td> </tr> </table> </td> </tr> </table> </c:if> <!-- 自动加载 ajax 方式 等写 <script type="text/javascript"> window.onload= function(){ //location.href=form1.submit(); document.getElementById("sub").click(); }; </script> --> </body> </html>
struts.xml:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="default" namespace="/" extends="struts-default"> <action name="webservice" class="accp.action.WebservicesAction"> <result name="success"> index.jsp </result> </action> </package> </struts>
package accp.action; import java.util.Hashtable; import accp.util.WeatherUtil; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class WebservicesAction extends ActionSupport { private String city; //存放天气信息 Hashtable<String,Object> weathers=new Hashtable<String,Object>(); public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String execute() throws Exception { System.out.println("-----开始查询-------"); if("".equals(city)||null==city){ city="广州"; } //得到天气信息 weathers=WeatherUtil.getInstancce().getWea(city); ActionContext.getContext().put("weathers", weathers); return "success"; } }
package accp.util; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.Hashtable; 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 WeatherUtil { // 编码 private String enCoding ="utf-8"; // 目标url private String targetWebserviceUri="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"; //private String targetWebserviceUri = "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl"; private WeatherUtil(){}; public static WeatherUtil getInstancce(){ return new WeatherUtil(); } /** * 对服务器端返回的XML进行解析 * WeatherObj 常量 * @param city 用户输入的城市名称 * @return 字符串 用,分割 * @throws Exception */ public Hashtable<String,Object> getWea(String city) throws Exception{ Hashtable<String,Object> weathers=new Hashtable<String,Object>(); Document doc=null; DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); DocumentBuilder db=dbf.newDocumentBuilder(); InputStream is=getResponseSOAP(city);//获取流 doc=db.parse(is); //获取 xml文档 NodeList nl=doc.getElementsByTagName("string");//获取所有节点 //循环读取 并放入hashtable System.out.println("元素Length:"+nl.getLength()); for(int i =0;i<nl.getLength();i++){ Node n = nl.item(i); String nodeValue=n.getFirstChild().getNodeValue(); if(i !=11){ System.out.println(nodeValue); weathers.put(WeatherObj.input.get(i), nodeValue) ; } } return weathers; } /** * 封装xml */ public String getRequestSOAP(String city){ StringBuffer sb = new StringBuffer(); sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); sb.append("<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"); sb.append("<soap:Body>"); sb.append("<getWeatherbyCityName xmlns=\"http://WebXml.com.cn/\">"); sb.append(" <theCityName>"+city+"</theCityName>"); sb.append("</getWeatherbyCityName>"); sb.append("</soap:Body>"); sb.append("</soap:Envelope>"); return sb.toString(); } /** * @throws MalformedURLException * 获得流 */ private InputStream getResponseSOAP(String city) throws Exception{ String requestSOAP=getRequestSOAP(city); // 创建url URL url= new URL(targetWebserviceUri); //得到url 的链接 URLConnection conn = url.openConnection(); conn.setUseCaches(false); conn.setDoInput(true); conn.setDoOutput(true); // 设置请求的头信息 conn.setRequestProperty("Content-Type", "text/xml; charset="+enCoding); conn.setRequestProperty("Content-Length", requestSOAP.length()+""); conn.setRequestProperty("SOAPAction", "http://WebXml.com.cn/getWeatherbyCityName"); OutputStream os = conn.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os, enCoding); osw.write(requestSOAP); osw.flush(); osw.close(); return conn.getInputStream() ; } }
package accp.util; import java.util.Hashtable; /** * @author hxb * */ public class WeatherObj { public static final String REGIONFIRST = "_regionFirst";//上级行政区 public static final String REGIONSECOND = "_regionSecond";//本级行政区 public static final String REGIONID = "_regionId";//行政区id public static final String REGIONPIC = "_regionPic";//行政区图片 public static final String REPORTTIME = "_reportTime";//最新上报时间 public static final String TODAYTEMPERATURE = "_todayTemperature";//今天温度 public static final String TODAYDATE = "_todayDate";//今天日期 public static final String TODAYWIND = "_todayWind";//今天风况 public static final String TODAYPIC_1 = "_todayPic_1";//今天天气图片1 public static final String TODAYPIC_2 = "_todayPic_2";//今天天气图片2 public static final String TODAYDETAIL = "_todayDetail";//今天天气实况 public static final String ZHISHU = "_zhiShu";//各个指数 /*public static final String CHUANYIZHISHU = "穿衣指数:"; public static final String GANMAOZHISHU = "感冒指数:"; public static final String CHENLIANZHISHU = "晨练指数:"; public static final String JIAOTONGZHISHU = "交通指数:"; public static final String LIANGSHAIZHISHU = "晾晒指数:"; public static final String LVYOUZHISHU = "旅游指数:"; public static final String LUKUANGZHISHU = "路况指数:"; public static final String SHUSHIDUZHISHU = "舒适度指数:"; */ /* public static final String CHUANYIZHISHU = "穿衣指数:"; public static final String GUOMINZHISHU = "过敏指数:"; public static final String YUANDONGZHISHU = "运动指数:"; public static final String LIANGSHAIZHISHU = "晾晒指数:"; public static final String LVYOUZHISHU = "旅游指数:"; public static final String LUKUANGZHISHU = "路况指数:"; public static final String SHUSHIDUZHISHU = "舒适度指数:"; public static final String KONGQIWURANGZHISHU="空气污染指数:"; */ public static final String TOMORROWTEMPERATURE = "_tomorrowTemperature";//明天温度 public static final String TOMORROWDATE = "_tomorrowDate";//明天日期 public static final String TOMORROWWIND = "_tomorrowWind";//明天风况 public static final String TOMORROWPIC_1 = "_tomorrowPic_1";//明天天气图片1 public static final String TOMORROWPIC_2 = "_tomorrowPic_2";//明天天气图片2 public static final String AFTERTOMORROWTEMPERATURE = "_affterTomorrowTemperature";//后天温度 public static final String AFTERTOMORROWDATE = "_affterTomorrowDate";//后天日期 public static final String AFTERTOMORROWWIND = "_affterTomorrowWind";//后天风况 public static final String AFTERTOMORROWPIC_1 = "_affterTomorrowPic_1";//后天天气图片1 public static final String AFTERTOMORROWPIC_2 = "_affterTomorrowPic_2";//后天天气图片2 public static final String DESCRIPT = "_descript";//本地介绍 public static final Hashtable<Integer,String> input = new Hashtable<Integer,String>(0);//常量与数量对应 static{ input.put(0, REGIONFIRST); input.put(1, REGIONSECOND); input.put(2, REGIONID); input.put(3, REGIONPIC); input.put(4, REPORTTIME); input.put(5, TODAYTEMPERATURE); input.put(6, TODAYDATE); input.put(7, TODAYWIND); input.put(8, TODAYPIC_1); input.put(9, TODAYPIC_2); input.put(10, TODAYDETAIL); input.put(11, ZHISHU); input.put(12, TOMORROWTEMPERATURE); input.put(13, TOMORROWDATE); input.put(14, TOMORROWWIND); input.put(15, TOMORROWPIC_1); input.put(16, TOMORROWPIC_2); input.put(17, AFTERTOMORROWTEMPERATURE); input.put(18, AFTERTOMORROWDATE); input.put(19, AFTERTOMORROWWIND); input.put(20, AFTERTOMORROWPIC_1); input.put(21, AFTERTOMORROWPIC_2); input.put(22, DESCRIPT); } private String name; private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String getName() { return name; } public void setName(String name) { this.name = name; } }