如何在java中编写有效的Web服务

gek*_*ish 18 java axis2 web-services jax-ws jax-rpc

虽然这可能看起来像Java Web Services的副本,但我想知道从哪里开始并继续.过去,我花了很多时间来寻找从哪里开始,但我无法做到.在阅读有关Web服务的页面时,有这么多的术语和混乱(至少对我而言!).有很多术语 - 比如JAX-RPC, JAX-WS, Axis, Rest, Servlet as WebService, EJB'sWeb Service和其他我不知道的术语.此用户组是否可以整合并提供易于理解和遵循的Java Web服务的高级概述?感谢您的善意,感谢您的帮助.

ewe*_*nli 34

这对于理解Web服务来说确实是一个丛林.在维基百科页面是体面的,但还缺少一些元素.

我已将此答案标记为社区维基,因此请随时更新或更正.这只是一个基础.

一个臃肿的术语:

首先,术语Web服务用于指代许多事物.虽然许多人使用它来引用基于SOAP的Web服务,但该术语可用于表示通过Web界面提供的任何服务; 这是混乱的根源.

实施和设计风格:

  • 基于 SOAP - SOAP仍然是Web服务的事实标准.SOAP是HTTP之上的协议,用于描述消息和异常的交换.SOAP从简单的东西变成了非常复杂的东西,后来添加了所有的WS-*标准.最重要的是:WS-Policy,WS-Security,WS-Addressing,WS-Transaction.另一个重要的规格是针对大型消息的MTOM.
  • RESTful - 术语RESTful涉及服务是无状态的,并且所有相关信息都作为参数传递.也代替使用如SOAP的协议,普通HTTP 动词被使用,例如Get,Put,Delete,Update.
  • 无状态 - WS通常是无状态的.处理的业务有时依赖于所谓的相关标识符(使用WS-Addressing),用于将请求和响应一起匹配; 这与将会话标识符存储在cookie中的想法相同,因为HTTP是无状态的.
  • 有状态 - 有一些建议要有状态的WS,但我不太了解它.

实施和技术堆栈:

  • Servlet - 实现WS的最低级别方法:您基本上解析请求并自己发送HTTP响应.
  • EJB - 从EJB3开始,EJB可以非常容易地作为Web服务公开.当然,需要一个EJB容器.
  • Apache Axis - 曾经是一种流行的技术堆栈,现在正在下降.
  • Apache CXF - 另一个受欢迎的选择.
  • JBossWS - 又一个流行的选择.
  • JAX-WS - 来自Sun的官方Web服务堆栈,非常好.到目前为止,我知道,这取代了简单地重命名为JAX-WS的JAX-RPC.

相关概念和行话:

  • WSDL - 在基于SOAP的WS的情况下定义Web服务的合同/接口.
  • 合同优先 - 指的是技术能够支持任何预先提供的WSDL.与将基于Web服务的实现生成WSDL的实现技术相反,在这种情况下,WSDL不能总是根据需要进行定制
  • 配置文件 - 为了简化这种混乱,他们引入了配置文件,这些配置文件是需要支持互操作性的相关规范/功能组.主要是WS-I Basic Profile.
  • UDDI和发现 - 似乎有些人认为Web服务将在公共注册中发布,以便潜在的消费者可以发现.我不认为这个愿景获得了很大的动力.

  • 这让我更加困惑 (2认同)