Web service 的入门

Web service不是一种框架,甚至不是一种技术, 而是一种跨平台跨语言的规范规范。

 

JNI是什么,就是java调用其他的语言吗?和soap是什么关系

 

Web service记住解决:

1)远程调用

2)跨平台调用

3)快语言调用

 

解决的问题:

不同平台、不同的语言编写的应用之间如何相互调用?

 

 

Web service 实际中的用途:

1、           同一公司的新、旧系统的整合。

Linux平台上的java调用window上的c#语言。

 

2、           不同公司的业务整合

业务的整合就要带来,不同公司的系统整合。

不同公司的系统可能存在平台不同、语言不同的问题。

3、           内容聚合

一个应用,eg:需要提供、天气预报,股票行情、黄金行情等等。

需要调用大量不同的平台,不同语言编写的应用的方法。

 

CXF

       Axis(apache)——> Axis 2(Apache)

       XFire——> CXF(XFire _Celtrix)即为两个框架

 

SOA(面向服务的架构)

Servce1+service2 +service3 ————所有组成都是“即插即用”

IBM 提倡的SOA架构:希望以“组装电脑”的方式开发软件。

1、           各种提供服务的组件(web service)

2、           企业服务总线(enterprise service bus  ——> ESB )

cxf 是SOA框架。也是基于Apache



web service的入门:基本的准备:

1)jdk的安装+ eclipse的开发环境。

2)cxf的安装和配置环境,同样讲bin目录配置到path上面。

eg:C:\apache-cxf-3.1.2\bin 将这个目录配置到path上,看是否成功不?直接将该目录下的一个命令输入dos中查看即可:


可以看到有相应的信息输出,就是我们的命令缺少参数而已,表明可以执行这个命令,已经成功。(注意不要配置jdk太旧的,否则会显示错误问题,最好是1.7以及以上的)



配置好环境之后,我们就开发了,环境为eclipse:

1、先导入包:看到下面的框架,也就是我们需要导入的包,导入报的基本步骤是:



右键 build path ———> configure buld path ——> 点击红色的框内,如果没有相应的文件夹,需要创建文件夹,然后到cxf安装的路径下的lib下添加相应的框架。


也就是基本能够完成了必要的框架的添加。


服务器端的代码:


先定义一个借口:Hello World(注意添加@Web Service)

package org.fkjava.cxf.ws;

import javax.jws.WebService;

@WebService
public interface HelloWorld {
	String sayHi(String name);
}

然后实现这个借口:(这里同样是需要实现:
@WebService(endpointInterface="org.fkjava.cxf.ws.HelloWorld", serviceName="HelloWorldWs")这个可以查阅一下文档。

package org.fkjava.cxf.ws.impl;
import java.util.Date;
import javax.jws.WebService;
import org.fkjava.cxf.ws.HelloWorld;

@WebService(endpointInterface="org.fkjava.cxf.ws.HelloWorld", serviceName="HelloWorldWs")
public class HelloWorldWs implements HelloWorld {
	@Override
	public String sayHi(String name) {	
		return name+",您好"+"现在时间是:"+ new Date();
	}
}

上面的两个方法表明方法已经搭建好了:

我们就是讲服务器暴露出去:

代码如下:

package lee;

import javax.xml.ws.Endpoint;
import org.fkjava.cxf.ws.HelloWorld;
import org.fkjava.cxf.ws.impl.HelloWorldWs;

public class ServerMain {

	public static void main(String[] args) {

		HelloWorld ws = new HelloWorldWs();

		//调用Endpoint的publish方法发布web service 第一个参数为ip地址 ,第二v参数就是服务的提供者
		Endpoint.publish("http://172.31.72.68/linyu", ws);
		
		System.out.println("server暴露成功");
		
	}
}

可以看到我暴露的地址:



访问看到这个页面,就说明已经成功了。


 总结:

使用cxf开发服务器端server:(cxf中内置一个jetty web服务器)

每一个webService组件需要2个部分,接口和实现

(1)   开发一个web service业务接口,该接口需要WebService修饰

(2)   开发一个web service实现类,实现类也需要用@webservice修饰

(3)   发布webservice ,需要添加相应的框架。



下面是客户端的开发:

进入客户端的目录,然后输入命令:wsdl2java  http请求的地址,生成相应的代码,然后将目录拷贝到客户端上。


倒入生成文件的项目之后:

可以看到如下的情况:



上面的情况是:自动生成除了lee文件夹下面的,全部都是更具http生成的文件,然后调用共方法,就可以方法了。

eg:Ws_Client的方法

代码如下:

package lee;

import org.fkjava.cxf.ws.HelloWorld;
import org.fkjava.cxf.ws.impl.HelloWorldWs;

public class ClientMain {
	public static void main(String[] args) {
		HelloWorldWs factory = new HelloWorldWs();	
		HelloWorld hw = factory.getHelloWorldWsPort();	
		System.out.println(hw.sayHi("cocoa"));
	}
}


客户端总结:

使用cxf开发web Service客户端 Client :

调用cxf提供的wsdl2java工具,根据wsdl文档生成相应的java代码。

(wsdl(web service definition language)是一个描述可以操作的文档)

进入客户端文件夹所在的目录下,输入wsdl2java 和网址名

任何语言实现了web service,都需要提供,并暴露wsdl文档(其实就是soap)。

(1)   找到wsdl2java所生成的类中,一个继承service的类

(2)   调用service子类的实例的getXXXport方法,返回远程web service代理。



相应的列表继续可以查看视频:链接:

http://www.ucai.cn/index.php?app=fullstack&mod=Train&act=show&cid=123&sid=3692&chid=6782


补充知识:

SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。

什么是 SOAP?
SOAP 指简易对象访问协议
SOAP 是一种通信协议
SOAP 用于应用程序之间的通信
SOAP 是一种用于发送消息的格式
SOAP 被设计用来通过因特网进行通信
SOAP 独立于平台
SOAP 独立于语言
SOAP 基于 XML
SOAP 很简单并可扩展
SOAP 允许您绕过防火墙

(web的两种协议)
Web服务技术就有SOAP(Simple Object Access Protocol,简单对象访问协议)和REST(Representational State Transfer,表示性状态转移)这两种方案。


REST的优势是:开发简单、只需依托现有Web基础设施.
一种采用标准URI进行调用的方案.
只要是支持HTTP/HTTPS的客户端/服务器就支持它.

相对REST而言,SOAP 1.2多出一些开销
带来的一些好处:
1)SOAP信封(envelope)是基于XML的,它定义了消息里有什么以及如何处理它;
2)一套用于数据类型的编码规则;
3)过程调用和响应的规划。
SOAP信封由传输协议(HTTP/HTTPS)发出,RPC(Remote Procedure Call,远程过程调用)得到执行,然后一个XML文档随SOAP信封返回。


基于“通用”传输协议是SOAP的一个优点。REST目前基于HTTP/HTTPS;而SOAP可支持任何传输协议,从HTTP/HTTPS到SMTP(Simple Mail Transfer Protocol,简单邮件传送协议),甚至JMS(Java Messaging Service,Java消息传递服务)。

缺点:xml冗长且解析费时。

REST的适用场合包括:  ——————- 大企业可能都是使用SOAP技术
1)有限的带宽和资源 返回结构可以是任何格式。(格式自由)
由于REST采用标准的GET、PUT、POST和DELETE动词,因此可被任何浏览器所支持。(http网络的操作)
REST还可以使用为目前大多数浏览器支持的XMLHttpRequest对象,这为AJAX增色不少。(Ajax的使用)
2)完全无状态的操作 对于那些需多步执行的操作,REST并非最佳选择,采用SOAP更合适。
但是,如果你需要无状态的CRUD(Create/Read/Update/Delete,创建/读取/更新/删除)操作,那么应采用REST。
(无状态的CRUD操作)
3)缓存考虑 若要利用无状态操作的特性,使得信息可被缓存,那么REST是很好的选择。(缓存上面)



  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值