什么是webservice?
1.它是基于web的服务:服务器端整出一些资源让客户端应用访问。
2.它是一个跨语言、跨平台的规范,让不同语言的应用可以相互通信。
我们经常在一些网站上会看到有天气预报的展示信息,那么这些信息怎么来的呢?
天气预报的原始信息都在气象中心,气象中心的管理系统将收集的天气信息暴露出来(通过webservice server),然后各大站点的应用就去调用它们的天气信息并以不同的样式去展示(webservice Client)。
各网站提供了天气预报的功能,但其实它们什么也没有做,只是简单的调用了气象中心服务器上的一段代码而已。
典型场景
我们在淘宝上购买东西之后,可以查看物流信息,那么这个物流信息怎么来的呢?淘宝网只负责买东西,这个物流信息是第三方物流公司提供的,淘宝网仅仅是从物流管理系统里拿到对应信息去做展示。
这时候,拿数据就需要跨平台甚至跨语言调用了(物流管理系统的语言不一定跟淘宝相同)。
webservice几个重要术语
WSDL
webservice定义语言。
1.对应一种类型的文件.wsdl
2.定义了webservice的服务端与客户端应用交互传递请求和响应数据的格式和方式。
3.一个webservice对应一个唯一的wsdl文档。
SOAP
简单对象访问协议。
1.是一种简单的、基于HTTP和XML的协议,用于在web上交换结构化的数据。
2.soap消息:请求消息和响应消息。
3.HTTP+XML片段。
SEI
webservice的终端接口。
1.webservice服务端用来处理请求的接口。
CXF(Celtix+XFire)
一个apache用于开发webservice服务端和客户端的框架。
webservice开发-服务端
1》编写服务端接口
/**
* SEI
*/
@WebService
public interface HelloWS {
@WebMethod
public String sayHello(String name);
}
2》编写实现类
/**
* SEI
*/
@WebService
public class HelloWSImpl implements HelloWS {
public String sayHello(String name) {
System.out.println("server sayHello()"+name);
return "Hello "+name;
}
}
3》对外发布
/**
* webservice发布
*/
public class ServerPublish {
public static void main(String[] args) {
//本机的ip地址 后面的随便命名,尽可能通俗易懂
String address="http://192.168.3.103:8089/webservice_server/hellows";
Endpoint.publish(address,new HelloWSImpl());
System.out.println("webservice发布成功...");
}
}
4》访问服务地址
先启动服务端代码
服务地址:http://192.168.3.103:8089/webservice_server/hellows发布成功后,在地址后面拼接“?wsdl”,就可以在浏览器进行访问了。
webservice开发-客户端
1》拿到服务端对外发布的webservice接口地址
这里的地址为:http://192.168.3.103:8089/webservice_server/hellows?wsdl
2》客户端根据服务地址,生成对应代码
生成方式1: wsimport -keep + 服务地址
在命令行输入:(自己定位需要生成的项目路径下)
wsimport -keep http://192.168.3.103:8089/webservice_server/hellows?wsdl
生成方式2: wsimport -keep + xxx.wsdl
在项目路径下创建一个后缀名为wdsl的文件,我这里的文件名为hellows.wsdl。
将服务地址里的内容复制到hellows.wsdl文件中。
3》客户端正式调用服务端代码
/**
* 客户端调用服务端代码
*/
public class ClientTest {
public static void main(String[] args) {
HelloWSImplService factory=new HelloWSImplService();
HelloWSImpl helloWS=factory.getHelloWSImplPort();
System.out.println(helloWS.getClass());//产生代理对象class com.sun.proxy.$Proxy32
String result=helloWS.sayHello("taofut");
System.out.println("client "+result);
}
}
//执行结果:
class com.sun.proxy.$Proxy32
client Hello taofut