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

2022-09-02 20:32:05

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


答案 1

要理解Web服务,这确实有点丛林。维基百科页面不错,但仍然缺乏一些元素。

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

一个臃肿的术语:

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

实现和设计风格:

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

实施和技术堆栈:

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

相关概念和行话:

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

答案 2

对于“合同优先”的Web服务,我所知道的最好的解释是Spring Web服务模块


推荐