一、---------------------------------介绍--------------------------------------------------java
(1)远程调用:一个系统远程调用另外一个系统的服务,已获取远程系统的业务数据。web
(2)为何使用:基于安全性的考虑,通常企业不会开放本身的数据库,只能使用远程调用技术。数据库
2----------------------- Webservice是如何实现远程调用?三要素在webservice的做用?-----------------------------------编程
(1)Webservice原理:webservice是一种使用http传输的SOAP协议的数据的远程调用技术。安全
(2) WSDL做用:webservice服务端的使用说明书。(Web Service Description Language)ide
(3)SOAP做用:规范XML标签。工具
(4) UDDI:提供webservice服务端的搜索和注册功能。性能
注意事项:开发工具
3----------------------------Webservice入门程序--------------------------------------------------测试
(1) 服务端
第一步:建立SEI(Service Endpoint Interface)接口,本质就是Java接口
public interface WeatherInterface {
public String queryWeather(String Name);
}
l 第二步:建立SEI实现类
@WebService
public class WeatherInterfaceImpl implements WeatherInterface {
@Override
public String queryWeather(String Name) {
System.out.println("from client..."+Name);
String weather = "晴";
return weather;
}
}
l 第三步:发布服务
public class WeatherServer {
public static void main(String[] args) {
//用Endpoint类的publish方法发布服务
//端口号建议不要过短,容易被系统占用;不要太长,太长不支持
Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherInterfaceImpl());
}
}
l第四步:测试服务是否发布成功,经过阅读服务端的使用说明书,肯定关键元素存在(类/方法/参数等),表示服务发布成功
注意:
l第一步:在实现类上加入以下注解
@BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
l第二步:引入第三方插件的jar包(jaxws-ri-2.2.8)
第三步:从新启动服务端
(2)客户端(好几种方法实现)
开发步骤:
第一步:wsimport命令生成客户端代码。
wsimport -s . http://127.0.0.1:12345/weather?wsdl --------------------------若是你的开发工具是IDEA能够直接使用工具,里面有,能够百度一下。
第二步:建立服务视图,服务视图名的类从service标签的name属性获取
第三步:经过服务视图获取对应服务实现类的实例,服务实现类的名称从portType的name属性获取
第四步:调用查询方法,方法名从operation下的name属性获取
public class WeatherClient {
public static void main(String[] args) {
//建立服务视图
WeatherInterfaceImplService weatherInterfaceImplService = new WeatherInterfaceImplService();
//获取服务实现类的实例
String weather = weatherInterfaceImpl.queryWeather("北京");
System.out.println(weather);
}
}
5-------------------------- Webservice优缺点--------------------------
优势:
缺点:
6----------------------------使用------------------------------------
适用场景:
不适用场景: