您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > JavaWeb_16_WebService
-0-第6章WebService-1-在面向对象编程的过程中,无论是在设计人员设计项目是,还是在程序员编写程序时,都要考虑一个问题——代码重用。在一个项目中,可以通过良好的设计来达到这个目的。如果在多个项目中都用到了类似的功能或者模块,我们所做的就是复制、粘贴。在不同的项目间,能不能实现类似同一项目中的代码重用呢?Web服务为我们提供了这种功能。Web服务就是一个应用程序,它是通过网络来描述、发布、定位及调用的。6.1web服务简介在浏览网页时,经常会看到很多网页上有关天气的信息。这些天气信息是动态的、实时的。这些天气是如何得到的呢?是网站维护人员人为输入?还是网站在全球各地都有自己的气象站点?很显然两者都不可能。其实是专业的气象站提供的一种网络服务,让Internet程序可以访问它的服务,并把天气信息返回给访问者。例如QQ首页()上的天气信息,如图6-1所示。图6-1QQ网站的天气信息当我们在购物网购买商品时,可以选择在线支付的方式,而这些在线支付将和你银行的账户进行交易。它是如何做到的呢?难道这些购物网都能访问银行的数据库系统?很显然这也是不行的,这时是由银行提供的一种网络服务,由银行来完成账目的交易。这些天气信息的获取、网络交易的实现的服务就是WebService(Web服务)。Web服务的开发分为服务器端、客户端,服务器端指的就是web服务的提供程序开发、客户端指的是web服务的调用程序开发。Web服务是为实现“基于Web无缝集成”的目标而提出的全新概念,通过Web服务能够实现不同系统之间的相互调用,从而实现系统集成的平台无关性、语言无关性。Web服务时一个应用程序,它为调用者提供一个能够通过网络进行调用的API。Web服务业遵循Web协议,如HTTP、TCP/IP、SMTP等,XML是web服务技术表示数据的基本格式,从各实现在语言、平台无关性。Web服务端、Web服务客户端、浏览器客户端的关系如图6-2所示。-2-图6-2web服务端、客户端、浏览器用户关系在WebService的实现和使用中开发人员必须了解一下三点技术。1、XMLXML是web服务在格式程序调用中传递数据的格式。2、SOAPSOAP(SimpleObjectAccessProtocol,简单对象访问协议)是封装和交换信息的默认协议,SOAP是用于交换XML编码信息的清量级协议,它可以运行在任何其他协议上。3、WSDLWSDL(WebServiceDescriptionLanguage,web服务描述语言),WebService描述语言WSDL就是用机器能阅读的方式提供的一个正式描述文档而基于XML的语言,用于描述WebService及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的。6.2Xfire简介XFire是新一代的JavaWeb服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地和Spring集成,它使得Java开发人员终于可以获得和.Net开发人员一样的开发效率。在MyEclipse6.0中自带了Xfire的开发插件,使用该插件将大大减少程序员的工作量。6.3使用MyEclipse创建web服务在MyEclipse6.0中自带了Xfire的开发插件,我们可以方便的进行web服务的客户端和服务器端开发。下面我们就以天气信息为例来实现web服务的客户端、服务器端代码,首选实现web服务的服务器端开发。6.3.1创建web服务工程打开MyEclipse6.0开发工具,创建Web服务工程。选择【File】【New】【WebService-3-Project】,出现如图6-3所示创建对话框。图6-3创建web服务工程输入工程名称和访问路径,点击【Finish】完成创建,创建好的Web服务项目结构如图6-4所示。图6-4web服务项目结构从图6-4可以看出web服务工程比普通的web应用程序多了Xfire包的引用,多了一个WebServices目录以及下面的xml文件。同时在web.xml中生成了如下配置信息:servletservlet-nameXFireServlet/servlet-name-4-servlet-classorg.codehaus.xfire.transport.http.XfireConfigurableServlet/servlet-classload-on-startup0/load-on-startup/servletservlet-mappingservlet-nameXFireServlet/servlet-nameurl-pattern/services/*/url-pattern/servlet-mapping这就是进入Xfire的web服务的核心控制Servlet配置。使用Xfire开发web服务时,一个web服务的开发步骤包括有服务接口定义、服务实现类、服务配置信息。6.3.2服务接口服务接口用于定义web服务所要提供的服务功能,该接口连同资源文件等一起将以jar包的方式提供给web服务的客户端。实现代码如例6-1所示。例6-1:web服务接口packagecom.create.service;/***天气服务接口*@authorcreate**/publicinterfaceIweather{/***索取制定城市的天气信息*@paramcity城市名*@return*/publicStringgetWeather(Stringcity);}在该接口中定义了得到天气的方法,返回相应的天气信息。6.3.3服务实现类服务实现类实现服务接口,完成web服务的业务功能。该类只提供给web服务的服务器端使用,客户端jar包中将不存在该类的字节码信息。如天气信息的实现类如例6-2所示。例6-2:服务实现类-5-packagecom.create.service;importjava.util.Random;publicclassWeatherImplimplementsIweather{publicStringgetWeather(Stringcity){System.out.println(city);Randomrand=newRandom();inti=rand.nextInt(3)+1;if(i==1){return晴;}elseif(i==2){return阴;}else{return雨;}}}在上面的实现类中我们仅仅随机的生成了几个天气,而真正的天气服务将在这里访问气象信息数据库系统,根据传入的参数查询天气信息。6.3.4服务配置前面创建的接口、类与普通的程序没有任何的本质区别,如果想要让他们一web服务的形式运行就必须在web服务工程中的services.xml中配置服务。如配置天气服务内容如例6-3所示。例6-3:天气服务配置?xmlversion=1.0encoding=UTF-8?beansxmlns=其中一个service标签表示一个web服务,也就是说在一个web服务工程中可以创建多个web-6-服务,name表示服务名,serviceClass表示服务引用接口,implementationClass表示服务实现类。6.3.5访问服务测试页面像发布web应用程序一样发布web服务程序到tomcat,并启动。通过浏览器和web服务的WSDL进行测试。当我们直接访问Xfire的核心Servlet是就可以看到该地址下提供的web服务列表。如访问()就可以看到如图6-5所示的服务列表。图6-5服务列表点击某一个列表后的[wsdl]就可以查看该服务的详细信息,如weather服务的介绍如图6-6所示。图6-6weather服务WSDL同时我们发现weather服务的测试地址是:打包web服务接口在web服务客户端的定义中,服务接口以及一些资源文件是要提供给客户端的,所以我们需要将这些内容打包在jar文件中。选择工程点击右键【Export】【Java】【JARfile】出现如图6-7所示的导出对话框,选择需要出的内容,以及保存路径。图6-7导出接口6.4web程序中web服务的使用在前面介绍了web服务的服务器端开发,web服务已创建并启动了,在web应用程序中如何调用web服务这是我们客户端需要解决的问题。6.4.1添加Xfire客户端支持使用Xfire实现web服务需要在客户端也添加Xfire的支持,添加Xfire客户端支持的步-8-骤是:选择工程点击右键【BuildPath】【AddLibraries】【MyEclipseLibraries】将出现如图6-8所示的对话框,选中图6-8中的Xfire客户端包,完成Xfire客户端支持添加。图6-8添加Xfire客户端支持6.4.2添加web服务jar包使用Xfire实现web服务还需要添加web服务提供的包含服务接口的jar文件,添加后的工程引用如图6-9所示。图6-9添加支持后的web应用程序-9-从图6-9可以看出在web应用程序中我们添加了XfireCore包、XfireHTTPClient包、以及web服务工程导出的weather.jar文件。6.4.3访问web服务当一切准备就绪之后,就可以在web应用程序中调用web服务。如天气服务的调用实现如例6-4所示。例6-4:天气服务调用在客户端使用java代码实现天气服务的访问,实现代码如下:packagecom.create.javaWeb.ch15;importorg.codehaus.xfire.XFire;importorg.codehaus.xfire.XFireFactory;importorg.codehaus.xfire.client.XFireProxyFactory;importorg.codehaus.xfire.service.Service;importorg.codehaus.xfire.service.binding.ObjectServiceFactory;importcom.create.service.Iweather;publicclassWeather{publicstaticStringgetWeather(Stringcity){StringstrWea=null;//创建服务源数据Servicemodel=null;model=newObjectServiceFactory().create(Iweather.class);//创建服务代理XFirexf=XFireFactory.newInstance().getXFire();XFireProxyFactoryxpf=newXFireProxyFactory(xf);Stringurl==null;try{//调用服务wet=(Iweather)xpf.cr
本文标题:JavaWeb_16_WebService
链接地址:https://www.777doc.com/doc-2880683 .html