加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

基于WebService实现远程调用方式的系统间通信

发布时间:2020-12-17 00:09:44 所属栏目:安全 来源:网络整理
导读:在Java中实现远程调用方式的技术主要有RMI和WebService两种,下面分别来看看基于WebService技术如何实现远程调用方式的系统间通信。 WebService WebService是一种跨语言的系统间交互标准。在这个标准中,对外提供功能的一方以HTTP的方式提供服务,该服务采用

在Java中实现远程调用方式的技术主要有RMI和WebService两种,下面分别来看看基于WebService技术如何实现远程调用方式的系统间通信。

WebService

WebService是一种跨语言的系统间交互标准。在这个标准中,对外提供功能的一方以HTTP的方式提供服务,该服务采用WSDL(Web Service Description Language)描述,在这个文件中描述服务所使用的协议、所期望的参数、返回的参数格式等。调用端和服务端通过SOAP(Simple Object Access Protocol)方式来进行交互。

在Java中使用WebService须首先将服务器端的服务根据描述生成相应的WSDL文件,并将应用及此WSDL文件放入HTTP服务器中,借助Java辅助工具根据WSDL文件生成客户端stub代码。此代码的作用是将产生的对象请求信息封装为标准的SOAP格式数据,并发送请求到服务器端,服务器端在接收到SOAP格式数据时进行转化,反射调用相应的Java类,过程如图1.2所示:

?
(点击查看大图)图1.2? WebService调用过程

Java SE6中集成了WebService,因此可以直接实现该方式的远程调用,服务器端通过@WebService来标记对外暴露的WebService实现类,通过调用Endpoint.publish将此WebService实现发布到指定的HTTP地址上。客户端通过wsimport来访问相应地址的 wsdl文件,从而生成调用服务器端的辅助类,应用即可通过调用此类来实现远程调用了。基于WebService实现示例中的服务器端代码如下:

对外暴露的接口:

 
 
  1. public?interface?Business?{ ?
  2. ?
  3. ????/** ?
  4. ?????*?显示客户端提供的信息,并返回 ?
  5. ?????*/ ?
  6. ????public?String?echo(String?message); ?
  7. ?
  8. }?

服务器端的实现类,通过@WebService来指定对外提供的WebService的名称和客户端生成的类名及包名:

 
 
  1. @WebService(name="Business",serviceName=" BusinessService",targetNamespace="http://WebService. chapter1.book/client") ?
  2. @SOAPBinding(style=SOAPBinding.Style.RPC) ?
  3. public?class?BusinessImpl?implements?Business?{ ?
  4. ????????public?String?echo(String?message)?{ ?
  5. ????????????if("quit".equalsIgnoreCase(message.toString())){ ?
  6. ????????????????System.out.println("Server?will?be?shutdown!"); ?
  7. ????????????????System.exit(0); ?
  8. ????????????} ?
  9. ????????????System.out.println("Message?from?client:?"+message); ?
  10. ????????????return?"Server?response:"+message; ?
  11. ????????} ?
  12. ?
  13. }?

发布WebService的类:

 
 
  1. public?static?void?main(String[]?args)?{ ?
  2. ????????Endpoint.publish("http://localhost:9527/ BusinessService",?new?BusinessImpl()); ?
  3. ????????System.out.println("Server?has?beed?started"); ?
  4. }?

客户端通过JDK bin目录下的wsimport命令来生成辅助调用代码,执行如下命令生成辅助代码:

 
 
  1. wsimport?-keep?http://localhost:9527/BusinessService?wsdl?

执行后,在当前目录下会生成book/chapter1/WebService/client/Business.java和book /chapter1/ WebService/client/BusinessService.java的代码,基于这两个生成的代码编写客户端的关键代码如下:

 
 
  1. BusinessService?businessService=new?BusinessService(); ?
  2. ????Business?business=businessService.getBusinessPort(); ?
  3. ????business.echo(command);?

WebService传输的数据协议采用SOAP,SOAP对于复杂的对象结构比较难支持,其好处是能够支持跨语言。

无论是采用RMI还是WebService,都封装了网络通信的细节,因此使用起来会较为简单,但如果想对通信细节做一些调优或控制,也会比较麻烦。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读