the5fire

关注Python、Django、Vim、Linux、Web开发、团队管理和互联网--Life is short, we need Python.


使用Webservice读取网络上的天气预报

作者:the5fire | 标签:     | 发布:2011-01-08 7:47 p.m. | 阅读量: 11094, 10852

  Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。具体来说它可以完成异构语言的通信,就是可以通过它来让C#和Java之间进行通信。

  它包含的技术有:
1.XML:描述数据的标准方法.
  2.SOAP:表示信息交换的协议.
  3.WSDL:Web服务描述语言.
  4.UDDI(Universal Description, Discovery and Integration):通用描述、发现与集成,它是一种独立于平台的,基于XML语言的用于在互联网上描述商务的协议。


  根据我个人的理解来说,所谓WebService就是一个中间商,Java和C#编写的程序可以通过该中间商发布信息以供其他异构语言读取。

  这个简单演示一下通过java来读取WebService上的内容。

大概步骤:

  首先是根据WebService的描述(WSDL)生成本地的存根文件;

  然后在本地调用存根文件即可。


  具体实现:
1. 建一个文件 WSDL-SQUARED.CMD ,内容如下:

set AXIS_HOME=F:\DRP\axis-1_4
set CLASSPATH=.;%AXIS_HOME%\lib\axis.jar;%AXIS_HOME%\lib\axis-ant.jar;%AXIS_HOME%\lib\commons-discovery-0.2.jar;%AXIS_HOME%\lib\commons-logging-1.0.4.jar;%AXIS_HOME%\lib\jaxrpc.jar;%AXIS_HOME%\lib\log4j-1.2.8.jar;%AXIS_HOME%\lib\saaj.jar;%AXIS_HOME%\lib\wsdl4j-1.5.1.jar

java org.apache.axis.wsdl.WSDL2Java -p com.util.ws http://www.ayandy.com/Service.asmx?WSDL

你需要把这个我文件拷贝到你项目的src目录下,然后在资源管理其中打开,运行该文件,即可根据WebService的描述生成本地的语言代码到指定的“com.util.ws”包中。其中的AXIS_HOME的目录是需要你配置的,具体的axis-1_4包需要下载,在最后我会给出,另外你需要把这个包目录下lib中的jar包都拷贝到WEB-INF的lib下面。那个com.util.ws就是我建立的一个包。

testweather

2. 然后刷新一下工程,你会发现在com.util.ws包中多了几个类(你可以看看这几个类中的代码是怎么写的),然后写一个jsp调用一下存根类:

<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@ page import="java.rmi.RemoteException" %>
<%@ page import="javax.xml.rpc.ServiceException" %>
<%@ page import="com.util.ws.*" %>
<%
Service service = new ServiceLocator();

ServiceSoap_PortType serviceSoap_PortType = service.getServiceSoap();

String[] provs = serviceSoap_PortType.getSupportProvince();
out.println("得到支持的省份:
");
for (int i = 0; i < provs.length; i++) {
out.println(provs[i]);
if (i % 8 == 0 ) {
out.println("
");
}
}

out.println("得到支持的城市:
");
String[] citys = serviceSoap_PortType.getSupportCity("河北");

out.println("输出各个城市的天气:
");
for (int i = 0; i < citys.length; i++) {

String[] weathers = serviceSoap_PortType.getWeatherbyCityName(citys[i],TheDayFlagEnum.Today);
//如果不存在该城市的天气则读取下一个
if (weathers[2].equalsIgnoreCase("您查询的城市天气信息不存在!") || weathers[2] == null) {
continue;
}
out.println(citys[i] + ":");
for (int j = 2; j < weathers.length - 2; j++) {
out.println(weathers[j]);
}
out.println("
");
out.println("img src='" + weathers[6] + "'");
out.println("
");
}


%>


  运行即可显示效果:
weather


  关于WebService的应用还有很多,我个人也只是简单的了解,欢迎大家一起讨论。

axis-bin-1_4.zip下载:http://u.115.com/file/f46e54afa5


  Web服务集合:http://www.webxml.com.cn/zh_cn/web_services.aspx,你可以从这里获得WebService服务,就像是我这个读取天气预报,你可以读取手机归属地,可以读取股票信息,……


  相关参考:
http://dotnet.e800.com.cn/articles/2008/325/1206413620368_1.html
- from the5fire.com
----EOF-----

微信公众号:Python程序员杂谈


其他分类: