axis WebServices 完美调用天气预报,查询、显示 代码!

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.οnlοad= 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>




action代码:

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() ;
	}
 
 
}

hashtable 类代码

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;   
    }   

}



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值