簡體   English   中英

如何在Java Web Services中處理HTTP請求?

[英]How are HTTP requests handled in Java Web Services?

我是Web服務的新手,正在瀏覽Martin Kalin的Java Webservices一書。 我已經完成了它的最初基本概念,並有一個問題:

假設producer將HTTP請求(包含SOAP消息信封)發送到Java Web服務( consumer )。 Servlet內部處理請求是否提取SOAP消息並將其轉換為相應的Java域對象,然后調用服務實現bean?

無論Metro和Axis等現成的框架如何,這個問題都是通用的。 請考慮以下代碼

 Endpoint.publish("webserviceURL", new CustomerServiceImpl())

現在,如果消費者將請求發送到webserviceURL ,它是否會由Servlet始終在入口點處理或以其他方式處理? (因為這是在任何Web應用程序中處理Web請求的方式)

Servlet是一個Java類,可以接收HTTP請求並發回響應,對吧?

話雖這么說,你可以(如果你真的想要),只使用Servlets(使用其方法doGet()doPost() )編寫一個完整的Web服務。

例如,您可以逐字節獲取HTTP請求,將其轉換為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之上的,僅舉幾點:

  • JAX-RS:
    • 地鐵
    • Axis2的
    • CXF
    • 將JBossWS
  • JAX-RS:
    • 新澤西州,
    • 高枕無憂;
    • CXF,
    • Restlet(這個名字說明了一切......)
  • 其他:
    • 春天-WS,
    • Spring MVC。

正如我所說的那樣,這只是為了指出一些問題。

請求由可以處理HTTP請求的東西處理,句點。

使用servlet或過濾器很方便,因為已經以servlet /應用程序容器的形式為您編寫了管道,但這不是必需的。 例如,在Netty上運行的服務不需要遵循servlet規范。 (雖然IIRC有一層允許Netty直接調用servlet。)

只要客戶端和服務器都在談論HTTP,底層實現並不重要,並且不需要是servlet - 它只需要談論HTTP。

所有Web服務都在servlet之上工作,只有SOAP或REST。 根據您使用的Web服務框架,將配置servlet映射,例如jersey,resteasy等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM