emi*_*lly 5 java web-services servlets
我是Web服务的新手,正在浏览Martin Kalin的Java Webservices一书.我已经完成了它的最初基本概念,并有一个问题:
Say producer将HTTP请求(包含SOAP Message信封)发送到Java Web服务(consumer).Servlet内部处理请求是否提取SOAP消息并将其转换为相应的Java域对象,然后调用服务实现bean?
无论Metro和Axis等现成的框架如何,这个问题都是通用的.请考虑以下代码
Endpoint.publish("webserviceURL", new CustomerServiceImpl())
Run Code Online (Sandbox Code Playgroud)
现在,如果消费者发送请求webserviceURL,它将由Servlet始终在入口点处理还是以其他方式处理?(因为这是在任何Web应用程序中处理Web请求的方式)
Servlet是一个Java类,可以接收HTTP请求并发回响应,对吧?
话虽这么说,你可以(如果你真的真的想要),只使用Servlets(使用它的方法doGet()和代码)编写一个完整的Web服务doPost().
例如,您可以逐字节获取HTTP请求,将其转换为a String,将其解析为XML文件,然后将其解释为SOAP Envelope(让我们将其称为" 管道工作 "),然后才会开始处理实际请求(首先你真正想要的).
在完成处理实际请求之后,您必须做一些更多的管道工作来将对象转换回XML和SOAP Envelopes(并且不要忘记处理最终错误/异常的麻烦).
你问:
请求内部由servlet提取请求,该消息提取soap消息并将其转换为相应的java域对象(...)
答案是否定的.Servlet除了接收字节之外什么也不做,让你在Java方法中操作它们(例如doGet()或者doPost()).您可以手动执行此操作,但是将数据转换为域对象通常由Web Service框架完成.
现在,如果消费者将请求发送到webservice URL,它是否会由servlet始终在入口点处理或以其他方式处理?
第一个.它将始终由入口点的Servlet处理.但你可能会问:
那么,像JAX-RS,Spring-WS或JAX-RS这样的Web服务API有什么意义呢?
所有Java着名的Web服务API都建立在 Servlet API 之上.
Servlets是第一个处理请求的人,但是这个"处理"很少:正如我所说,他们只获取HTTP请求位并让你作为Java方法使用它们.
在那之后,WS框架可以为您做一些其他的管道工作.例如,他们可以获得HTTP POST请求,并Bytes<->XML<->SOAP Envelope<->Objects以透明的方式对您进行所有转换.它们还可以帮助您定义标准故障包络,自动生成WSDL文件以及其他所有内容.
您可以仅使用Servlet来完成所有这些工作,但是使用Web服务框架,您不必担心所需的所有管道工作,并且可以只创建处理实际请求的方法.
只是为了说清楚:Servlet 不是用Java处理HTTP请求的唯一方法.
但是,它们是在Java EE中使用它的一种标准方式,因为它们是最稳定且无可争议的Java EE API之一,但当然还有其他方法 - 总是有.
我所说的最着名的框架是建立在Servlet API之上的,仅举几点:
正如我所说的那样,这只是为了指出一些问题.
请求由可以处理 HTTP 请求的东西处理。
使用 servlet 或过滤器很方便,因为已经以 servlet/应用程序容器的形式为您编写了管道,但这不是必需的。例如,在 Netty 上运行的服务不需要遵循 servlet 规范。(尽管 IIRC 有一个层允许 Netty 直接调用 servlet。)
只要客户端和服务器都在使用 HTTP,底层实现就无关紧要,也不需要是 servlet,它只需要使用 HTTP。
| 归档时间: |
|
| 查看次数: |
2669 次 |
| 最近记录: |