由于项目需要,必须使用WebService进行接口数据交换。于是百度了很多有关的信息,挑选了一些解释的非常好的解释:
WebService是一种跨编程语言和跨操作系统平台的远程调用技术。所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法。
WSDL:
好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。 WebService也一样,WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。
WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述WebService及其函数、参数和返回值。它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。
WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。
摘自:http://blog.csdn.net/wooshn/article/details/8069087/ (理解WebService,推荐)
开始没有接触过WebService,只知道它是用来交换数据的,于是就我就想,既然是数据交换,
为什么不使用json?
为什么不使用servlet?
为什么不使用其他的技术?
后来在网上又找到了一篇很好的帖子 http://www.iteye.com/topic/1135747(创建一个简单的WebService实例)
动手做了一个简单的WebService,后来发现WebService确实是个强大的东西。我所理解的如下:
A和B在不同的地方开发,而B需要调用A的方法向A发送数据,于是A先定义了一个规范文件,格式为wsdl,通过这个wsdl告诉B:如果你需要调用我的方法就需要先获得我的代理,然后调用指定的方法,这个方法的返回值和参数在wsdl中都告诉你了。B知道这个wsdl之后,根据这个wsdl去查看怎么获取代理端口,怎么调用方法,需要传什么参数,有什么返回值。就这样B就能成功得调用A的方法,并且成功通讯了。
其实我感觉和post类似,只不过更加规范,对于A来说编程更加简单了。
以上是对WebService的理解,但是这些都不是重点!!!
由于项目的特殊需求,开发环境只能使用JDK1.4,不能使用注解,而刚刚的方法必须要使用到注解,于是又去网上找各种方法,解决方法就是使用各种框架,感觉好复杂,而不用框架都不可以成功。。。。项目的关键步骤是获取代理端口,突然发现了一个神器:WSDL2JAVA,几年前用java开发以及调用webservice服务都是比较复杂的事情,但现在已经变得很简单。Axis已经为我们做好了一切,我们只需要使用它的工具方法生成我们自己想要的webservice服务即可。这里只先讲一下通过WSDL描述,来生成java类的方法。
使用方法:
1、下载WSDL2JAVA.rar包,其中包含activation.jar,axis-ant.jar,axis.jar,commons-discovery-0.2.jar,commons-logging-1.0.4.jar,jaxrpc.jar,log4j-1.2.8.jar,mail.jar,saaj.jar,wsdl4j-1.5.1.jar。
2、解压之后,编辑(包名,输出路径,wsdl)参数并运行WSDL2Java(URL).bat或者WSDL2Java(file).bat后,将在source中生成WebService客户端代码。
3、直接使用生成的代码调用WebService服务即可。
(工具下载地址:http://download.csdn.net/detail/a445849497/9579773)
将生成的java文件导入到项目里面然后直接调用
// 建立本机到服务器的连接
XXXX_Service gtService = new XXXX_ServiceLocator();
// 获得端口和代理
XXX_PortType client = gtService.getXXXXServicePort();
// 调用指定的方法
result = client.XXXX(data);
以上几个步骤就能成功让B调用A的方法了。
接下来让我们来做一个实例:
测试wsdl为一个查询天气的接口:
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
目的:调用这个接口的函数,获取天气信息。
步骤:我们可以查看到这个接口对应的函数getWeatherbyCityName
这个wsdl里面已经对这个方法有了说明,如果不看说明的话,我们可以找到下图,就可以知道它需要一个String类型的参数theCityName
下面我们开始使用wsdl2java工具
1.修改URL.bat里面的内容。
2.生成java文件
3.在MyEclipse里面建一个工程,并将这个文件拷进去。
5.是不是很兴奋,一个错误都没有了,然后我们再新建一个测试类
6.编写测试类,并成功调用。
总结:
为什么要学习web service?
大多数对外接口会实现web service方法而不是http方法,如果你不会,那就没有办法对接。
web service相对http (post/get)有好处吗?
1.接口中实现的方法和要求参数一目了然
2.不用担心大小写问题
3.不用担心中文urlencode问题
4.代码中不用多次声明认证(账号,密码)参数
5.传递参数可以为数组,对象等...
web service相对http(post/get)快吗?
由于要进行xml解析,速度可能会有所降低。
web service 可以被http(post/get)替代吗?
完全可以,而且现在的开放平台都是用的HTTP(post/get)实现的。
摘自:http://my.oschina.net/u/1757458/blog/365588 (WebService和Http的对比)
推荐 http://blog.csdn.net/zhuizhuziwo/article/details/8153327