当前位置: 首页 > 面试题库 >

如何用Java编写有效的Web服务

宣胜
2023-03-14
问题内容

尽管这可能是Java Web Services的副本,但我想知道从哪里开始和继续。过去,我花了很多时间来找到从哪里开始,但我却没有。阅读有关Web服务的页面时,有很多术语和混乱(至少对我来说是如此!)。有很多术语-
例如JAX-RPC, JAX-WS, Axis, Rest, Servlet as WebService, EJB'sWeb
Service和其他我不知道的术语。该用户组可以合并并提供易于理解和遵循的Java Web Services的高级概述吗?我感谢您的好意,并感谢您的帮助。


问题答案:

确实,了解Web服务有点困难。在维基百科页面是体面的,但还缺少一些元素。

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

term肿的术语:

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

实施和设计风格:

  • 基于 SOAP的-SOAP仍然是Web服务的实际标准。SOAP是HTTP之上的协议,用于描述消息和异常的交换。通过后来添加的所有WS- *标准,SOAP从简单的东西发展到了非常复杂的东西。最重要的是:WS-策略,WS-安全性,WS-寻址,WS-Transaction。另一个重要的规范是大型邮件的MTOM。
  • RESTful- 术语 RESTful 与服务无状态且所有相关信息均作为参数传递这一事实有关。也代替使用如SOAP的协议,普通HTTP 动词 被使用,例如GetPutDeleteUpdate
  • 无状态 -WS通常是无状态的。处理的业务有时依赖于所谓的关联标识符(带有WS-Addressing),该标识符用于将请求和响应一起匹配;这与将会话标识符存储在cookie中一样,因为HTTP是无状态的。
  • 有状态的 -有一些建议使用有状态的WS,但是我对此并不了解。

实施和技术栈:

  • Servlet- 实现WS的最html" target="_blank">底层方法:您基本上可以自行解析请求并吐出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服务将在公共寄存器中发布,以便潜在的消费者可以发现它。我认为这一愿景没有取得太大进展。


 类似资料:
  • 为了在java中通过HTTPS编写web服务客户机,我们需要进行初始SSL握手。如果web服务使用它自己签名的证书,我们如何进行初始SSL握手?我需要帮助了解编写客户端的简要步骤。

  • 问题内容: 我简要阅读了有关Maxine的信息,这是一个用Java编写的开源JVM实现。这对我来说听起来很圆。如果java要求运行虚拟机,那么如何用Java编写虚拟机本身(VM代码是否需要运行VM的虚拟机,依此类推?)。 编辑 :好的,所以我看到我忽略了Java不必在VM中运行的事实。那如何解释如何用LISP编写LISP编译器呢?还是这完全是一个新问题? 问题答案: 最初,您认为Java需要虚拟机

  • 问题内容: 一切在命令行上都可以正常运行,但是当我将所需的内容转换为Java时,接收过程在stdin上什么都收不到。 这是我所拥有的: 脚本“ count-the-bytes”很简单: 输出表明该函数挂在’wc -c’行-永远不会到达’counted stdin bytes’行。 这是怎么回事?使用Jsch会有所帮助吗? 问题答案: 您可能希望在wc -c返回之前尝试关闭输出流。

  • 问题内容: 我找到了要在Java应用程序中使用的开源库。该库是用C编写的,并且是在Unix / Linux下开发的,我的应用程序将在Windows上运行。它是一个主要包含数学函数的库,据我所知,它不使用任何与平台相关的东西,它只是非常基本的C代码。而且,它也不大,少于5,000行。 在我的应用程序中使用库的最简单方法是什么?我知道这里有JNI,但这涉及到找到一个编译器来在Windows下编译该库,

  • 我说的问题是这个 问题陈述: 返回给定字符串的一个版本,其中对于字符串中的每个星号(),其左右两侧的星号和字符都将消失。所以“abcd”产生“ad”,而“ab**cd”也产生“ad”。 StarOut("ab*cd")→"ad" StarOut("ab**cd")→"ad" starOut(“sm*eilly”)→ “傻” 我得到的解决方案有点混乱,我使用了大约6个if语句和一个特定案例的处理,寻

  • 我的Web Server是用Golang编码的,并且支持HTTPS。我希望利用Web Server中的HTTP/2 Server Push功能。以下链接解释了如何将HTTP Server转换为Support HTTP/2:-https://www.ianlewis.org/en/http2-and-go 但是,不清楚如何在Golang中实现Server Push通知。 -我应该如何添加Server