WebService怎么理解和JDK1.4下使用WebService

来源:互联网 发布:部落冲突天鹰升级数据 编辑:程序博客网 时间:2024/06/05 08:25

        由于项目需要,必须使用WebService进行接口数据交换。于是百度了很多有关的信息,挑选了一些解释的非常好的解释:

        WebService是一种跨编程语言和跨操作系统平台的远程调用技术。所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法。

        WSDL:

        好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。 WebService也一样,WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。

        WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述WebService及其函数、参数和返回值。它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。

       WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。

摘自:http://blog.csdn.net/wooshn/article/details/8069087/  (理解WebService,推荐)

 

        开始没有接触过WebService,只知道它是用来交换数据的,于是就我就想,既然是数据交换,

        为什么不使用json?

        为什么不使用servlet?

        为什么不使用其他的技术? 

        后来在网上又找到了一篇很好的帖子 http://www.iteye.com/topic/1135747(创建一个简单的WebService实例)

        动手做了一个简单的WebService,后来发现WebService确实是个强大的东西。我所理解的如下:

        A和B在不同的地方开发,而B需要调用A的方法向A发送数据,于是A先定义了一个规范文件,格式为wsdl,通过这个wsdl告诉B:如果你需要调用我的方法就需要先获得我的代理,然后调用指定的方法,这个方法的返回值和参数在wsdl中都告诉你了。B知道这个wsdl之后,根据这个wsdl去查看怎么获取代理端口,怎么调用方法,需要传什么参数,有什么返回值。就这样B就能成功得调用A的方法,并且成功通讯了。

        其实我感觉和post类似,只不过更加规范,对于A来说编程更加简单了。


        以上是对WebService的理解,但是这些都不是重点!!!

        由于项目的特殊需求,开发环境只能使用JDK1.4,不能使用注解,而刚刚的方法必须要使用到注解,于是又去网上找各种方法,解决方法就是使用各种框架,感觉好复杂,而不用框架都不可以成功。。。。项目的关键步骤是获取代理端口,突然发现了一个神器:WSDL2JAVA,几年前用java开发以及调用webservice服务都是比较复杂的事情,但现在已经变得很简单。Axis已经为我们做好了一切,我们只需要使用它的工具方法生成我们自己想要的webservice服务即可。这里只先讲一下通过WSDL描述,来生成java类的方法。

        使用方法:

        1、下载WSDL2JAVA.rar包,其中包含activation.jar,axis-ant.jar,axis.jar,commons-discovery-0.2.jar,commons-logging-1.0.4.jar,jaxrpc.jar,log4j-1.2.8.jar,mail.jar,saaj.jar,wsdl4j-1.5.1.jar。

        2、解压之后,编辑(包名,输出路径,wsdl)参数并运行WSDL2Java(URL).bat或者WSDL2Java(file).bat后,将在source中生成WebService客户端代码。

        3、直接使用生成的代码调用WebService服务即可。

        (工具下载地址:http://download.csdn.net/detail/a445849497/9579773)

 

        将生成的java文件导入到项目里面然后直接调用

        // 建立本机到服务器的连接        XXXX_Service gtService = new XXXX_ServiceLocator();        // 获得端口和代理        XXX_PortType client = gtService.getXXXXServicePort();        // 调用指定的方法        result = client.XXXX(data);

        以上几个步骤就能成功让B调用A的方法了。


        接下来让我们来做一个实例:

        测试wsdl为一个查询天气的接口:

        http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl

        目的:调用这个接口的函数,获取天气信息。

        步骤:我们可以查看到这个接口对应的函数getWeatherbyCityName

        这个wsdl里面已经对这个方法有了说明,如果不看说明的话,我们可以找到下图,就可以知道它需要一个String类型的参数theCityName


        下面我们开始使用wsdl2java工具

        1.修改URL.bat里面的内容。

 

        2.生成java文件


        3.在MyEclipse里面建一个工程,并将这个文件拷进去。


        4.有很多错误,那是因为我们没有导包,我们把lib下的包全部导入工程


        5.是不是很兴奋,一个错误都没有了,然后我们再新建一个测试类


        6.编写测试类,并成功调用。




        总结:

        为什么要学习web service?

        大多数对外接口会实现web service方法而不是http方法,如果你不会,那就没有办法对接。

        web service相对http (post/get)有好处吗?

        1.接口中实现的方法和要求参数一目了然

        2.不用担心大小写问题

        3.不用担心中文urlencode问题

        4.代码中不用多次声明认证(账号,密码)参数

        5.传递参数可以为数组,对象等...

        web service相对http(post/get)快吗?

        由于要进行xml解析,速度可能会有所降低。

        web service 可以被http(post/get)替代吗?

        完全可以,而且现在的开放平台都是用的HTTP(post/get)实现的。

        摘自:http://my.oschina.net/u/1757458/blog/365588   (WebService和Http的对比)

 

        推荐 http://blog.csdn.net/zhuizhuziwo/article/details/8153327

 


0 0
原创粉丝点击