前言
正式进入web service的学习!虽然之前曾经接触过相关的只是的,但是并没有很好的吸收和整理,最初的印象只是觉得这个跟网站相关;可以说一提到网站就没有什么兴趣。但是正是进入java学习之后,对什么都要重拾心态;尽管自己学的烂,但是还要认真起来。一刻嗖!!!!!!
在进入正题之前先确定一下学习路线:是什么?——怎么用?——有更好的方案吗?沿着这条路线,可以一步步的向下探。
一、什么是web service
最初的印象就是网站,所以基本算是从头学。从用途上来讲,网络的目的就是提供服务,web service的目的就是将开发人员的服务发布到网上,并且可以实现服务的远程调用。这里可以分为两个部分:第一部分:发布,就是开发人员或者是开发商将相关的网络服务作为一种公开的内容发布到互联网上。和将电影、网页等资源上传到网站上优点类似,但最主要的区别就是这种服务的对象比较有意思。传统网页服务的对象就是一个个浏览器,但是web的服务可以是多种多样的,但同时采取了合适的手段让使用者没有感觉到任何的差异。
第二部分就是远程调用。可以直接说,在网络上面基本上所有的服务都是远程的。远程调用是针对开发人员来讲的。对于使用者来说就相当于获取到了某种服务。比如说是天气预报的服务,或者是火车的时刻表等。
二、更细节的理解
1、web服务的特点面向多种或复杂或简单的操作环境。即能够屏蔽各种操作系统的差异性。这一点很重要。
2、一般来说各种服务之间是相对独立了,是松耦合的。比如微信的支付和腾讯的游戏之间,微信的支付服务不一定只面向腾讯产品产品,面向的还有大众。
3、服务之间交互通讯必须是遵循协议的。主要目的就是让各种操作系统或者平台都能够享受服务。
三、webservice的技术实现
这里先不讲具体实现,先理解技术实现。
网络服务都是通过网络进行的,而网络的通讯协议最重要的就是http协议,(这个好像要被更新为https了)。主要是因为这个协议的内容都采用了相对固定的格式。其次在内容传输上采用了可扩展标记文本XML。正是基于这两种技术,实现了web服务的无差异化。主要在于:首先能够上网的设备都必然支持http,其次xml文件能够实现屏蔽不同编程语言的差别。
正是因为此,可以说http和XML就是web service的底层技术基础。
但是设备通讯协议必须是一种可以屏蔽所有操作系统差异的协议,让所有的编程语言遵守。这就是SOAP标准通讯协议。实质就是利用http传输XML文档。
关键字:WSDL,web service的定义语言,主要描述web服务的相关信息。这个文档可以通过 http地址?wsdl来访问查看。
四、一个简单的具体实现。
分为两个部分:1、服务端的编程2、客户端的编程
1、服务端的编程
①定义接口并定义实现
import javax.jws.WebService;
@WebService(serviceName="Server")//这个是使用标注定义服务名
public interface ServerService {
public void say(String name);
}
import javax.jws.WebService;
@WebService( serviceName="server",portName="say",endpointInterface="com.baizhi.server.ServerService")
public class ServerServiceImple implements ServerService {
@Override
public void say(String name) {
// TODO Auto-generated method stub
System.out.println("Welcome "+name+" join");
}
}
②发布服务
public class PublicServer {
/**
* publish有两个参数,一个是访问地址,另外一个是实现类对象
*/
public static void main(String[] args) {
Endpoint.publish("http://localhost:1234/hello", new ServerServiceImple());
}
}
③运行测试
2、客户端编程
①编译并获取对应的服务实现
并将编译生成的包以及java文件全部粘到自己的包中
②调用服务
public class UserServie {
public static void main(String[] args) throws MalformedURLException {
/* ServerServiceImpleService serverServiceImpleService = new ServerServiceImpleService();//这个是根据文档的service-name拿到的名字
ServerServiceImple port = serverServiceImpleService.getPort(ServerServiceImple.class);//这个是根据文档中的port-Type来写的
port.say("susn");*/
URL url = new URL("http://localhost:1234/hello?wsdl");//获取wsdl文档的URL
QName qName = new QName("http://server.baizhi.com/","server");
Service service = Service.create(url, qName);//根据文档和服务名创建服务对象
QName qName2 = new QName("http://server.baizhi.com/","say");//根据端口名和命名空间穿件端口的qname
ServerService port = service.getPort(qName2,ServerService.class);
port.say("sus");//调用服务
}
}