系列博文:

分布式.RPC调用-RMI & Hessian框架_闲猫的博客-CSDN博客

分布式.RPC-WebService三要素,三个规范, Soap协议_闲猫的博客-CSDN博客

分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_闲猫的博客-CSDN博客

分布式.RPC调用-RMI & Hessian框架_闲猫的博客-CSDN博客

分布式.RPC-WebService CXF框架_闲猫的博客-CSDN博客

分布式.RPC-WebService Restful风格实现_闲猫的博客-CSDN博客


目录

WebService三要素

WebService三规范

SOAP协议

SOAP协议简介

TCP/IP Monitor

HttpClient操作SOAP

SOAP 1.2


WebService三要素

 JAX-WS 规范  对service高度封装  ,最普遍,基于soap协议

  JAXM & SAAJ 让你实现更多的底层实现 ,使用起来比较繁琐   基于soap协议 ,实现每个细节。

 JAX-RS 规范  rest风格的webservice

WebService三规范

 SOAP协议 :简单对象访问协议 基于http

 WSDL:webservice使用说明书  网络服务描述语言  W3C

 UDDI

SOAP协议

SOAP协议简介

SOAP(Simple Object Access Protocol)简单对象访问协议。 是基于HTTP协议,使用XML作为数据传输的格式,SOAP规定了XML的格式。XML格式的数据屏蔽了不同语言和平台对对象要求的不同,这个也是WebService(基于SOAP协议)有跨语言、跨平台特点的基础。

特点:

 跨语言、跨平台

 穿透防火墙:该协议基于HTTP,防火墙对80端口是开的,所以SOAP也就搭了顺风车,直接穿透

 W3C( 万维网联盟 )制定的标准

TCP/IP Monitor

 功能:

该工具是Tcp/Ip监视器,可以抓某一次请求和响应数据,是Eclipse中插件。

 原理:

客户端请求 Tcp/Ip Monitor设定的端口,然后Tcp/Ip Monitor再请求服务器,返回的时候,服务器将数据返回给Tcp/Ip Monitor,Tcp/Ip Monitor再将数据返回给客户端。

图示如下:

 操作:

打开监听工具

制定转发规则

点击“Add..”,出现如下界面:

启动监听

点击start按钮启动

·

运行过程

补充:以下是获取的请求和响应的报文:

请求报文

响应报文

POST /member HTTP/1.1

Accept: text/xml, multipart/related

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

SOAPAction: "http://Service.itcast.cn/MemberService/getMemberRequest"

User-Agent: JAX-WS RI 2.2.4-b01

Host: localhost:54321

Connection: keep-alive

Content-Length: 198

<?xml version="1.0" ?>

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

<S:Body>

<ns2:getMember xmlns:ns2="http://Service.itcast.cn/">

<arg0>

</arg0>

</ns2:getMember>

</S:Body>

</S:Envelope>[ww1]

HTTP/1.1 200 OK

Transfer-encoding: chunked

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

Date: Mon, 29 Jun 2015 12:12:03 GMT

<?xml version="1.0" ?>

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

<S:Body>

<ns2:getMemberResponse xmlns:ns2="http://Service.itcast.cn/">

<return>

<name>赵芸</name>

<uuid>11</uuid>

</return>

</ns2:getMemberResponse>

</S:Body>

</S:Envelope>

[ww2]


[ww1]请求数据

[ww2]响应数据

HttpClient操作SOAP

 环境搭建

       创建一个java工程,然后导入所需要的jar包,包括:

commons-codec-1.6.jar

commons-logging-1.1.3.jar

httpclient-4.3.5.jar

httpcore-4.3.2.jar

 步骤:

  1. 创建客户端对象
  2. 构造请求对象(HttpGet/HttpPost,构建:创建对象、添加参数)
  3. 使用够HTTP客户端对象执行请求对象,并返回响应对象
  4. 使用工具类获取响应对象的数据

 HttpClient发送get请求

逻辑:

       创建一个Get请求对象,然后使用HTTP客户端类来执行该Get请求,返回一个HttpResponse对象,从response对象中获取结果实体,然后使用EntityUtils工具类进行解析。

Get请求只有一个地址,所以Get请求对象构造就需要一个URL地址即可。

代码:

try {

// HTTPClient 发送get请求,值设定一个url地址即可

HttpClient client [ww1] = HttpClients.createDefault();

HttpGet get [ww2] = new HttpGet("http://localhost:12345/member?wsdl");

HttpResponse response = client.execute(get)[ww3] ;

HttpEntity entity = response.getEntity();

System.out.println(EntityUtils.toString(entity, "utf-8"));

[ww4] } catch (Exception e) {

e.printStackTrace();

}


[ww1]构建客户端

[ww2]构建请求对象

[ww3]使用客户端对象执行请求

[ww4]获取并解析响应数据

 HttpClient发送post请求

逻辑:

       跟get请求不同的是构造的请求参数对象发生变化了,POST请求是将参数放在请求体中,所以在构造post请求对象是比较麻烦的,手动拼接一个soap协议的请求报文然后发送给服务器。

代码:

try {

HttpClient client [ww1] = HttpClients.createDefault();

HttpPost postRequest [ww2] = new HttpPost(

"http://localhost:12345/member?wsdl");

//设置头信息,方式参数中中文乱码

postRequest.setHeader[ww3] ("Content-type", "text/xml;charset=utf-8");

String soap = "<?xml version=\"1.0\" ?>"

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

+ "<S:Body>"

+ "<ns2:getMember xmlns:ns2=\"http://Service.itcast.cn/\">"

+ "<arg0>"+ "</arg0>" + "</ns2:getMember>" + "</S:Body>"

+ "</S:Envelope>";

//设置post请求的请求体

postRequest.setEntity(new StringEntity(soap))[ww4] ;

HttpResponse response = client.execute(postRequest)[ww5] ;

HttpEntity entity = response.getEntity();

System.out.println(EntityUtils.toString(entity, "utf-8"));

[ww6]

} catch (Exception e) {

e.printStackTrace();

}


[ww1]1.构建HTTP客户端对象

[ww2]2.1创建post请求对象

[ww3]设置头信息,方式参数中中文乱码

[ww4]设置post请求的请求体

[ww5]3. 使用够HTTP客户端对象执行请求对象,并返回响应对象

[ww6]获取并解析响应数据

发送的字符串:(上述工程中拼接的字符串)

<?xml version="1.0" ?>

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

<S:Body>

<ns2:getMember xmlns:ns2="http://Service.itcast.cn/">

<arg0>

</arg0>

</ns2:getMember>

</S:Body>

</S:Envelope>

响应报文:

<?xml version="1.0" ?>

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

<S:Body>

<ns2:getMemberResponse xmlns:ns2="http://Service.itcast.cn/">

<return>

<name>赵芸</name>

<uuid>11</uuid>

</return>

</ns2:getMemberResponse>

</S:Body>

</S:Envelope>

SOAP 1.2

 开发SOAP1.2

逻辑:

需要导入soup1.2版本的扩展包,服务类开发是需要新增注解:

@BindingType(SOAPBinding.SOAP12HTTP_BINDING)

发布服务也同SOAP1.1。区别就是一个注解和几个jar包。

1. 创建java工程 ,引入扩展包

2. 开发服务类:

import javax.jws.WebService;

import javax.xml.ws.BindingType;

import javax.xml.ws.soap.SOAPBinding;

@WebService

@BindingType(SOAPBinding.SOAP12HTTP_BINDING)[ww1]

public class Weather {

public String info(String city){

}

}


[ww1]新增的注解,表示使用的是soap1.2报文格式

3. 发布web服务 ,同1.1

 SOAP1.1和SOAP1.2对比:

SOAP1.1

SOAP1.2

请求

请求

POST /weather HTTP/1.1

Accept: text/xml, multipart/related

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

SOAPAction: "http://service.itcast.cn/Weather/infoRequest"

User-Agent: JAX-WS RI 2.2.4-b01

Host: localhost:54321

Connection: keep-alive

Content-Length: 194

<?xml version="1.0" ?>

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

<S:Body>

<ns2:info xmlns:ns2="http://service.itcast.cn/">

<arg0>北京</arg0>

</ns2:info>

</S:Body>

</S:Envelope>

POST /weather HTTP/1.1

Accept: application/soap+xml, multipart/related

Content-Type: application/soap+xml; charset=utf-8;action="http://service.itcast.cn/Weather/infoRequest"

User-Agent: JAX-WS RI 2.2.4-b01

Host: localhost:54321

Connection: keep-alive

Content-Length: 192

响应

响应

HTTP/1.1 200 OK

Transfer-encoding: chunked

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

Date: Sat, 27 Jun 2015 03:07:55 GMT

<?xml version="1.0" ?>

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

<S:Body>

<ns2:infoResponse xmlns:ns2="http://service.itcast.cn/">

<return>雷阵雨</return>

</ns2:infoResponse>

</S:Body>

</S:Envelope>

HTTP/1.1 200 OK

Transfer-encoding: chunked

Content-type: application/soap+xml; charset=utf-8

Date: Sat, 27 Jun 2015 06:45:54 GMT

<?xml version='1.0' encoding='UTF-8'?>

<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">

<S:Body>

<ns2:infoResponse xmlns:ns2="http://service.itcast.cn/">

<return>雷阵雨</return>

</ns2:infoResponse>

</S:Body>

</S:Envelope>


END

分布式.RPC-WebService三要素,三个规范, Soap协议(理解原理 才是事半功倍)相关推荐

  1. 【小白学PyTorch】4.构建模型三要素与权重初始化

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 文章目录: 1 模型三要素 2 参数初始化 3 完整运行代码 4 ...

  2. 【C 语言】指针间接赋值 ( 间接赋值三要素 | 间接赋值 使用的三种场景 )

    文章目录 一.间接赋值三要素 二.间接赋值 使用场景 1.① ② ③ 都在同一个函数中 2.① ② 在一个函数中 ③ 在另一个函数中 一.间接赋值三要素 三要素总结 : ① 定义实参和形参 ; ② 实 ...

  3. qbytearray初始化全0_【小白学PyTorch】4.构建模型三要素与权重初始化

    文章目录: 1 模型三要素 2 参数初始化 3 完整运行代码 4 尺寸计算与参数计算 这篇文章内容不多,比较基础,里面的代码块可以复制到本地进行实践,以加深理解. 喜欢的话,可以给公众号加一个星标,点 ...

  4. 【算法套路】-【递归篇】【递归三要素】

    [算法套路]-[递归篇] 文章目录 [算法套路]-[递归篇] 前言 递归三要素 前言 本文参考·[代码随想录]·大佬的二叉树:一入递归深似海,从此offer是路人,希望在写递归脑子糊涂的时候,给自己一 ...

  5. web前端开发三个阶段和三要素,学前端必备基础知识

    web前端开发三个阶段和三要素是什么?下面就跟着小编一起来看看吧! Web前端市场前景广阔,吸引了很多人涌入学习,但无论是零基础小白,亦或是想要进阶深造的程序员,前端开发三个阶段和三要素都是他们必学的 ...

  6. 浅淡Webservice、WSDL三种服务访问的方式(附案例)

    Webservice Webservice是使应用程序以与平台和编程语言无关的方式进行相互通信技术. eg:站点提供访问的数据接口:新浪微博.淘宝. 官方解释:它是一种构建应用程序的普遍模型,可以在任 ...

  7. java页面要素_Web前端入门技术之网页制作三要素

    原标题:Web前端入门技术之网页制作三要素 Web前端技术开发是由网页制作演变而来的,主要由HTML.CSS.Java三大要素组成.专业的Web前端开发入门常识也必定会包含这些内容,今日千锋教师就给我 ...

  8. 分布式事务中常见的三种解决方案

    分布式事务中常见的三种解决方案 目录 一.分布式事务前奏 二.柔性事务解决方案架构 (一).基于可靠消息的最终一致性方案概述 (二).TCC事务补偿型方案 (三).最大努力通知型 三.基于可靠消息的最 ...

  9. (Frontend Newbie) Web三要素(一)

    上一篇简单了解了Web发展的简要历史,本篇简单介绍前端开发的基本三要素:HTML.CSS.JavaScript中的HTML以及一些在开发.学习过程中易被忽视的知识点. HTML HTML全称是超文本标 ...

最新文章

  1. phpinfo查看可以解析的后缀_配置nginx,Apache支持pathinfo模式-什么是phpinfo模式
  2. SparkStreaming Exception in thread main java.lang.IllegalArgumentException xxx is not a valid
  3. 【C++】rand函数的基本使用
  4. 工作107:vue调用视频接口
  5. ReflectionZ_测试_01
  6. 如何把IDEA项目与上传到Git中
  7. linux用户修改密码
  8. Mysql binlog 日志的三种模式
  9. 【C++ 程序】 解线性方程组(Cramer法则)
  10. HF-LPX30 LPX20
  11. 多力食用油:技术赋能产品品质,健康深植品牌理念
  12. 从手机端 H5 制作来看 WEB 动画的术与道
  13. FlashBuilder精选插件
  14. 打造黑苹果(四)安装MACOS系统
  15. 计算机硬件品牌的调研报告,计算机硬件市场调查报告.doc
  16. 你的网站安全吗?ZAP应用实例
  17. Layui数据表格中使用模板引擎
  18. C语言中(a<b<c)的理解
  19. R - Boxplots(R简单制作箱形图)
  20. 毛坯新房验收注意事项

热门文章

  1. 三星android 5.0升级名单,三星可升级Android 7系统机型名单曝光
  2. 信息技术计算机老师继续教育培训心得,信息技术课教师继续教育心得体会
  3. 手机内存无法计算机,电脑内存出现故障怎么办 电脑内存常见故障解决方法【详解】...
  4. JavaScript入门基础2
  5. java毕业设计超市管理系统Mybatis+系统+数据库+调试部署
  6. Python3.X下安装Scrapy (转自鱼c论坛作者lumber2388779)
  7. 三种保存电脑本地图片方法
  8. mysql怎么加载bak文件_MySQL数据库(表)的导入导出(备份和还原)
  9. Log4net自定义信息(变量或属性或字段)存入数据库
  10. 使用Docker搭建高可用Mysql数据库集群