关于webservice也只是刚刚入门,在这里记录下学习的过程!!!
一、首先,要学习webservice,就要搞清楚它的用途
1.用于新旧系统之间的数据交互
2.用于从一些提供数据资源的站点获取数据
3.这点也是1的一个解释,不同编程语言实现的系统之间的数据交互
二、webservice实现的原理,其实很简单,就是http+xml
通过http协议来传递xml数据,也就是我们所说的SOAP(简单对象访问协议)协议。
三、我觉得webservice最主要的内容是对wsdl文档的理解
所谓wsdl就是webservice 定义语言,是对服务器端提供的数据格式的规范,客户端根绝wsdl文档可以实现与服务器端的交互;
四、现在先来做一个最简单的demo,通过这个demo简单了解一下webservice的一些具体细节
1.创建java工程,创建一个服务器端接口WsServer
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public interface WsServer {
@WebMethod
public String sayHello(String name);
}
2.创建WsServer的实现
import com.cxf.server.WsServer;
public class WsServerImpl implements WsServer {
@Override
public String sayHello(String name) {
// TODO Auto-generated method stub
System.out.println("Hello "+name);
return name;
}
}
3.发布webservice
public static void main(String[] args) {
Endpoint publish = Endpoint.publish("http://192.168.27.57:8080/webservice", new WsServerImpl());
}
当发不完之后,在浏览器中输入http://192.168.27.57:8080/webservice?wsdl可以看到生成的wsdl文档,下面就需要根据wsdl文档生成客户端代码,向客户端发送请求并获得相应
4.生成客户端代码,生成客户端代码的时候可以使用jdk中的wsimport 命令 ,具体做法如下:
创建一个客户端项目,然后进入dos窗口,进入到客户端项目的src目录下 执行
wsimport -keep http://192.168.27.57:8080/webservice?wsdl 这个命令
就可以生成客户端代码,刷新src目录就可以了,然后开始写客户端访问webservice服务端代码
5.客户端访问webservice服务端代码:
import com.cxf.server.impl.WsServer;
import com.cxf.server.impl.WsServerImplService;
public class ClientTest {
public static void main(String[] args) {
WsServerImplService wsserver= new WsServerImplService();
WsServer wsServerImplPort = wsserver.getWsServerImplPort();
System.out.println(wsServerImplPort.sayHello("jack!"));
}
}
说明: 这个访问服务端的代码是根据wsdl文件写的,当webservice发布成功之后在浏览器中看到的wsdl文件如下:(这个是在cxf webservice的一个框架 生成的wsdl文件与jdk直接生成的wsdl文档会有所不同)
<wsdl:definitions name="WsServerImplService" targetNamespace="http://impl.server.cxf.com/">
<wsdl:import location="http://192.168.27.57:8080/webservice?wsdl=WsServer.wsdl" namespace="http://server.cxf.com/"> </wsdl:import>
<wsdl:binding name="WsServerImplServiceSoapBinding" type="ns1:WsServer">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="sayHello">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="sayHello"><soap:body use="literal"/></wsdl:input>
<wsdl:output name="sayHelloResponse">
<soap:body use="literal"/></wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="WsServerImplService">
<wsdl:port binding="tns:WsServerImplServiceSoapBinding" name="WsServerImplPort">
<soap:address location="http://192.168.27.57:8080/webservice"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
在客户端要创建的服务对象名字,与wsdl文件中的service标签的name属性的值一致,然后通过webservice对象可以得到通信对象,之后就可以调用webservice中的相应的方法,实现以webservice后台程序的交互了。
关于wsdl文档的说明和其它的内容以后有时间再说吧,先记录这些