1.什么是WebService
webservice是一种跨编程语言和跨操作系统平台的远程调用技术。
所谓的远程调用,就是一台计算机a上的一个程序可以调用另一台计算机b上的一个对象的方法,比如:银联提供给商场的pos机刷卡系统。
什么情况下可能用到远程调用技术呢?
例如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以webservice服务的形式暴露出来,让第三方网站和程序可以调用这些服务功能,这样扩展了自己系统的市场占有率,往大的概念上吹,就是所谓的SOA(面向服务体系)应用。
所谓的跨编程语言就是服务端程序采用java语言编写,客户端程序则可以采用其他编程语言编写,反之亦然。
所谓的跨操作系统平台就是服务端程序和客户端程序可以在不同的操作系统平台上运行。
除了webservice外,常用的远程调用技术还有RMI(Remote Method Invoke)和CORBA,由于webservice的跨编程语言和跨平台的特点,因此比其他两种技术应用更为广泛,但性能略低。
2.WebService的开发应用
WebService开发可以分为服务器端开发和客户端开发两个方面: 把公司内部系统的业务方法发布成WebService服务,供远程合作单位和个人调用。(借助一些WebService框架可以很轻松地把自己的业务对象发布成WebService服务,Java方面的典型WebService框架包括:axis,xfire,cxf等,java ee服务器通常也支持发布WebService服务
3. WebService框架的底层实现原理
技术实现原理: 各类WebService框架的本质就是一个大大的Servlet,当远程调用客户端给它通过http协议发送过来soap格式的请求数据时,它分析这个数据,就知道要调用哪个java类的哪个方法,于是去查找或创建这个对象,并调用其方法,再把方法返回的结果包装成soap格式的数据,通过http响应消息回给客户端。
4.发布一个WebService:
创建一个Maven项目
导入WebService相关jar
[HTML] 纯文本查看 复制代码
org.apache.cxf
cxf-rt-ws-security
2.7.8
org.apache.cxf
cxf-api
2.7.8
org.apache.cxf
cxf-rt-frontend-jaxws
2.7.8
org.apache.cxf
cxf-rt-bindings-soap
2.7.8
org.apache.cxf
cxf-rt-transports-http
2.7.8
org.apache.cxf
cxf-rt-transports-http-jetty
2.7.8
创建三个类文件,一个接口,一个接口实现类,一个发布类
这是WebService接口,其中定义了一个sayHello(String name)的方法
记住一定要在类上加上@WebService注解
@WebMethod注解声明了这个方法是要发布出去的方法
这个类是WebService接口的实现类,写明了sayHello(String name)方法的方法体。
发布WebService接口
最后我们在服务器端运行WebServicePublish类中的main方法控制台打印出”发布webservice成功!“在浏览器中输入我们在WebServicePublish类中定义的address?wsdl(注意一定要加wsdl),浏览器显示如下,那么我们这个WebService就发布成功了。
下面,我们来看一下客户端怎么调用(这也是版本最多最杂的一步,大多数人前面都很明白,但是到了这里就直接懵逼了)
首先我们先创建一个client客户端的Maven项目,然后我们通过Win+R组合键调出cmd,在cmd中输入wsimport -s 我们这个项目的src路径 -keep 我们发布的webservice地址
然后去eclipse中刷新我们的项目,就会发现系统自动帮我们生成了许多类。
创建WebServiceClient客户端的测试类
package service;
public class WebServiceClient {
public static void main(String[] args) {
//创建一个用于产生WebServiceImpl实例工厂,WebServiceImplService.java是wsimport工具生成的
WebServiceImplService factory = new WebServiceImplService();
//通过WebServiceImpl实例工厂生成一个WebServiceImpl实例,WebService.java是wsimport工具生成的
WebService webService = factory.getWebServiceImplPort();
//调用WebService接口中的方法
String sayHello = webService.sayHello("小米");
System.out.println("调用WebService的方法返回结果:" + sayHello);
int sum = webService.sumNum(10, 11);
System.out.println("两数相加后的和:" + sum);
}
}
123456789101112131415161718192021
最后运行客户端测试类,控制台输出如下:
可以看到”你好“是服务器中写的,所以到此我们这个简单又实用的WebService服务器客户端就算完成了。
|