Webservice培训顾邹阳Webservice简介•我自己理解Webservice就是调用其他网站的资源的一种方法。•主要分成:Web服务和调用即服务端与客户端•Webservice是一种能简单快速实现服务与客户端调用的一种可以由多种语言实现的方法(可以是java,C#等)•具体的工作原理:服务器端发布一个服务,然后客户端通过服务器端发布出来的wsdl来进行访问•现在比较流行的java开发包有axis,axis2,CXF,xfire•具体开发的时候所用的工具我这边是eclipse发布服务器我这边用的是Tomcat5.5具体的程序开发axis•1.axis所要用到的包为:axis.jar,axis-ant.jar,commons-discovery-0.2.jar,commons-logging-1.0.4.jar,jaxrpc.jar,log4j-1.2.8.jar,saaj.jar,wsdl4j-1.5.1.jar•具体的开发的时候要先配制web.xml要在web.xml里加入如下内容:•servlet•servlet-nameAxisServlet/servlet-name•servlet-class•org.apache.axis.transport.http.AxisServlet•/servlet-class•/servlet•servlet•servlet-nameAdminServlet/servlet-name•servlet-class•org.apache.axis.transport.http.AdminServlet•/servlet-class•load-on-startup100/load-on-startup•/servlet具体的程序开发axis•servlet•servlet-nameSOAPMonitorService/servlet-name•servlet-classorg.apache.axis.monitor.SOAPMonitorService/servlet-class•init-param•param-nameSOAPMonitorPort/param-name•param-value5001/param-value•/init-param•load-on-startup100/load-on-startup•/servlet•servlet-mapping•servlet-nameAxisServlet/servlet-name•url-pattern/servlet/AxisServlet/url-pattern•/servlet-mapping•servlet-mapping•servlet-nameAxisServlet/servlet-name•url-pattern*.jws/url-pattern•/servlet-mapping•servlet-mapping•servlet-nameAxisServlet/servlet-name•url-pattern/services/*/url-pattern•/servlet-mapping•servlet-mapping•servlet-nameSOAPMonitorService/servlet-name•url-pattern/SOAPMonitor/url-pattern•/servlet-mapping具体的程序开发axis•具体举例:•服务器端的类:publicclassSayHello{publicstaticStringsayHello(Stringname){returnHello+name;}}这个方法要定义成public要有返回类型,参数和具体的返回具体的程序开发axis•发布:•要在server-config.wsdd里进行发布•我们在server-config.wsdd里找到servicename=Versionprovider=java:RPC•parametername=allowedMethodsvalue=getVersion/•parametername=classNamevalue=org.apache.axis.Version/•/service在这之后添加我们自己的要进行发布的方法•servicename=SayHelloprovider=java:RPC•parametername=classNamevalue=com.land.axis.server.SayHello/•parametername=allowedMethodsvalue=*/•/service•这里定义的方法名为:SayHello(可以随便),如果是简单的方法一般格式为RPC就可以了com.land.axis.server.SayHello这个就是类的路径•配制完保存后我们就可以启动TOMCAT了•我这里工程名为axisws,tomcat的端口为9001所以得到以下路径••大家可以看到以下页面具体的程序开发axis点击SayHello可以看到以下页面具体的程序开发axis•?xmlversion=1.0encoding=UTF-8?•-wsdl:definitionstargetNamespace=:apachesoap=:impl=:intf=:soapenc=:wsdl=:wsdlsoap=:xsd=•-!--WSDLcreatedbyApacheAxisversion:1.4BuiltonApr22,2006(06:55:48PDT)--•-wsdl:messagename=sayHelloResponse•wsdl:partname=sayHelloReturntype=xsd:string/•/wsdl:message•-wsdl:messagename=sayHelloRequest•wsdl:partname=nametype=xsd:string/•/wsdl:message•-wsdl:portTypename=SayHello•-wsdl:operationname=sayHelloparameterOrder=name•wsdl:inputmessage=impl:sayHelloRequestname=sayHelloRequest/•wsdl:outputmessage=impl:sayHelloResponsename=sayHelloResponse/•/wsdl:operation•/wsdl:portType•-wsdl:bindingname=SayHelloSoapBindingtype=impl:SayHello•wsdlsoap:bindingstyle=rpctransport=•-wsdl:operationname=sayHello•wsdlsoap:operationsoapAction=/•-wsdl:inputname=sayHelloRequest•wsdlsoap:bodyencodingStyle===encoded/•/wsdl:input•-wsdl:outputname=sayHelloResponse•wsdlsoap:bodyencodingStyle===encoded/•/wsdl:output•/wsdl:operation•/wsdl:binding•-wsdl:servicename=SayHelloService•-wsdl:portbinding=impl:SayHelloSoapBindingname=SayHello•wsdlsoap:addresslocation=•/wsdl:port•/wsdl:service•/wsdl:definitions具体的程序开发axis•如果看到以上的页面说明你的发布成功了那么我们就可以再去写一个客户端程序如下:•importjava.net.MalformedURLException;•importjava.rmi.RemoteException;•importjavax.xml.rpc.ServiceException;•importorg.apache.axis.client.Call;•importorg.apache.axis.client.Service;•publicclassSayHelloClient{–publicstaticvoidmain(String[]args){–//TODO自动生成方法存根–Stringendpoint=–Serviceservice=newService();//回调返回值在这里进行序列化–Callcall;–try{–call=(Call)service.createCall();//定义回调用的call–call.setTargetEndpointAddress(newjava.net.URL(endpoint));//把要调用的方法的地址放在这里–call.setOperationName(sayHello);//这个是方法名–Stringname=顾邹阳;//这个是sayHello方法的参数定义–Stringobj=(String)call.invoke(newObject[]{name});//开始调用obj是返回值–System.out.println(返回值:+obj);–}catch(ServiceExceptione){–e.printStackTrace();–}catch(MalformedURLExceptione){–e.printStackTrace();–}catch(RemoteExceptione){–e.printStackTrace();–}–}•}•我们执行一下如果成功的话会在控制台出现如下的打印返回值:Hello顾邹阳具体的程序开发axis2•2.A