Servlet 是一个 Java 类,可以接收 HTTP 请求并返回响应,对吗?
话虽如此,您可以(如果您真的doGet()
想要的话)只使用 Servlet(使用它的方法和)编写一个成熟的 Web 服务doPost()
。
例如,您将逐字节获取 HTTP 请求,将其转换为 a String
,将其解析为 XML 文件,然后将其解释为 SOAP 信封(我们称之为“管道工作”),然后才开始处理实际请求(首先是您真正想要的)。
处理完实际请求后,您必须做更多的管道工作来将对象转换回 XML 和 SOAP 信封(并且不要忘记处理最终错误/异常的麻烦)。
你问:
请求是否由 servlet 在内部处理,它提取肥皂消息并将其转换为相应的 java 域对象 (...)
答案是否定的。doGet()
Servlet 除了接收字节并让您在 Java 方法(例如或doPost()
)中操作它们之外什么也不做。您可以手动执行此操作,但将数据转换为域对象通常由Web 服务框架完成。
现在,如果消费者将请求发送到 Web 服务 URL,它是由 servlet 始终在入口点处理还是以其他方式处理?
第一个。它总是由入口点的 Servlet 处理。但你可能会问:
那么,像 JAX-RS、Spring-WS 或 JAX-RS 这样的 Web 服务 API 有什么意义呢?
所有 Java 著名的 Web 服务 API 都建立在 Servlet API 之上。
Servlet 确实是第一个处理请求的,但是这种“处理”很少:正如我所说,它们只获取 HTTP 请求位并让您将它们作为 Java 方法使用。
之后,WS 框架可以为您完成许多其他的管道工作。例如,他们可以获取 HTTP POST 请求并Bytes<->XML<->SOAP Envelope<->Objects
以透明的方式对您进行所有转换。它们还将帮助您定义标准故障信封、自动生成 WSDL 文件以及其他一切。
底线:
您可以仅使用 Servlet 自己完成所有这些工作,但使用 Web 服务框架,您不必担心所需的所有管道工作,只需创建方法来处理实际请求。
编辑:
明确一点:Servlet绝不是使用 Java 处理 HTTP 请求的唯一方法。
不过,它们是 Java EE 中执行此操作的某种标准方式,因为它们是Java EE API中最稳定和无可争议的一种,但当然还有其他方式——总是有的。
我说的是最著名的框架是建立在 Servlet API 之上的,仅举几例:
- JAX-RS:
- JAX-RS:
- 球衣,
- 高枕无忧;
- CXF,
- Restlet(名字说明了一切......)
- 其他:
正如我所说,这只是指出一些。