webservice培训

上传人:ll****x 文档编号:243139925 上传时间:2024-09-16 格式:PPT 页数:30 大小:485KB
返回 下载 相关 举报
webservice培训_第1页
第1页 / 共30页
webservice培训_第2页
第2页 / 共30页
webservice培训_第3页
第3页 / 共30页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,Webservice培训,1,Webservice简介,我自己理解,Web service,就是调用其他网站的资源的一种方法,。,主要分成:,Web,服务和调用即服务端与客户端,Webservice是一种能简单快速实现服务与客户端调用的,一种可以由多种语言实现的方法(可以是,java,C#等,),具体的工作原理,:服务器端发布一个服务,然后客户端通过服务器端发布出来的wsdl来进行访问,现在比较流行的,java开发包有axis,axis2,CXF,xfire,具体开发的时候所用的工具我这边是,eclipse发布服务器我这边用的是Tomcat5.5,2,具体的程序开发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里加入,如下内容:,AxisServlet,org.apache.axis.transport.http.AxisServlet,AdminServlet,org.apache.axis.transport.http.AdminServlet,100,3,具体的程序开发axis,SOAPMonitorService,org.apache.axis.monitor.SOAPMonitorService,SOAPMonitorPort,5001,100,AxisServlet,/servlet/AxisServlet,AxisServlet,*.jws,AxisServlet,/services/*,SOAPMonitorService,/SOAPMonitor,4,具体的程序开发axis,具体举例:,服务器端的类,:,public class SayHello ,public static String sayHello(String name),return Hello+name;,这个方法要定义成,public 要有返回类型,参数和具体的返回,5,具体的程序开发axis,发布:,要在,server-config.wsdd里进行发布,我们在,server-config.wsdd里,找到,在这之后添加我们自己的要进行发布的方法,这里定义的方法名为:,SayHello(可以随便),如果是简单的方法一般,格式为,RPC,就可以了,com.land.axis.server.SayHello这个就是类的路径,配制完保存后我们就可以启动,TOMCAT了,我这里工程名为,axisws,tomcat的端口为9001所以得到 以下路径,大家可以看到以下页面,6,具体的程序开发axis,点击SayHello,可以看到以下页面,7,具体的程序开发axis,-,-,-,-,-,-,-,-,-,-,-,-,8,具体的程序开发axis,如果看到以上的页面说明你的发布成功了那么我们就可以再去写一个客户端程序如下:,import .MalformedURLException;,import java.rmi.RemoteException;,import javax.xml.rpc.ServiceException;,import org.apache.axis.client.Call;,import org.apache.axis.client.Service;,public class SayHelloClient ,public static void main(String args) ,/,TODO,自动生成方法存根,String endpoint = ;,Service service =,new Service();/,回调返回值在这里进行序列化,Call call;,try,call=(Call)service.createCall();/,定义回调用的,call,call.setTargetEndpointAddress(,new .URL(endpoint);/,把要调用的方法的地址放在这里,call.setOperationName(sayHello);/,这个是方法名,String name=,顾邹阳,;/,这个是,sayHello,方法的参数定义,String obj = (String) call.invoke(,new Objectname);/,开始调用,obj,是返回值,System.,out.println(,返回值:,+obj);,catch (ServiceException e) ,e.printStackTrace();,catch (MalformedURLException e) ,e.printStackTrace();,catch (RemoteException e) ,e.printStackTrace();,我们执行一下如果成功的话会在控制台出现如下的打印 返回值:,Hello,顾邹阳,9,具体的程序开发axis2,2.AXIS2,用,POJO,实现,0,配置的,WebService,Axis2,支持,SOAP1.1,和,SOAP1.2,,我这里只讲几个简单的例子,Axis2,的下载和安装,可以从如下的网址下载,Axis2,的最新版本:,我使用了目前,Axis2,的最新版本,1.4.1,。可以下载如下两个,zip,包:,axis2-1.4.1-bin.zip,axis2-1.4.1-war.zip,其中,axis2-1.4.1-bin.zip,文件中包含了,Axis2,中所有的,jar,文件, axis2-1.4.1-war.zip,文件用于将,WebService,发布到,Web,容器中。,将,axis2-1.4.1-war.zip,文件解压到相应的目录,将目录中的,axis2.war,文件放到,webapps,目录中并启动,Tomcat,。,在浏览器地址栏中输入如下的,URL,:,如果在浏览器中显示出如图,1,所示的页面,则表示,Axis2,安装成功。,10,具体的程序开发axis2,11,具体的程序开发axis2,编写和发布,WebService,在,Axis2,中不需要进行任何的配置,就可以直接将一个简单的,POJO,发布成,WebService,。其中,POJO,中所有的,public,方法将被发布成,WebService,方法。,下面我们来实现一个简单的,POJO,,代码如下:,publicclassTestServicepublicStringsayHello (Stringname)/这个方法是有参数的return Hello:,+name;publicintgetRandom ()/这个方法是没有参数的returnnewjava.util.Random().nextInt(1000);,在,TestService,类中有两个方法,由于这两个方法都是,public,方法,因此,它们都将作为,WebService,方法被发布。,编译,TestService,类后,将,TestService.class,文件放到,webappsaxis2WEB-INFpojo,目录中(如果没有,pojo,目录,则建立该目录)。现在我们已经成功将,TestService,类发布成了,WebService,。在浏览器地址栏中输入如下的,URL,:,12,具体的程序开发axis2,13,具体的程序开发axis2,在浏览器地址栏中输入如下的两个,URL,来分别测试,sayHello,和,getRandom,方法:,14,具体的程序开发axis2,在编写、发布和测试配置的,WebService,时应注意如下几点:,1.POJO,类不能使用,package,关键字声明包。,2.Axis2,在默认情况下可以热发布,WebService,,也就是说,将,WebService,的,.class,文件复制到,pojo,目录中时,,Tomcat,不需要重新启动就可以自动发布,WebService,。如果想取消,Axis2,的热发布功能,可以打开,webappsaxis2WEB-INFconfaxis2.xml,,找到如下的配置代码:,true,将,true,改为,false,即可。要注意的是,,Axis2,在默认情况下虽然是热发布,但并不是热更新,也就是说,一旦成功发布了,WebService,,再想更新该,WebService,,就必须重启,Tomcat,。这对于开发人员调试,WebService,非常不方便,因此,在开发,WebService,时,可以将,Axis2,设为热更新。在,axis2.xml,文件中找到,false,,将,false,改为,true,即可。,3.,在浏览器中测试,WebService,时,如果,WebService,方法有参数,需要使用,URL,的请求参数来指定该,WebService,方法参数的值,请求参数名与方法参数名要一致,例如,要测试,sayHello,方法,请求参数名应为,name,,如上面的,URL,所示。,4.,发布,WebService,的,pojo,目录只是默认的,如果读者想在其他的目录发布,WebService,,可以打开,axis2.xml,文件,并在,元素中添加如下的子元素:,上面的配置允许在,webappsaxis2WEB-INFmy,目录中发布,WebService,。例如,将本例中的,TestService.class,复制到,my,目录中也可以成功发布(但要删除,pojo,目录中的,TestService.class,,否则,WebService,会重名)。,15,具体的程序开发axis2,实现调用,WebService,的客户端程序,import javax.xml.namespace.QName;,import org.apache.axis2.addressing.EndpointReference;,import org.apache.axis2.client.Options;,import org.apache.axis2.rpc.client.RPCServiceClient;,public class RPCClient ,public static void main(String args) throws Exception ,/,使用,RPC,方式调用,WebService,RPCServiceClient serviceClient =,new RPCServiceClient();,Options options = serviceClient.getOptions();,/,指定调用,WebService,的,URL,EndpointReference targetEPR =,new,16,具体的程序开发axis2,EndpointReference();,options.setTo(targetEPR);,/,指定,getGreeting,方法的参数值,Object opAddEntryArgs =,new Object gzy;/,参数的内容,/,指定,getGreeting,方法返回值的数据类型的,Class,对象,Class classes =,new Class String.class;/,返回值为,String,/,指定要调用的,getGreeting,方法及,WSDL,文件的命名空间,QName opAddEntry =,new QName(, sayHello);,/,调用,getGreeting,方法并输出该方法的返回值,System.,out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)0);/,这里有一个参数,/,下面是调用,getPrice,方法的代码,这些代码与调用,getGreeting,方法的代码类似,classes =,new Class int.class;/,返回值为,int,opAddEntry =,new QName(, getRandom);/,具体的方法名 为命名空间,System.,out.println(serviceClient.invokeBlocking(opAddEntry,new Object, classes)0);/,参数为空时不能为,null,只能为,new Object,17,具体的程序开发CXF,CXF是不需要web就能直接发布的一个webservice工具,下面我们直接用例子来说明,CXF的使用,我这里用到的包为,apache-cxf-2.1.8.zip,1先建立一个HelloWorld的工程,Java运行环境要1.5以上,然后选择构建路径导入外部,jar如图,18,具体的程序开发CXF,把apache-cxf-2.1.8里面解压之后的lib下面的包全部导入进来,(我在这里是先在工程下建立了一个lib把所有的lib都导入到 了里面),19,具体的程序开发CXF,建立一个接口接口名叫HelloWold,20,具体的程序开发CXF,package test;,import javax.jws.WebService;,WebService,public interface HelloWorld ,public String sayHello(String name);,21,具体的程序开发CXF,再添加一个实现类,package test;,import javax.jws.WebService;,WebService,public class HelloWorldImpl implements HelloWorld ,public String sayHello(String name) ,System.,out.println(say hello is called);,return Hello +name;,这里接口和实现类里都有一个标注,WebService这是为了把这个类发布成webservice所要用到的在标注后还要导入,import javax.jws.WebService;,22,具体的程序开发CXF,然后我们建立一个,webservice启动的类,package test;,import org.apache.cxf.endpoint.Server;,import org.apache.cxf.jaxws.JaxWsServerFactoryBean;,public class MainServer ,public static void main(String args) ,JaxWsServerFactoryBean factory=new JaxWsServerFactoryBean();,factory.setServiceClass(HelloWorldImpl.class);/这里的是实现类而不是接口,factory.setAddress();,Server server=factory.create();,server.start();,这里的端口和后面的地址可以自己定义一下,因为,cxf自己带了一个servlet用于webservice的发布所以我们发布这个webservice就直接运行这个类就可以了,然后在浏览器中输入,就可以看到如下的页面,23,具体的程序开发CXF,24,具体的程序开发CXF,如果能看到这个,wsdl那么就是发布成功了这里我们发布的地址是可以改的,然后我们建立一个客户端,package test;,import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;,public class HelloWorldClient ,public static void main(String args) ,JaxWsProxyFactoryBean factory =,new JaxWsProxyFactoryBean();,factory.setAddress();,factory.setServiceClass(HelloWorld.,class);/接口的class,HelloWorld hello =(HelloWorld)factory.create();,System.,out.println(hello.sayHello(gzy);,25,具体的程序开发CXF,然后运行一下这个客户端的调用,就会有输出的结果:,Hello gzy,就说明运行成功,26,具体的程序开发CXF,27,具体的程序开发CXF,28,具体的程序开发CXF,29,具体的程序开发CXF,30,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!