了解WebService,其实它不难

时间:2021-07-03 05:29:52

首先,我理解的WebService(若有问题请留言指正)是跨语言,跨协议的一种通讯方式,它是基于SOAP协议,即简单的对象访问协议,为什么说他是跨语言呢,因为一个已发布的WebService服务,可以用java、.net、c++...等语言去调用,为什么说它是跨协议呢,首先它是基于SOAP协议,你可以通用HTTP,TCP/IP...等协议去访问他,为什么说它是一种通讯方式呢,其实它的过程就是客户端发送请求给服务器端,服务器端收到请求做处理后返回数据给客户端,那你这么说,有点儿像ajax呢?其实还是有区别的,为什么呢?ajax请求一般是针对同一个项目,因为不同的项目间访问会存在跨域问题,而WebService这种调用,一般是不同的项目间的访问,这样就大大提高了代码的复用性,你想是不是呢,你的项目中的服务发布后,其他公司的项目还能用到你的服务,是不是觉得很爽呢,说不定还能收点儿服务费..哈哈,说到webservice 就不得不说下socket,其实socket也是一种通讯方式,客户端发送请求给服务器端,服务器端收到请求处理后返回数据给客户端,只是socket发送请求是只能发送字符串,若要传输的参数比较多时,就会存在解析数据的问题,相对比较麻烦,若是以HTTP协议的方式访问socket服务,服务器端处理后还会返回很多无用的数据,如文件头之类的信息,又要涉及到解析数据,比较麻烦,因为毕竟我们仅想获得结果数据而已,相比之下,WebService就相对高大尚一点,它可以传输对象,因为它的数据是通过xml的形式传递的,相对较灵活,不扯了,有点儿偏题了,我们直接看下面。

下面给出两个例子,一个是调用别人的webservice服务,一个是调用自己的。

一、调用公共已发布的webservice,如天气预报、数据归属地区,查询。

以数据归属地区查询为例:

首先打开链接:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo

你可以看到如下图:

了解WebService,其实它不难

上面有接口的简介信息,下面是接口测试,mobileCode即为电话号码,userid为商业付费用户,若有这个id可获得更多的信息,我个人是这么理解的,我们普通用户不填即可。

点击测试后,返回下图信息。

了解WebService,其实它不难了解WebService,其实它不难

说明接口测试通过,我们再看上面链接的其他内容,可以看到,这个接口调用有四种模式,soap1.1,soap1.2,HTTP GET,HTTP POST,这儿soap1.1适合于jdk1.6的高版本及以上版本,如1.7,用低版本会报莫明其妙的错误信息,sop1.2为jdk1.6以上版本适用。基于上面的四种模式,我们以soap1.1 为例。

首先打开链接:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl,效果如下图

了解WebService,其实它不难了解WebService,其实它不难

上面截取了部分,上面的内容看不懂没关系,其实它是用来生成java源代码的

要生成java源代码就需要用到一个工具,webservice提供给jdk1.6用于解决跨语言的,.net也有一个,名称都为wsimport.exe,下面我们看它怎么用。

首先在F盘创建一个resource的文件夹,用于呆会儿生成的源文件的存在,好了,我们进入dos命令窗口,cmd-->cd F:/resource/-->F:/-->wsimport -s . -p  lxl.ws.client.a http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl,回车试一把。

在这儿我解释一下上面的命令,首先进入F盘的resource文件夹,wsimport命令,后面-s .为在当前目录下生成class文件和java源文件,-p ws.client为包路径,再后面的地址就是上面图片中要解析生成源码的地址,自己动手试试,等生成了源码就一目了然了。

找到生成的源码,将源码沾到项目中去,如我的项目

了解WebService,其实它不难了解WebService,其实它不难

再创建客户端测试类,如下图

了解WebService,其实它不难

运行即可得到如下图,

了解WebService,其实它不难

若运行的时候报HTTP 503错误,不用慌,那是服务器忙,因为访问的人多嘛,多试几次就会有效果。

上面就算是测试通过了,我们学会了调用别人的WebService服务,我们再来看下自己创建Webservice服务,自己来调用,其实很简单。


二、自己创建WebService服务,自己来调用

其实很简单,如下图

了解WebService,其实它不难了解WebService,其实它不难

我创建了个MyWebserviceServer的项目,创建了服务类WsServer,这儿有几个地方需要搞清楚,首先我这个类其实一看很普通,为什么就能发布WebService服务了呢?

要发布为WebService服务的类,必须要注册,通过注解@WebService的方式,其次注册为WebService服务的类,只会发布其公共的方法,其中不包含静态方法,如上图,只会发布getHb方法,在main方法中Endpoint.publish方法是用来发布服务用的,第一个参数为服务地址,后面的5555是端口号,这个不是固定的,随便写4个数字都行,第二个参数是实现类。

我们运行一下WsService类,开启服务,效果如下图

了解WebService,其实它不难了解WebService,其实它不难

即然有了服务端,我们现在来创建客户端

有了第一个例子的经验,我们接下来就好办了,回忆一下,是不是根据wsdl地址生成源码呢?

根据图片中的服务地址,进入Dos命令,输入wsimport -s . -p  lxl.ws.client.b  http://192.168.1.7:5555/HB?WSDL,回车生成源码,将源码沾到项目中去,如下图

了解WebService,其实它不难了解WebService,其实它不难

上图中WsClient_Main为自己定义的客户端测试类,其余文件均为通过命令自动生成,你试下你就知道了

如上图WsClient_Main测试类,只有几行简单的代码,我们运行试一下,运行结果如下图

了解WebService,其实它不难了解WebService,其实它不难

我们再来看下服务器端控制台变化呢

了解WebService,其实它不难了解WebService,其实它不难

是不是多了一行,自己动手试试就清楚了。


===========================================================================================================

上面关于webservice的介绍我就说完了,一切来得太快我都惊呆了....哈哈...,动手试试吧码农,相信你一定有自己的理解。