webservice,先让我们来理解一下这个名词。简单点说调用其他网站的资源的一种方法。所以,通俗地说,Web service(Web服务)就是让你的网站可以使用其他网站的资源,比如在网页上显示天气、地图、twitter上的最新动态等等。
本地服务与web服务
本地服务,显然和web服务相对应,完成一项任务,若不需要调用其他网站上得资源,都靠本地资源来完成,我们就把这个称为"本地服务",打个比方,我肚子饿了,我可以自己做饭(本地),也可以打电话订一份快餐(web)来填饱肚子。
为什么要用webservice?
首先本地服务有一定的缺陷:资源不足,Internet最大的优势就是资源共享;成本因素,包括硬件和人员;可移植性不好;
其次,webservice有相当的优势:平台无关,无论什么平台都可以用web服务;与编程语言无关,只要遵守相关协议,就可以使用任何编程语言,向其他网站申请web服务等等之类的优势。
下面我们开始发布一个web服务。
发布webservice有两种方式:即时发布和定制发布,定制发布比即时发布稍显复杂,但是也更加灵活,所以我用都是采用定制发布方式。Axis是Apache的一个开源web service引擎。它目前最为成熟的开源web service引擎之一。我们这里介绍利用Axis来发布一个web服务。
1)首先我们要准备以下jar包:axis.jar、commons-logging-1.1.jar、commons-discovery-0.2.jar、jaxrpc.jar、saaj.jar、wsdl4j-1.5.1.jar,activation.jar、mail.jar这些jar包大家都可以到这个网站上去下载 http://www.findjar.com/index.x 输入你想要得jar包,即可搜索到,下载。
2)编写服务端程序server:eg
3)编写deploy.wsdd文件:eg
4)发布服务
编辑一个deploy.bat文件(我是放在与web-inf同一目录下):内容如下:
set Axis_Lib=D:/Workspace03/releaseByAxis/WEB-INF/lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Axis_Servlet=http://localhost:8080/releaseByAxis/servlet/AxisServlet
%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd
这样的话,可能有些人会出现无法找到类之类得异常,原因就是没有在classpath中加载需要得jar包。所以如果出现此错误,需要在上面内容中加上set classPath=……目录.jar
如果出现:
Processing file deploy.wsdd
<Admin>Done processing</Admin>
那么恭喜你,你已经成功发布一个服务了。同时在同级目录下会产生一个server-config.wsdd文件,这里给出了我们发布的service的具体信息。
当然也会出现问题,比如我在测试得时候,在这一步骤就会出现:
Exception: AxisFault
faultCode: {http://xml.apache.org/axis/}HTTP
faultSubcode:
faultString: (404)/axis/servlet/AxisServlet
faultActor:
faultNode:
faultDetail:
{}:return code: 404
错误,那是因为我还没有配置好web.xml,所以如果出现这个问题,那么我们就需要将官方的web.xml文件拷贝到web-inf下。官方xml内容:
这样我们就可以在浏览器中访问我们发布得服务了,http://localhost:8080/releaseByAxis/servlet/AxisServlet
二、编写客户端,访问web服务
1)在浏览器端访问服务器端的服务,那么可以下载到其webservice,通过axis相关工具,可以自动从wsdl文件中生成webservice客户端代码。
set classpath=……jar
set Axis_Lib=D:/Workspace03/releaseByAxis/WEB-INF/lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:/Workspace03/releaseByAxis/src
set Package=p1.SayHello
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% SayHello.wsdl
执行完该批处理后,即可生成client stub,生成的列表包括Hello.java,HelloService.java,HelloServiceLocator.java,HelloSoapBindingStub.java。
也可以不用下载,直接转换,eg:这是一个天气预报得服务
Java -classpath E:……jar org.apache.axis.wsdl.WSDL2Java http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?WSDL
得到这些列表后,接下来便是相当于在本机中进行方法调用,贴上一段代码:
2)
至此,一套完整的流程就结束了。共同学习!