分布式.RPC-WebService三要素,三个规范, Soap协议(理解原理 才是事半功倍)
系列博文:
分布式.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
步骤:
- 创建客户端对象
- 构造请求对象(HttpGet/HttpPost,构建:创建对象、添加参数)
- 使用够HTTP客户端对象执行请求对象,并返回响应对象
- 使用工具类获取响应对象的数据
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协议(理解原理 才是事半功倍)相关推荐
- 【小白学PyTorch】4.构建模型三要素与权重初始化
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 文章目录: 1 模型三要素 2 参数初始化 3 完整运行代码 4 ...
- 【C 语言】指针间接赋值 ( 间接赋值三要素 | 间接赋值 使用的三种场景 )
文章目录 一.间接赋值三要素 二.间接赋值 使用场景 1.① ② ③ 都在同一个函数中 2.① ② 在一个函数中 ③ 在另一个函数中 一.间接赋值三要素 三要素总结 : ① 定义实参和形参 ; ② 实 ...
- qbytearray初始化全0_【小白学PyTorch】4.构建模型三要素与权重初始化
文章目录: 1 模型三要素 2 参数初始化 3 完整运行代码 4 尺寸计算与参数计算 这篇文章内容不多,比较基础,里面的代码块可以复制到本地进行实践,以加深理解. 喜欢的话,可以给公众号加一个星标,点 ...
- 【算法套路】-【递归篇】【递归三要素】
[算法套路]-[递归篇] 文章目录 [算法套路]-[递归篇] 前言 递归三要素 前言 本文参考·[代码随想录]·大佬的二叉树:一入递归深似海,从此offer是路人,希望在写递归脑子糊涂的时候,给自己一 ...
- web前端开发三个阶段和三要素,学前端必备基础知识
web前端开发三个阶段和三要素是什么?下面就跟着小编一起来看看吧! Web前端市场前景广阔,吸引了很多人涌入学习,但无论是零基础小白,亦或是想要进阶深造的程序员,前端开发三个阶段和三要素都是他们必学的 ...
- 浅淡Webservice、WSDL三种服务访问的方式(附案例)
Webservice Webservice是使应用程序以与平台和编程语言无关的方式进行相互通信技术. eg:站点提供访问的数据接口:新浪微博.淘宝. 官方解释:它是一种构建应用程序的普遍模型,可以在任 ...
- java页面要素_Web前端入门技术之网页制作三要素
原标题:Web前端入门技术之网页制作三要素 Web前端技术开发是由网页制作演变而来的,主要由HTML.CSS.Java三大要素组成.专业的Web前端开发入门常识也必定会包含这些内容,今日千锋教师就给我 ...
- 分布式事务中常见的三种解决方案
分布式事务中常见的三种解决方案 目录 一.分布式事务前奏 二.柔性事务解决方案架构 (一).基于可靠消息的最终一致性方案概述 (二).TCC事务补偿型方案 (三).最大努力通知型 三.基于可靠消息的最 ...
- (Frontend Newbie) Web三要素(一)
上一篇简单了解了Web发展的简要历史,本篇简单介绍前端开发的基本三要素:HTML.CSS.JavaScript中的HTML以及一些在开发.学习过程中易被忽视的知识点. HTML HTML全称是超文本标 ...
最新文章
- phpinfo查看可以解析的后缀_配置nginx,Apache支持pathinfo模式-什么是phpinfo模式
- SparkStreaming Exception in thread main java.lang.IllegalArgumentException xxx is not a valid
- 【C++】rand函数的基本使用
- 工作107:vue调用视频接口
- ReflectionZ_测试_01
- 如何把IDEA项目与上传到Git中
- linux用户修改密码
- Mysql binlog 日志的三种模式
- 【C++ 程序】 解线性方程组(Cramer法则)
- HF-LPX30 LPX20
- 多力食用油:技术赋能产品品质,健康深植品牌理念
- 从手机端 H5 制作来看 WEB 动画的术与道
- FlashBuilder精选插件
- 打造黑苹果(四)安装MACOS系统
- 计算机硬件品牌的调研报告,计算机硬件市场调查报告.doc
- 你的网站安全吗?ZAP应用实例
- Layui数据表格中使用模板引擎
- C语言中(a<b<c)的理解
- R - Boxplots(R简单制作箱形图)
- 毛坯新房验收注意事项
热门文章
- 三星android 5.0升级名单,三星可升级Android 7系统机型名单曝光
- 信息技术计算机老师继续教育培训心得,信息技术课教师继续教育心得体会
- 手机内存无法计算机,电脑内存出现故障怎么办 电脑内存常见故障解决方法【详解】...
- JavaScript入门基础2
- java毕业设计超市管理系统Mybatis+系统+数据库+调试部署
- Python3.X下安装Scrapy (转自鱼c论坛作者lumber2388779)
- 三种保存电脑本地图片方法
- mysql怎么加载bak文件_MySQL数据库(表)的导入导出(备份和还原)
- Log4net自定义信息(变量或属性或字段)存入数据库
- 使用Docker搭建高可用Mysql数据库集群