文档章节

WebService 基础学习

gamal_zf
 gamal_zf
发布于 2017/07/20 15:42
字数 1320
阅读 3
收藏 0

一、Java中WebService规范

     JAVA 中共有三种WebService 规范,分别是JAX-WS、JAX-RS、JAXM&SAAJ(废弃)。

 

1.JAX-WS规范

 JAX-WS 的全称为Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(Java API For XML-Remote Procedure Call)目前已经被JAX-WS 规范取代。从java5开始支持JAX-WS2.0版本,Jdk1.6.0_13以后的版本支持2.1版本,jdk1.7支持2.2版本。

    采用标准SOAP(Simple Object Access Protocol) 协议传输,soap属于w3c标准。Soap协议是基于http的应用层协议,soap协议传输是xml数据。

     采用wsdl作为描述语言即webservice使用说明书,wsdl属w3c标准。

     xml是webservice的跨平台的基础,XML主要的优点在于它既与平台无关,又与厂商无关。

     XSD,W3C为webservice制定了一套传输数据类型,使用xml进行描述,即XSD(XML Schema Datatypes),任何编程语言写的webservice接口在发送数据时都要转换成webservice标准的XSD发送。

 

2.JAX-RS规范

JAX-RS 是JAVA 针对REST(Representation State Transfer)风格制定的一套Web 服务规范,由于推出的较晚,该规范(JSR 311,目前JAX-RS 的版本为1.0)并未随JDK1.6 一起发行。

支持JAX-RS服务规范的框架有:

      CXF——XFire和Celtix的合并(一个由IONA赞助的开源ESB,最初寄存在ObjectWeb上)。

     Jersey——Sun公司的JAX-RS参考实现。

     RESTEasy——JBoss的JAX-RS项目。

     Restlet——也许是最早的REST框架了,它JAX-RS之前就有了。

注:REST 是一种软件架构模式,只是一种风格,rest服务采用HTTP 做传输协议。

 

二、WebService(jax-ws)三要素

SOAP: 基于HTTP协议,采用XML格式,用来传递信息的格式。

WSDL: 用来描述如何访问具体的服务。

UDDI: 用户自己可以按UDDI标准搭建UDDI服务器,用来管理,分发,查询WebService 。其他用户可以自己注册发布WebService调用。

 

1.SOAP(通讯协议)

Simple Object Accrss Protocol,简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议,它包括四个部分:

  1. SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它,以及如何处理它们的框架;
  2. SOAP编码规则,用于表示应用程序需要使用的数据类型的实例。
  3. SOAP RPC 表示远程过程调用和应答的协定。
  4. SOAP绑定(binding),使用底层协议交换信息。

(1)请求的协议体

POST /weather HTTP/1.1

Accept: text/xml, multipart/related

Content-Type: text/xml; charset=utf-8

SOAPAction: "http://weather.itheima.com/WeatherInterface/getWeatherByCityNameRequest"

User-Agent: JAX-WS RI 2.2.4-b01

Host: 127.0.0.1:54321

Connection: keep-alive

Content-Length: 235

<?xml version="1.0" ?>

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">

       <S:Body>

             <ns2:getWeatherByCityName xmlns:ns2="http://weather.itheima.com">

                  <cityName>北京</cityName>

             </ns2:getWeatherByCityName>

       </S:Body>

</S:Envelope>

(2)响应的协议体

HTTP/1.1 200 OK

Transfer-encoding: chunked

Content-type: text/xml; charset=utf-8

Date: Fri, 09 Oct 2015 07:23:29 GMT

<?xml version="1.0" ?>

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">

         <S:Body>

                 <ns2:getWeatherByCityNameResponse xmlns:ns2="http://weather.itheima.com">

                           <WeatherInfo>今天风很大</WeatherInfo>

                 </ns2:getWeatherByCityNameResponse>

         </S:Body>

</S:Envelope>

 

2.WSDL

WSDL(Web Service Description Language),是一个用来描述Web服务(Web Service)和说明如何与Web服务通信的XML语言。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。

     image

(1)wsdl的阅读方法

是从下往上读。

每个wsdl有且只有一个Service节点。

  1. 先找Service节点
  2. Service节点中找port节点。每个port对应一个PortType。
  3. Port节点对应一binding节点。每个binding节点对应一个PortType
  4. PortType中有operation 节点就是服务的方法。
  5. operation 中有Input(参数)和output(返回值)
  6. Input(参数)和output(返回值)对应message节点
  7. Message对应element节点。Element节点对应complexType节点描述了参数及返回值的数据类型。

(2)使用注解规范wsdl

@WebService: 定义服务,在public class上边。

   targetNamespace:指定命名空间。

   name:portType的名称。

   portName:port的名称。

  serviceName:服务名称。

 

@WebResult:定义返回值。

   name:返回结果值的名称。

 

@WebParam:定义参数。

   name:指定参数的名称。

 

@WebMethod

exclude:排除指定的方法。

默认情况下,SEI实现类中所以的public方法会发布成服务方法。

如果不想把public方法发布成服务方法,需要使用@WebMethod注解。把此方法排除。在实现类中至少有一个方法发布为服务方法。

image

image

image

image

作用: 通过注解,可以更加形像的描述Web服务。对自动生成的wsdl文档进行修改,为使用者提供一个更加清晰的wsdl文档。

当修改了WebService注解之后,会影响客户端生成的代码。调用的方法名和参数名也发生了变化。

 

3.UDDI

 UDDI 是一种目录服务,通过它,企业可注册并搜索 Web services。企业将自己提供的Web Service注册在UDDI,也可以使用别的企业在UDDI注册的web service服务,从而达到资源共享。

     UDDI旨在将全球的webservcie资源进行共享,促进全球经济合作。

     但是使用webservice并不是必须使用UDDI,因为用户通过WSDL知道了web service的地址,可以直接通过WSDL调用webservice。

 

本文转载自:http://www.cnblogs.com/yangang2013/p/5708917.html

共有 人打赏支持
gamal_zf
粉丝 1
博文 20
码字总数 5930
作品 0
深圳
高级程序员
新手初识webservice-理论篇

工作中接触到了一些webservice应用,进而想整理出一些东西,给组里如我一样的毛头小伙子分享下,后来觉得在OSC一直默默潜水了快两年了,好像没留下过什么有价值的东西,就顺路记在这里吧,望...

路飞
2012/04/08
0
16
C# Web Service 学习

Your first C# Web Service http://www.codeproject.com/Articles/863/Your-first-C-Web-Service Everything About REST Web Services - What and How - Part 1 http://www.codeproject.com/......

lgxn
2014/03/23
0
0
WebService - RoadMap

Why RoadMap 由于网络带宽的发展,WebService作为分布式计算的解决方案越来越重要。如果想学习WebService,那应该首先从最高层次了解WebService的工作原理,以及技术构成。然后再往底层深化,...

xpbug
2014/04/17
0
0
学习东西总结:

一.JAVA 基础 1、JAVA并发编程 2.JAVA NIO系列 3.JVM深入了解 4.JAVA性能优化相关研究 5.JAVA7,8新特性 二、数据库 1.数据库优化研究 2.MYSQL高可用性研究 3.MYSQL源码研究 三、网络 1.HTTP...

QH_C
2016/03/25
5
0
个人对于架构设计的理解

处在待业状态最适合做的事情就是对以前的工作和学习做一个总结。 读过一些开源的架构,比如PetShop的架构,Nhibernate的架构,ibatis.net的架构。 自己写过的架构,从最早的简单三层,到面向服...

zting科技
2017/01/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

阿里云API网关使用教程

API 网关(API Gateway)提供高性能、高可用的 API 托管服务,帮助用户对外开放其部署在 ECS、容器服务等阿里云产品上的应用,提供完整的 API 发布、管理、维护生命周期管理。用户只需进行简...

mcy0425
25分钟前
4
0
解决远程登陆误按ctrl+s锁屏假死恢复

使用putty时,偶尔发生屏幕假死,不能输入等情况。 后来发现,只要数据ctrl+s,就会假死;输入ctrl+q就可以恢复过来。 很多刚从windows转移到linux上来工作的朋友,在用vi/vim编辑文件时,常常...

HJCui
28分钟前
0
0
@Transactional

事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于...

asdf08442a
32分钟前
2
0
widows下强制解除8080端口占用问题

使用win+R打开命令窗口 输入以下命令查看哪个任务占用了8080端口 netstat -ano |findstr "8080" 然后通过任务id强制关闭占用该端口的进程 tskill 10044 // 自己的试情况而定,这个ID是LISTE...

_Artisan
41分钟前
2
0
productFlavors简单实用

最近项目中,不同环境需要配置的参数越来越多,为了减少修改代码次数。研究了一下productFlavors的使用方式,总结如下 1. as3.0以上版本使用productFlavors时需要指定一个flavorDimensions,...

火云
43分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部