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

时间:2010-05-11 12:08:00

标签: java web-services jax-ws axis2 jax-rpc

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

2 个答案:

答案 0 :(得分:34)

这对于理解网络服务来说确实是一个丛林。 wikipedia页面很不错,但仍缺少一些元素。

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

臃肿的术语:

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

实施和设计风格:

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

实施和技术堆栈:

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

相关概念和行话:

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

答案 1 :(得分:0)

我对“合同优先”网络服务的最佳解释是Spring web service module