Web Service实现分布式服务的基本原理

简单的说, 就是客户端根据WSDL 生成 SOAP 的请求消息, 通过 HTTP 传输方式(也可以是其它传输方式, 如 FTP 或STMP 等,目前 HTTP 传输方式已经成为 J2EE Web Service 的标准)传给对方, 服务方实现服务请求, Web Service(Web服务)将结果以 SOAP 的消息格式返回给客户端。

如果人工去创建和解析基于 XML 格式的 SOAP 消息还是一个非常复杂的过程, 这样 JAX-RPC 应时而生, 他实现了J2EE Web Sercive  的远程分布式调用。

JAX - RPC :Java APIs for XML-Based Remote Procedure Call. 它本质上是另一种RMI。 只是 JAX-RPC 以 SOAP 作为通信协议, RMI 以 RMI- IIOP或者 RMI - JRMP为通信协议。

客户端需要根据 WSDL 创建客户端 Java 程序, 其中包括 Stub 程序。 客户端调用相应的Stub 程序, 进一步调用JAX- RPC 运行环境创建 SOAP 请求消息, 通过 HTTP 传输给服务器端。

Web 服务器端的JAX-RPC 运行环境在收到 SOAP 请求消息后, 对 SOAP 的 XML 内容进行解析, 再通过 Tie 来调用服务接口实现类。(无状态会话 Bean 或者 Java  对象) ,得到结果后, 创建SOAP 响应消息返回给客户端。

客户端基于JAX- RPC 实现远程分布式调用的基本原理

(1)通过 JAX-RPC 创建 SOAP 请求消息
(2)通过 JAX- RPC 将 SOAP 请求消息送到服务地址
(3)通过 JAX- RPC 解析 SOAP 请求消息

服务器端基于 JAX-RPC 实现远程分布式调用的基本原理

服务器端的 JAX-RPC 的运行环境在收到了基于 XML 格式的SOAP 请求消息后, 会调用服务器端的 JAX-RPC Tie 对象的相应服务接口方法checkUserLogin, 将上面的基于 XML 格式的 SOAP 请求消息中的参数值映射为 Java 对象类传给 Tie 对象的接口方法, 将 loginName 和 password 都转化为 Java 的String 类型。 这是前述的 WSDL 中所定义的类型。

利用设计模式

设计模式在设计Webservice的时候显然可以起到相当大的作用。设计模式的主要目的就是为解决某些在类似环境下的相像问题提供已有的较为成熟的设计方案。在这里,只简单的提及一些很常用的模式,让我们了解到模式在Webservice中可以起到的作用。

Adapter :为内部系统提供一个不同的接口

Façade:封装复杂的内部实现,提供一系列简单的接口

Proxy: 作为其他对象的代理,代替它提供服务
 
Adapter 模式用于将一个组件的接口转化成客户所需要的样子,这里的客户就是Webservice。一个常见的情况就是将原有的老的系统包装成一个Webservice。比如现在使用的是J2EE的平台,而原来有一个C++的系统实现了某些功能,现在需要将它发布成Webservice,那么就需要利用JNI技术做一个Adapter,为原来的C++组件提供一个Java的接口,然后再转化为Webservice。
 
Façade 模式用于构建粗粒度的服务,它包装了细粒度的服务,从而为复杂的系统提供了一个简单的接口。在J2EE中,Session Bean就象是一个Façade,而Entity Bean则是细粒度的服务。在Webservice中也一样,使用Façade模式可以将已有的组件的功能发挥殆尽。
 
Proxy 模式用于充当其他对象的代理,类似于中间人的作用,将处理工作从一个对象传递到另一个对象。在Webservice中,它主要用于隐藏Soap消息构造的过程。也可以用于模拟对象(Mock Object)的创建。
 
以上仅仅是一些可以用于Webservice开发的模式,如果你熟练的将这些模式应用于Webservice开发,你将会发现开发Webservice应用,将好像做一种特殊的面向对象设计。
 
安全

Webservice为作为方便的服务被用广大领域使用的同时,也成为了黑客们的美食。在这里,本文将就目前对Webservice安全所能做的改进做简单介绍。

在Webservice中的安全主要分为以下三个方面。

传输      SSL/HTTPS 对连接加密,而不是传输数据

消息      数据加密(XML Encryption)   数字签名(XML-DSIG)

底层架构  利用应用服务安全机制
 
传输时的安全是最容易被加入到你的Webservice应用中的,利用现有的SSL 和HTTPS协议,就可以很容易的获得连接过程中的安全。
 
然而这种安全实现方法有两个弱点。一是它只能保证数据传输的安全,而不是数据本身的安全,数据一旦到达某地,那么就可以被任何人所查看。而在Webservice中,一份数据可能到达多个地方,而这份数据却不该被所有的接受者所查看。二是它提供的是要么全有要么全无的保护,你不能选择哪部分数据要被保护,而这种可选择性也是在Webservice中所常要用到的。
 
第二层的保护是对于消息本身的保护。你可以使用已有的XML安全扩展标准,实现数字签名的功能,从而保证你的消息是来自特定方并没有被修改过。XML文件的加密技术从更大程度上加强了Webservice的安全,它能够定制数据传输到后,能否被接受者所查看,进一步完善了传输后的安全,业界也在不断的制定Webservice的安全标准,比如SAML 和 WS-Security。
 
最后一层保护就是依靠底层架构的安全,这更多的来自于操作系统和某些中间件的保护。比如在J2EE中,主持Webservice的应用服务器。目前很多的J2EE应用服务器都支持Java Authentication and Authorization Service (JAAS),这是最近被加入到J2SE 1.4当中的。利用主持Webservice的服务器,实现一些安全机制这是很自然的做法。另一种利用底层架构的安全方法就是,做一个独立的负责安全的服务器,Webservice的使用者和创建者都需要与之取得安全信任。

转载:http://www.myds.cn/files/highlight-1017.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用docker部署mysql主从复制集群

一、环境搭建 虚拟机环境:centos7 IP:192.168.37.134 用户名:root 密码:123 启动3个容器,一个是master,端口是3307,另外两个是slaver,端口是3308和3309 docker pull mysql:5.7docker run -p …

猛然回首 在这里4年了

猛然回首 在这里4年了 今天浏览博客园的时候 才发现 自己还有一个博客园的账号, GOD! 4年了,猛然回首 自己又老了,这些年 不知道自己 搞了些什么东西,这日子过的真是 哎!posted on 2012-01-11 17:25 RIBBIT…

.js——alert()语句

在.js文件中,通过alert()语句可以生成弹出框,弹出框中的内容message部分可以是常量字符串,也可以是含有变量的字符串连接,下面举几个例子简要说明下: 1. 参数为常量字符串 alert("warnningArray[1]:124"); 运…

Linux 编译安装Boost

http://blog.csdn.net/zgl_dm/article/details/8363843 linux平台下要编译安装除gcc和gcc-c之外,还需要两个开发库:bzip2-devel 和python-devel,因此在安装前应该先保证这两个库已经安装:#yum install gcc gcc-c bzip2 bzip2-deve…

如何利用System.Net.Mail类发送EMAIL

废话不多说,直接上代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Mail;namespace MailSender {class Program{static string strHost string.Empty;static string strAccount string.Empty;stat…

特殊的质数肋骨

特殊的质数肋骨 时间限制: 0 Sec 内存限制: 128 MB题目描述 农民约翰的母牛总是生产出最好的肋骨。你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们。 农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组成一个质…

安装perl5.10.0

目的:本人使用的Linux系统CentOS5.8中最新的perl版本是5.8.8。学习perl语言入门,一般情况下够用,但是在使用given-when这种结构的时候,就必须指定5.10版本(use 5.0.10.0;)步骤:1. wget http://www.cpan.org/src/perl-5…

Linux下编译Jsoncpp

载软件包:jsoncpp-src-0.5.0.tar.gz scons-2.1.0.tar.gz # tar zxvf scons-2.1.0.tar.gz # tar zxvf jsoncpp-src-0.5.0.tar.gz 设定环境变量【关键】,绝对路径# export MYSCONS解压的路径 # export SCONS_LIB_DIR$MYSCONS/engine # cd jsoncpp-src-0.5.0 # python $MYSCONS…

逛公园

传送门 解法: 先不考虑0环 很容易想到dp 状态转移方程也很容易想到 设\(d[i]\)为n到i的最短路长度 当然此时是反向图 反向图是为了防止1能到达的点到达不了n而出错\(dp[i][j]\)表示到达i点距离为\(d[i]j\)的路径个数 则 x->y有路径 \(dp[x][k]dp[y][k-(d[y]edge(x,y)-d[x])]…

poj2299 ( bit )

树状数组求逆序数&#xff0c;先排个序&#xff0c;从大到小往插&#xff0c;计算在他的前面有几个比他大&#xff0c;就是他的逆序数。 &#xff08;PS&#xff1a;最近对数量越来越不敏感了&#xff0c;老在这上面错。多做题&#xff0c;不能断啊&#xff09; 1 #include <…

Linux下编译安装openssl

(1) 下载openssl压缩包。在 http://www.openssl.org/source/ 选择合适版本的压缩包&#xff0c;一般选择标记有“[LATEST]”的包&#xff0c;假设其link为 http://www.openssl.org/source/openssl-1.0.1c.tar.gz&#xff0c;用下面的下载&#xff1a; # wget http://www.openss…

前端小插件之手写js循环滚动特效

很多前端都离不开滚动的特效&#xff0c;调用插件繁琐&#xff0c;后期更改麻烦&#xff0c;考虑到这些因素&#xff0c;自己写了一套无限循环滚动的小特效。 首先滚动特效很好写&#xff0c;用css就可以完成&#xff0c;下面写一个基础css向上循环滚动特效 html <div class…

敏捷开发一千零一问系列之七:怎样对待有看法的徒弟?

这是敏捷开发一千零一问系列的第七篇。&#xff08;之一&#xff0c;之二&#xff0c;之三&#xff0c;问题总目录&#xff09;问题松结对编程中&#xff0c;师傅对徒弟安排任务时&#xff0c;对于有想法的徒弟提出的意见怎样解决&#xff1f;方案步骤0&#xff1a;正心&#x…

SSH远程登录失败,提示“Password authentication failed”

使用SecureCRT登陆&#xff0c;提示“Password authentication failed” 使用linux下ssh登陆&#xff0c;提示“Permission denied, please try again.” 网上收集的相关资料&#xff1a; 方法一&#xff1a; 1. vi服务器端的/etc/ssh/sshd_config 2. 把PasswordAuthentication…

触摸传感器

void setup() {pinMode(A5,INPUT); //设置引脚 A5 为输出模式 Serial.begin(9600); //设置波特率为9600 } void loop() { // put your main code here, to run repeatedly: Serial.println(analogRead(A5)); //串口输出 A5读取到的值 delay(200); //延时200毫秒 } 转…

ORACLE查询表最近更改的数据

&#xff0c;今天开发人员问我如何快速并方便的查出一张表最近被更改的记录&#xff0c;这个需求很简单&#xff0c;由于是查最近被更改的数据&#xff0c;查回滚段就可以&#xff0c;下面是我做的小实验。 SQL> create table test(id number,name varchar2(10),gender varc…

学滑冰

为什么80%的码农都做不了架构师&#xff1f;>>> http://www.cnr.cn/wcm/zhuanti/harb/bxyd/t20041230_163420.html 学滑冰&#xff08;一&#xff09; 到冰场上穿冰刀奔驰豪情一番&#xff0c;真是今人激情万千&#xff0c;你会滑冰吗&#xff1f;如果你还不会滑冰…

锡安赞歌 mp3下载

《锡安赞歌》mp3下载地址:http://pan.baidu.com/s/1i3nJLml

Java-Redis 热部署问题

项目请求时报错&#xff1a;java.lang.ClassCastException: cn.xingaohbd.seckil.model.User cannot be cast to cn.xingaohbd.seckil.model.User at cn.xingaohbd.seckil.service.impl.UserServiceImpl.getUser(UserServiceImpl.java:33) ~[classes/:na] at cn.xingaohbd.seck…

dp之二维背包poj1837(天平问题 推荐)

题意&#xff1a;给你c&#xff08;2<c<20&#xff09;个挂钩&#xff0c;g&#xff08;2<g<20&#xff09;个砝码&#xff0c;求在将所有砝码&#xff08;砝码重1~~25&#xff09;挂到天平(天平长 -15~~15)上&#xff0c;并使得天平平衡的方法数....... 思路&…