`

webservices浅析

阅读更多

53.  现在来讲web service.通过其他的示例来讲。

在上海,有一台机器,有一个java虚拟机,那里面有一个对象,我现在就有我这里调他,这不两个java虚拟机吗?两个 java虚拟机他是两个进程的,他的地址空间自己是自己的,不能说你new  一下就调了,调不了,

 

54.  上午说了这个事,jndi这块代码,放到jsp里我new 一下,就能从jndi服务上查到,因为jsp和我们的jndi服务是在同一个进程里,所以我可以new ,,不在同一个进程里你不能new ,,那个就在那个进程里,就像在那个屋里一样,你能拿到吗?那层资源你拿得到吗?你还穿墙啊,

 

 

55.  你把jndi那块代码你放到一个main方法里,你也拿不到,main里面也是一个进程 ,他和tomcat的进程是不同的。main在java虚拟机里。

 

 

56.  你想我现在要和上海的进程要通信啊,我new 不了的话,你要把那个对象给我传过来,这个传过来,你不能随便传过来,你得序列化变成二进制,一传,传,传,传到我的jvm里, 我的Jvm认识了,把你这个对象一转换,

 

 

57.  还记得序列化吧,你存到文件里一样,存成二进制,然后一转  转成java对象。他那边传过来也是一样的。每次传输都要进行序列化,都要进行压包和解包的过程,所以他的效率是慢的。那这些过程谁做了,他们之前还得遵循一个协议 ,,你这么 传,我就这么 解,这就是一种协议。

 

 

58.  所以我调上海 那个东西,我要调他的方法,他要通过一个Stub(存根)  存根的概念,这是分布式通讯里面的,大同小异他们都是这样的,

 

 

59.  存根这个是什么,是一个非常典型的代理模式,他是远端对象在客户端的代理。代理嘛,跟目标对象接口一模一样的。所以我就直接就调Stub,,他就会在代理

里来封装访问细节,怎么把你这个压缩了,压包了,编码了,通过相应的协议 传 传 传,假设我们现在要讲的webservice他就通过   soap  如果你是ejb他会采用

rmi-iiop  如果你基于corba这种架构他是iiop

 

传到skeleton骨架,他会解析,就解成java对象了,所以java就看见了,然后,你把信息得到之后,他返回了,返回了他由这个骨架压缩编码,编码再通过相应的协议传过去。

 

 

 

60.  

客户端        远程对象

Stub(存根)    SKeleton(骨架)

 

 

61. 其实 分布式  程序就是存根  和骨架之间的通讯。分布式通讯都类似,差不多是这样的。

 

 

62.  Stub这个代理也分静态的和动态的,静态的就是确确实实有,你看到了Stub这个代理类了,

 

 

63.  其实在以前这个ejb开发 的时候,很久以前了02年之前,02年  ejb2.x刚出来,在他1.x的时候,他有些服务器的支持还不行,你写一个ejb至少要写3个类,一编译后5,6个类出来了。后来就改了,开发jboss  的ejb容器的这个人,在java上,技术上是非常厉害的一个人,他引入了jdk的动态代理来完成jdk的存根的自动生成,所以ejb的开发就简单一些,就写大类就行了。存根在运行的 时候生成,

 

 

64.  他说现在他用两种语言来实现分布式通讯。

 

 

65.  Web Services  这个东西,你有时候可能看到有很多人写 这个名词都不带s,  这个不标准,不带s指的是单独的服务,带s指的是整个技术架构。

 

 

66.  他说什么axis-bin是他的一个引擎。

 

 

67.  刚才就说了,咱们这种分布式的东西,就是说我这边一个Jvm你寻那边一个jvm,那这怎么传啊,假设现在上海 有一个服务器,有一个服务,我现在要用java来调他,而上海 那个不是用Java写的,上面 举的例子是上海那边是用java写的,

 

 

68. 像我们之前讲的javascript跟java打交道,这就是两种语言啊,你不能随便传,说把那个java对象给传过来,javascript他不认识的。所以我们要转换成文本传过来,后来我们转成了一个xml文件来传。这就是异构语言的一个交互。xml就是文本文件啊。

 

 

69. 假设在上海 有一个服务,假设那个服务就叫取得天气预报吧,我现在就写一 main方法,用java写去调他,那个服务不是用java写的,不知道他怎么写的,我也不知道,所以他就得把文本给我传过来,web services这套技术的话,他传的是xml文件,他这个协议叫soap  简单对象访问协议 就是http+xml  他通过http协议传xml文件,

 

 

70.  以前通过httplook看到,他访问 的时候,他是把那个html传过来 了,而这里是xml给传过来 了。

 

 

71.  其实通讯就是这样的,我去请求上海那边的天气预报,我这么 一请求过去,上海那边,他形成xml文件给我,传过来,我们这边就负责把xml文件,转换成java对象,然后我再调把java对象转换成xml文件,传,传,传,又传到上海去,Skeleton他负责把xml文件 转换成相应语言的对象,假设就c++.

 

 

72.  所以webservices能做什么事,异构语言通信,可以做异构系统整合,现在有一定的应用,就要用在异构系统的整合,你这个都是java开发 的,你用webservices干什么,都是java开发的,他的访问效率也快啊,他的传输是以二进制进行传输啊,你用webservices他传的是xml大文本。

 

73.  除非你的系统是多元开发,你可以考虑使用webservices,这种技术构架来解决,或者你这个系统做得通用一些,你可以开放一些webservices这种方法,因为未来别人可能调我,省得我还再做。

 

 

74.  就是说没有这种webservices技术,我们怎么通讯 啊,其实方式有很多,你  天气预报的那边我管你用什么语言写,你把数据库表开放,我用jdbc去操作你不就实现了,这不一样调吗?只是开放表结构不太好,安全性也不太好,因为有些数据不是通过单独一张表就能出来的,有些数据是通过一定的算法才出来的,这样也不标准,开放表结构。

 

 

75.  还有别的,不这样通讯 行不行啊,你可以把天气预报信息定时地上报到某一个服务器上去,假设一个Ftp Server  比如明天的天气预报你晚上12点之前,我这个java程序,第二天早上去取去,这不也行吗?这只是不及时罢了,这有多种,只不过以前这些做法也不规范。

 

 

76.  还有我可以发消息,我可以发一个消息给c#那边写的天气预报,你发个消息给他,你说我要天气预报,

他发消息给你,这样可以吧,所以进程间通信我们可以发消息。

 

 

77.  方式有很多种,另外还有,我们这个说的是webservices难道没有别的技术标准吗?有啊,假设现在两边都是java做的,是Java的话,就有多种方式了,

天气预报那边你可以用  Java EJB  

我这边用java通过  rmi-iiop去。这也可以啊,

 

 

78.  假设现在那边又是c#了,注意了,这个ejb他不能使用其他语言来写,他只能用java来写,但是这个ejb呢?他可以使用corba来调用。

java和c#之间的通讯 我就可以用另一套技术架构corba来调用 了。

 

79.  所以corba和webservices都能解决异构的问题,现在用webservices稍多一些,因为他走http协议啊,他天生就能穿越80端口啊,他能穿越防火墙啊。但是他有问题,他慢,他基于http协议传大文本,而corba不是,他传二进制。

 

 

80.  所以在一些行业里,他也有大量使用corba的,这基本上属于一个国际的标准。

 

 

81.  我们先建一个java项目,通过java调用 一下。名字叫,我们给大家演示动态调用 和 静态调用。

 

 

82.  首先你要调用 的话,你得保证你的tomcat是开启的,这样的话,通过http能访问过去。

 

 

83.  拿到这个地址 的连接,

 

 

84.  java这一块你得使用asix  delphi你也得用asix,server这里你也得使用asix.

 

 

85.  注意了,你把代码拷过去,你导包别导错了,你得导asix的包啊,

 

 

86.  你看他的异常啊,还有一个RemoteException 远程异常。

 

 

87.  他说什么他那个httplook有一点问题,上次就出了几次问题,硬解都 不彻底。

 

 

88.  其他的语言通信和这个一样都使用这个这个通信,他这了一个Project.exe   他说这个是他使用另一种语言写的。太牛了,

 

 

89.  我用他的东西都不能运行,不知道,他总报错,说什么我没有发布wsdl.

 

 

90.  他说以前他们公司用java做的,要和另一个公司做集成 ,那个公司就是用delphi开发的,为了通信,就开发了这么一个接口。

 

 

91.  我们公司用java写的,另一个公司界面用delphi写的,服务平台用c++写的。

 

 

92.  其实一个大型项目,都是用多种语言混合起来做的,一种语言是解决不了问题的。语言你不能讨论好坏,我在网上看到有些人对语言批判好坏特别严重,其实这就不太对,在某种场景下,你可能用c++就不合适。比如做这种web应用,你用c++合适吗?他也能做,各个方面太慢了,用java一天做完了,用c++做,一星期,半个月才能做完。

 

 

93.  我们以前,主板蕊片上要放程序,怎么放啊,那都汇编写了放上去,你能说汇编没用吗?  你说vb淘汰了吗?.

 

 

94.  注意一下,语言的事,不要特别去抨击语言的好坏。

 

 

95.  你不要把这个xml文件搞得太大了,假如我要查询一万个学生的信息,你把这一万个搞出来,你这个文件得多大。我发一个消息给你,你生成相应的文件 传到FTP Server,生成好了,你告诉我你说你生成好了,我就到FTP Server上去取。我就用程序自动去访问,这样肯定很快。你还可以先把xml压缩一下,再放上去,

 

 

96.  95说的意思就是不要用soap传大量数据,传大量数据肯定是不合适的,所以你可以使用后面的解决方案,把他先传到FTP Server上去。

 

 

97.  你先了解一下就够了,以后实在要开发的话,你好入门。

 

 

98.  现在演示,静态调用,生成客户端存根方式,

 

 

99.  存根代表什么,远程对象的代理,我访问这个存根,那他就控制远程了,去调用远程对象了,他会起到一个编码和解码的作用。

 

 

100. 没有存根就是动态调用,有了的话就是动态调用了,搞的一个工程命名都错了,搞得我运行他的都 运行不出来。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics