webService简介
首先给大家介绍一下webservice,简单来说webService就是一种跨编程语言和跨操作系统的远程调用技术,通过webService规范实施的应用之间,就是无论所使用的语言或者协议是什么,都可以交换数据,这里给大家介绍一下不对接esb的,以前在银行用webservice的时候,服务端、客户端都得先向esb申请注册。
给大家先说个大体逻辑哈。比如两个系统对接,我们系统需要接过另一个系统的数据,并以后自己维护,但是维护的数据还要同步到另一个系统。
这样的话,另一个系统是不是就要作为服务端,我们系统作为客户端,当我们系统维护完数据的时候调服务端的接口,把数据推送给另一个系统,就比如我们调百度的接口(肯定我们是客户端,百度是服务端的)
大家先把客户端和服务端区分清楚。
WebService主要是由三大技术构成(xml,soap,wsdl)
xml: xml就不用说了把,一种标记语言,webService主要用它来封装数据的。
soap:一种简单的对象访问协议,WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议规定的。
WSDL: webService服务器端到最后都会生成一个WSDL文件,然后说明自己有啥服务可以对外调用,客户端拿着服务端生成的WSDL文件,来生成代码,然后调用客户端的接口。
***WebService交互的过程***就是,WebService遵循SOAP协议通过XML封装数据,然后由Http协议来传输数据。
给大家举个实例哈
我们来实现一个天气系统的案例,客户端发送城市名称,服务器端回应相应的天气。
服务端哈
1. 编写SEI(Service Endpoint Interface),SEI在webservice中称为portType,在java中就是普通接口
public interface WeatherService {
public String queryWeather(String cityName);
}```
写完接口是不是得写实现
2. 编写SEI实现类,此类作为webservice提供服务类
@WebService //@WebService表示该类是一个服务类,需要发布其中的public的方法
public class WeatherServiceImpl implements WeatherService {
@Override
public String queryWeather(String cityName) {
System.out.println("获取城市名"+cityName);
String weather="晴";
return weather;
}
}
3. 第三步:发布服务,Endpoint类发布服务,publish方法,两个参数:1.服务地址;2.服务实现类
public class WeatherServer {
public static void main(String[] args) {
//发布服务用的
**Endpoint.publish("http://127.0.0.1:8888/weather", new WeatherServiceImpl());**
}
}
4.然后你的地址加上?WSDL 去看看发布成功没只要输上能拿到就说明发布成功了
客户端
首先哈,拿到服务端的WSDL文件,可以通过cmd敲命令生成项目
wsimport -s . http://127.0.0.1:8888/weather?wsdl
然后开始干代码,总的来说就是调用服务端的接口,咱往里面传参数
2.编写客户端
public class WeatherClient {
public static void main(String[] args) {
//创建服务视图,视图是从wsdl文件的service标签的name属性获取
WeatherServiceImplService weatherServiceImplService=new WeatherServiceImplService ();
//获取服务实现类,实现类从wsdl文件的portType的name属性获取
WeatherServiceImpl weatherServiceImpl=weatherServiceImplService.getPort(WeatherServiceImpl.class);
//获取查询方法,从portType的operation标签获取
String weather=weatherServiceImpl.queryWeather("北京");
System.out.println(weather);
}
}
这样就OK啦啦啦啦