zoukankan      html  css  js  c++  java
  • JAVAWEB天气预报 中国气象网API(WebServices)

    根据城市或地区名称查询获得未来三天内天气情况、现在的天气实况、天气和生活指数

    方法名:getWeatherbyCityName

    有多种请求方式,本文使用的是SOAP1.1

    该链接有SOAP1.2、GEY、POST等其它请求方式

    http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?op=getWeatherbyCityName

    1、

    package com.lhh.servlet;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.lhh.comm.util.WeatherReport;
    
    
    public class WeatherServlet extends HttpServlet {
    
    	private static final long serialVersionUID = 1L;
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		//设置request编码
    		request.setCharacterEncoding("UTF-8");
    		//获取查询的城市
    		String city = request.getParameter("city");
    		String info = WeatherReport.getWeather(city);
    		request.setAttribute("info", info);
    		request.getRequestDispatcher("/weatherInfo.jsp").forward(request, response);
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		
    		this.doGet(request, response);
    	}
    
    }
    
    2、

    package com.lhh.comm.util;
    
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.net.URL;
    import java.net.URLConnection;
    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 WeatherReport {
    	/**
    	 * 获取SOAP的请求头,并替换其中的标志符号为用户输入的城市
    	 * 
    	 * 
    	 * @param city
    	 *            用户输入的城市名称
    	 * @return 客户将要发送给服务器的SOAP请求
    	 */
    	private static String getSoapRequest(String city) {
    		StringBuilder sb = new StringBuilder();
    		sb
    				.append("<?xml version="1.0" encoding="utf-8"?>"
    						+ "<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/">"
    						+ "<soap:Body>    <getWeatherbyCityName xmlns="http://WebXml.com.cn/">"
    						+ "<theCityName>" + city
    						+ "</theCityName>    </getWeatherbyCityName>"
    						+ "</soap:Body></soap:Envelope>");
    		return sb.toString();
    	}
    
    	/**
    	 * 用户把SOAP请求发送给服务器端,并返回服务器点返回的输入流
    	 * 
    	 * 
    	 * @param city
    	 *            用户输入的城市名称
    	 * @return 服务器端返回的输入流,供客户端读取
    	 * @throws Exception
    	 */
    	private static InputStream getSoapInputStream(String city) throws Exception {
    		try {
    			String soap = getSoapRequest(city);
    			if (soap == null) {
    				return null;
    			}
    			URL url = new URL(
    					"http://www.webxml.com.cn/WebServices/WeatherWebService.asmx");
    			URLConnection conn = url.openConnection();
    			conn.setUseCaches(false);
    			conn.setDoInput(true);
    			conn.setDoOutput(true);
    
    			conn.setRequestProperty("Content-Length", Integer.toString(soap
    					.length()));
    			conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
    			conn.setRequestProperty("SOAPAction",
    					"http://WebXml.com.cn/getWeatherbyCityName");
    
    			OutputStream os = conn.getOutputStream();
    			OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8");
    			osw.write(soap);
    			osw.flush();
    			osw.close();
    
    			InputStream is = conn.getInputStream();
    			return is;
    		} catch (Exception e) {
    			e.printStackTrace();
    			return null;
    		}
    	}
    
    	/**
    	 * 对服务器端返回的XML进行解析
    	 * 
    	 * 
    	 * @param city
    	 *            用户输入的城市名称
    	 * @return 字符串 用,分割
    	 */
    	public static String getWeather(String city) {
    		try {
    			Document doc;
    			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    			dbf.setNamespaceAware(true);
    			DocumentBuilder db = dbf.newDocumentBuilder();
    			InputStream is = getSoapInputStream(city);
    			doc = db.parse(is);
    			NodeList nl = doc.getElementsByTagName("string");
    			StringBuffer sb = new StringBuffer();
    			for (int count = 0; count < nl.getLength(); count++) {
    				Node n = nl.item(count);
    				if(n.getFirstChild().getNodeValue().equals("查询结果为空!")) {
    					sb = new StringBuffer("#") ;
    					break ;
    				}
    				sb.append(n.getFirstChild().getNodeValue() + "#
    ");
    			}
    			is.close();
    			return sb.toString();
    		} catch (Exception e) {
    			e.printStackTrace();
    			return null;
    		}
    	}
    
    	
    	public static void main(String[] args) throws Exception {
    		System.out.println(getWeather("福州"));
    		System.out.println("po&oi".split("&").length) ;
    		System.out.println("##".split("#").length) ;
    	}
    }
    
    3、tianqi.jsp

    <%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>天气预报查询</title>
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
      </head>
      
      <body>
      <form action="WeatherServlet" method="POST" target="_blank">
       	<input type="text" id="city" name="city"/>
       	<input type="submit" value="查询"/>
       	</form>
      </body>
    </html>
    4、weatherInfo.jsp
    <pre name="code" class="html"><%@ page language="java" pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        
        <title>城市天气信息</title>
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
    
      </head>
      
      <body>
        <% 
        String info = (String) request.getAttribute("info") ; 
        
        if(info.equals("#")) {
        %>
        <h1>该城市暂不被支持天气预报服务</h1>
        <%
        } else {
        String[] infos = info.split("#") ; 
        %>
        
        
        <table border="1">
         <tr>
         <td colspan="3">
         <strong><font color="blue">72小时天气预报</font>---
         <font color="red">
         <!-- 城市名称 -->
         <%=infos[0]%>   <%=infos[1]%>
         </font>
         <font size="-1">
         <%=infos[4] %>发布
         </font>
         </strong>
         </td>
         </tr>
         <tr align="center">
         <td>
         <table>
         <tr align="center">
         <!-- 日期 -->
         <td>
         <font size="-1">
         <%=infos[6] %>
         </font>
         </td>
         </tr>
         <tr align="center">
         <!-- 天气图标 -->
         <td>
         <img src="tqimgs/a_<%=infos[8]%>" />
         <img src="tqimgs/a_<%=infos[9]%>" />
         </td>
         </tr>
         <tr align="center">
         <!-- 天气细则 -->
         <td>
         <font size="-1">
         <%=infos[5] %><br>
         <%=infos[7] %><br>
         </font>
         </td>
         </tr>
         </table>
         </td>
         
         
         <td>
         <table align="center">
         <tr align="center">
         <td>
         <!-- 第二天的时间 -->
         <font size="-1">
         <%=infos[13] %>
         </font>
         </td>
         </tr>
         
         <tr align="center">
         <td>
         <!-- 第二天的天气图标 -->
         <img src="tqimgs/a_<%=infos[15]%>">
         <img src="tqimgs/a_<%=infos[16]%>">
    	</td>
         </tr>
         
         <tr align="center">
         <td>
         <!-- 第二天的天气细则 -->
         <font size="-1">
         <%=infos[12] %><br>
         <%=infos[14] %><br>
         </font>
         </td>
         </tr>
         </table>
         </td>
         
         
         <td>
         <table align="center">
         <tr align="center">
         <td>
         <!-- 第三天的天气时间 -->
        	<font size="-1">
         <%=infos[18] %>
         </font>
    		</td>
         </tr>
         
         <tr align="center">
         <td>
         <!-- 第三天的天气图标 -->
         <img src="tqimgs/a_<%=infos[20]%>" />
         <img src="tqimgs/a_<%=infos[21]%>" />
         </td>
         </tr>
         <tr align="center">
         <td>
         <!-- 第三天的天气细则 -->
         <font size="-1">
         <%=infos[17] %><br>
         <%=infos[19] %><br>
         </font>
         </td>
         </tr>
         </table>
         </td>
    		 </tr>
    		 <tr>
    		 <td colspan="3">
    		 <!-- 居家指数 -->
    		 <strong><font color="blue">温馨提醒</font></strong>
    		 </td>
    		 </tr>
    		 <tr>
    		 <td colspan="3">
    		 
    		 <table>
    		 <tr>
    		 <td>
    		 <img src="tqimgs/sun.gif" />
    		 </td>
    		 <td>
    		 <font size="-1">
    		 <%=infos[10] %>
    		 </font>
    		 </td>
    		 </tr>
    		 </table>
    		 
    		 
    		 </td>
    		 </tr>
    		 <tr>
    		 <td colspan="3">
    		 
    		  
    		  <%
    		  String str = "" ;
    		  String s1 = "" ;
    		  String s1Content = "" ;
    		  String s2 = "" ;
    		  String s2Content = "" ;
    		  String s3 = "" ;
    		  String s3Content = "" ;
    		  String s4 = "" ;
    		  String s4Content = "" ;
    		  String s5 = "" ;
    		  String s5Content = "" ;
    		  String s6 = "" ;
    		  String s6Content = "" ;
    		  String s7 = "" ;
    		  String s7Content = "" ;
    		  try {
    		  	//这里开始进行具体详细测试
    		  str = infos[11] ;
    		  //穿衣指数
    		  s1 = str.substring(str.indexOf("穿衣指数:"),str.indexOf("穿衣指数:")+4) ;
    		  s1Content = str.substring(str.indexOf("穿衣指数:")+5,str.indexOf("感冒指数:")) ;
    		  //感冒指数
    		  s2 = str.substring(str.indexOf("感冒指数:"),str.indexOf("感冒指数:")+4) ;
    		  s2Content = str.substring(str.indexOf("感冒指数:")+5,str.indexOf("晨练指数:")) ;
    		  
    		  //晨练指数
    		  s3 = str.substring(str.indexOf("晨练指数:"),str.indexOf("晨练指数:")+4) ;
    		  s3Content = str.substring(str.indexOf("晨练指数:")+5,str.indexOf("交通指数:")) ;
    		  //交通指数
    		  s7 = str.substring(str.indexOf("交通指数:"),str.indexOf("交通指数:")+4) ;
    		  s7Content = str.substring(str.indexOf("交通指数:")+5,str.indexOf("中暑指数:")) ;
    		  //中暑指数
    		  s4 = str.substring(str.indexOf("中暑指数:"),str.indexOf("中暑指数:")+4) ;
    		  s4Content = str.substring(str.indexOf("中暑指数:")+5,str.indexOf("防晒指数:")) ;
    		  //防晒指数
    		  s5 = str.substring(str.indexOf("防晒指数:"),str.indexOf("防晒指数:")+4) ;
    		  s5Content = str.substring(str.indexOf("防晒指数:")+5,str.indexOf("旅行指数:")) ;
    		  //旅行指数
    		  s6 = str.substring(str.indexOf("旅行指数:"),str.indexOf("旅行指数:")+4) ;
    		  s6Content = str.substring(str.indexOf("旅行指数:")+5) ;
    		  %>
    		  
    		   <table>
    		 <tr>
    		 <td width="50">
    		 <img src="tqimgs/zhishu_01.gif" />
    		 </td>
    		 <td>
    		 <strong>
    		 <font size="-1">
    		 <%=s1 %> 
    		 </font>
    		 </strong>
    		 </td>
    		 <td>
    		 <font size="-1">
    		 <%=s1Content %>
    		 </font>
    		 </td>
    		 </tr>
    		 
    		 
    		 <tr>
    		 <td width="50">
    		 <img src="tqimgs/zhishu_20.gif" />
    		 </td>
    		 <td>
    		 <strong>
    		 <font size="-1">
    		 <%=s2 %> 
    		 </font>
    		 </strong>
    		 </td>
    		 <td>
    		 <font size="-1">
    		 <%=s2Content %>
    		 </font>
    		 </td>
    		 </tr>
    		 
    		 <tr>
    		 <td width="50">
    		 <img src="tqimgs/zhishu_03.gif" />
    		 </td>
    		 <td>
    		 <strong>
    		 <font size="-1">
    		 <%=s3 %> 
    		 </font>
    		 </strong>
    		 </td>
    		 <td>
    		 <font size="-1">
    		 <%=s3Content %>
    		 </font>
    		 </td>
    		 </tr>
    		 
    		 <tr>
    		 <td width="50">
    		 <img src="tqimgs/zhishu_22.gif" />
    		 </td>
    		 <td>
    		 <strong>
    		 <font size="-1">
    		 <%=s4 %> 
    		 </font>
    		 </strong>
    		 </td>
    		 <td>
    		 <font size="-1">
    		 <%=s4Content %>
    		 </font>
    		 </td>
    		 </tr>
    		 
    		 
    		 <tr>
    		 <td width="50">
    		 <img src="tqimgs/zhishu_07.gif" />
    		 </td>
    		 <td>
    		 <strong>
    		 <font size="-1">
    		 <%=s5 %> 
    		 </font>
    		 </strong>
    		 </td>
    		 <td>
    		 <font size="-1">
    		 <%=s5Content %>
    		 </font>
    		 </td>
    		 </tr>
    		 
    		 
    		 <tr>
    		 <td width="50">
    		 <img src="tqimgs/zhishu_31.gif" />
    		 </td>
    		 <td>
    		 <strong>
    		 <font size="-1">
    		 <%=s6 %> 
    		 </font>
    		 </strong>
    		 </td>
    		 <td>
    		 <font size="-1">
    		 <%=s6Content %>
    		 </font>
    		 </td>
    		 </tr>
    		 
    		 
    		 
    		 <tr>
    		 <td width="50">
    		 <img src="tqimgs/zhishu_11.gif" />
    		 </td>
    		 <td>
    		 <strong>
    		 <font size="-1">
    		 <%=s7 %> 
    		 </font>
    		 </strong>
    		 </td>
    		 <td>
    		 <font size="-1">
    		 <%=s7Content %>
    		 </font>
    		 </td>
    		 </tr>
    		 
    		 
    		 </table>
    		 
    		 
    		 </td>
    		 </tr>
         </table>
    		  
    		  
    		  <%
    		  } catch(Exception e) {		  	
    		  }		  
    		   %>  
        <%
        }     
         %>
     
    </body>
    </html>
    

    
    
    天气图片包下载地址http://www.webxml.com.cn/images/weather.zip



  • 相关阅读:
    学习hadoop
    贵在坚持
    保护好自己的毕业论文
    博客园与CSDN的选择
    Matlab中的“prod”函数
    js实现HashMap()
    js常用正则表达式
    苹果手机使用替代onkeyup的方法
    keydown
    ArrayAndString(数组和字符串)
  • 原文地址:https://www.cnblogs.com/laohuihui/p/5308772.html
Copyright © 2011-2022 走看看