WebService技术详解

No.1 什么是WebService

WebService技术,能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件,就可相互交换数据或集成。

依据WebService规范实施的应用之间,无论它们所使用的语言、平台或内部协议是什么,都可以相互交换数据。

WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过Web来调用这个应用程序

WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。

WebService平台需要一套协议来实现分布式应用程序的创建。

WebService是一种跨编程语言和跨操作系统平台的远程调用技术。

No.2 WebService技术原理

XML+XSD,SOAPWSDL就是构成WebService平台的三大技术。

2.1、XML+XSD

WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么)。

XMLWebService平台中表示数据的格式。

XML除了易于建立和易于分析外,其主要的优点在于它既是平台无关的,又是厂商无关的。

XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。

XML Schema(XSD)定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。WebService平台就是用XSD来作为其数据类型系统的。

2.2、SOAP

WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。

SOAP提供了标准的RPC方法来调用WebService

SOAP协议 = HTTP协议 + XML数据格式

SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XMLXSD的,XMLSOAP的数据编码方式。

2.3、WSDL

WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方法可以调用,所以WebService务器端首先要通过一个WSDL文件来说明自己提供哪些服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。

WSDL(Web Services Description Language)是一个基于XML的语言,用于描述WebService及其函数、参数和返回值。它是WebService客户端和服务器端都能理解的标准格式。

WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。

客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。

WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:

1.注册到UDDI服务器,以便被人查找;

2.直接告诉给客户端调用者。

No.3 WebService实现方式

WebService的三种常用实现方式有:

RPC:远程过程调用方式(面向方法)

SOA:面向服务的方式(面向消息)

RESTRepresentational state transfer表述性状态转移(面向资源)

3.1、Apache Axis2 技术

Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物。Axis2不仅支持SOAP1.1SOAP1.2,还集成了非常流行的REST WebService,同时还支持SpringJSON等技术。

这些都将在后面的系列教程中讲解。在本文中主要介绍了如何使用Axis2开发一个不需要任何配置文件的WebService,并在客户端使用JavaC#调用这个WebService

3.2、Apache CXF框架

Apache CXF 是一个开源的Services框架,CXF帮助您来构建和开发Services,这些Services可以支持多种协议,比如:SOAP、POST/HTTP、RESTful HTTP CXF 大大简化了Service可以天然地和Spring进行无缝集成。

CxFCeltrixESB框架)和XFirewebserivice) 合并而成,并且捐给了apache

CxF的核心是org.apache.cxf.Bus(总线),类似于SpringApplicationContext

CXF默认是依赖于Spring的。

Apache CXF发行包中的jar,如果全部放到lib中,需要JDK1.6 及以上,否则会报JAX-WS版本不一致的问题。

CXF内置了Jetty服务器,它是servlet容器,好比tomcat

CXF特点

Spring、Servlet做了无缝对接,cxf框架里面集成了Servlet容器Jetty

支持注解的方式来发布WebService

能够显示一个WebService的服务列表

能够添加拦截器:输入拦截器、输出拦截器:

输入日志信息拦截器、输出日志拦截器、用户权限认证的拦截器

CXF与Spring集成

建立一个web项目。

准备所有jar包,将CXF_HOMElib项目下的所有jar包,全部都拷贝新项目的lib目录下.其中里面已经包含了Sring3.0jar包,其中jetty服务器的包可以不要,因为我们可以部署在tomcat服务器中。

web.xml中配置cxf的核心servlet,CXFServlet

此配置文件的作用类拦截/ws/*的所有请求,类似Struts2的过滤器。

@WebService 标记表示该接口是一个WebService服务

@WebMethod 表示表示以下方法为WebService服务中的方法,exclude=true表示该方法不被发布出去

@WebParam 表示方法中的参数

示例程序:

新建一个maven工程

添加依赖

编写实体类

编写服务接口

编写服务接口实现类

编写spring的配置

编写web.xml的配置

浏览器访问

结果

出现如下结果,则表明服务发布成功。

3.3、Jersey

Jersey RESTful WebService框架是一个开源的、产品级别的JAVA框架,支持JAX-RS API并且是一个JAX-RS(JSR 311JSR 339)的参考实现。

Jersey不仅仅是一个JAX-RS的参考实现,Jersey提供自己的API,其API继承自JAX-RS,提供更多的特性和功能以进一步简化RESTful service和客户端的开发。

@Path 用来为资源类或方法定义URI,当然除了静态URI也支持动态URI

@PathParam 用来将请求URI的一部分作为方法参数传入方法中,对URI的动态部分,可以自定义校验正则表达式,如果请求参数校验失败,容器返回404 Not Found

@GET 表明被注解的方法响应HTTP GET请求,@POST@PUT@DELETE同理

@Consumes 定义请求的媒体类型,如果不指定,则容器默认可接受任意媒体类型,容器负责确认被调用的方法可接受HTTP请求的媒体类型,否则返回415 Unsupported Media Type

@Produces 定义响应媒体类型,如果不指定,则容器默认可接受任意媒体类型,容器负责确认被调用的方法可返回HTTP请求可以接受媒体类型,否则返回406 Not Acceptable

@QueryParam 用来指定方法的参数。

@Context 将信息注入请求或响应相关的类,可注入的类有:ApplicationUriInfoRequestHttpHeadersSecurityContext

@Singleton 和 @PerRequest 默认情况下,资源类的生命周期是per-request,也就是系统会为每个匹配资源类URI的请求创建一个实例,这样的效率很低,可以对资源类使用@Singleton注解,这样在应用范围内,只会创建资源类的一个实例

示例程序:

新建一个maven工程

添加依赖

编写对外服务类

编写一个测试启动类

在浏览器中访问:

服务端打印信息:

说明:

一般情况下,我们会建一个web项目并在web.xml文件中配置一个servlet容器来处理请求,具体如下:

No.4 适用场景

1、跨防火墙通信

如果应用程序有成千上万的用户,而且分布在世界各地,那么客户端和服务器之间的通信将是一个棘手的问题。因为客户端和服务器之间通常会有防火墙或者代理服 务器。在这种情况下,使用DCOM就不是那么简单,通常也不便于把客户端程序发布到数量如此庞大的每一个用户手中。传统的做法是,选择用浏览器作为客户 端,写下一大堆ASP页面,把应用程序的中间层暴露给最终用户。这样做的结果是开发难度大,程序很难维护。如果中间层组件换成WebService的话, 就可以从用户界面直接调用中间层组件。从大多数人的经验来看,在一个用户界面和中间层有较多交互的应用程序中,使用WebService这种结构,可以节 省花在用户界面编程上20%的开发时间。

2、应用程序集成

企业级的应用程序开发者都知道,企业里经常都要把用不同语言写成的、在不同平台上运行的各种程序集成起来,而这种集成将花费很大的开发力量。应用程序经常 需要从运行在IBM主机上的程序中获取数据;或者把数据发送到主机或UNIX应用程序中去。即使在同一个平台上,不同软件厂商生产的各种软件也常常需要集成起来。通过WebService,可以很容易的集成不同结构的应用程序。

3、B2B集成

WebService集成应用程序,可以使公司内部的商务处理更加自动化。跨公司的商务交易集成通常叫做B2B集成。WebServiceB2B集成成功的关键。

通过WebService,公司可以把关键的商务应用“暴露”给指定的供应商和客户。例如,把电子下单系统和电子票系统“暴露”出来,客户就可以以电子的方式发送订单,供应商则可以以电子的方式发送原料采购票。WebService只是B2B集成的一个关键部分,还需要许多其它的部分才能实现集成。

WebService来实现B2B集成的最大好处在于可以轻易实现互操作性。只要把商务逻辑“暴露”出来,成为WebService,就可以让任何指定 的合作伙伴调用这些商务逻辑,而不管他们的系统在什么平台上运行,使用什么开发语言。这样就大大减少了花在B2B集成上的时间和成本,让许多原本无法承受EDI的中小企业也能实现B2B集成。

4、软件和数据重用

软件重用是一个很大的主题,重用的形式很多,重用的程度有大有小。最基本的形式是源代码模块或者类一级的重用,一种形式是二进制形式的组件重用。

采用WebService应用程序可以用标准的方法把功能和数据“暴露”出来,供其它应用程序使用,达到业务级重用。

·end·

转载于:https://my.oschina.net/wuyizhong/blog/1938673

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值