Java Restful Web Service 快速入門

来源:http://www.cnblogs.com/f1194361820/archive/2017/03/25/6617776.html
-Advertisement-
Play Games

Restful是一種架構style,目前常說的有restful web service, resultful http。現在熱搜榜的微服務,大多數會採用Restful方式。 JAX-RS 作為一個Restful 風格WebService規範,目前已發展到了2.0版本,目前比較常用的兩個版本是JAX- ...


Restful是一種架構style,目前常說的有restful web service, resultful http。現在熱搜榜的微服務,大多數會採用Restful方式。

 

JAX-RS 作為一個Restful 風格WebService規範,目前已發展到了2.0版本,目前比較常用的兩個版本是JAX-RS1.1(jsr-311)、 JAX-RS2.0(jsr-339) 。

規範地址:https://jax-rs-spec.java.net/ 。現在已有很多實現:

 

Jersey:是jax-rs的標準實現,對規範的支持自然是最快的(JAX-RS1.1、 JAX-RS2.0)。它支持多種Servlet容器、並可以與Grizzly、Netty等結合使用,性能也是很不錯的。網上有人說它是一個參考實現,但它真的不僅僅是一個參考實現而已,Kafka Connect採用了它。 支持與Spring 集成。

         https://jersey.java.net/  

CXF:apache下的一個開源的services框架,支持多種協議( SOAP, XML/HTTP, RESTful HTTP, or CORBA),同時也支持多種傳輸協議:(HTTP, JMS or JBI)。

         支持的Java規範(jsr)有:JAX-WS、JAX-RS、SAAJ 。 對於JAX-RS,支持目前JAX-RS1.1、 JAX-RS2.0。 支持與Spring集成。

         http://cxf.apache.org/docs/restful-services.html

         http://cxf.apache.org/docs/overview.html

RestEasy:它是JBoss社區的一個開源項目,已支持2.0規範。據說是性能最好的,我沒有測試過。

        http://docs.jboss.org/resteasy/docs/3.1.1.Final/userguide/html/index.html

Restlet:支持JAX-RS,支持與Spring集成。

         https://restlet.com/open-source/features

 

這裡有一篇網友的性能測試博客:http://www.tuicool.com/articles/UziAZ3u

這裡是一篇網友的8個restful框架對比的博客:http://developer.51cto.com/art/201511/497863.htm

 

 

題外話說了這麼多,言歸正傳,既然他們都實現了jax-rs規範,那麼我們只需要學習了標準規範,並使用規範中的API來編程,那麼我們的程式就可以與這些實現結合使用。

為了快速學習規範:我們可以參考: 1)標準規範 2)入門教程:Java Restful WebService 實戰  3) API  Docs

下麵提供前兩者的下載鏈接:

鏈接:http://pan.baidu.com/s/1kVkb7CF 密碼:vrln

Jersey2.x用戶指南:https://github.com/waylau/Jersey-2.x-User-Guide

 

下麵總結瞭如何學習JAX-RS,進行Restful WebService編程:

第一步: 瞭解規範中各個組件、API處理流程

JAX-RS中組件:

1)Resource :代表資源,用於在接收到資源請求後,調用相應的方法處理。

    資源分類:Resource、SubResouce。如何編寫一個Resource Class、Resource Method?如何定位一個Resource?Resource的生命周期如何?等等問題都將在jsr手冊里提到。

2)AOP:包括Filter、Interceptor。用於在Client、Container中讀寫請求之前做一些處理。

3)Provider:Provider提供某種東西的。有下列Provider:

              MessageBodyReader:從InputStream中讀取數據轉換成Java對象。也就是常說的反序列化。

              MessageBodyWriter:把Java對象寫到OutputStream中,也就是常說的序列化。

              ExceptionMapper:把指定的Exception映射到一個Response對象。

              ContextResolver:用於解析Resource中需要用的上下文。參見:@Context

      這些介面的實現,註冊到JAX-RS容器里,通常有兩種方法:1)使用@Provider讓容器自動掃描,2)通過編程的方式註冊。

4)Client:發起請求,處理響應。

 

每一種JAX-RS實現都要遵循的處理流程:

 

第二步:結合DI容器,並採用分層思想(Resource、Service、DAO)進行業務系統編寫。

目前流行的DI容器有:Spring、Guice、HK2等等。

 

第三步:和其他容器結合,部署項目。

譬如說Servlet容器、Grizzly等。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 額,,,, 前幾天,剛開始玩力熱實驗, 卻沒想到,平時愛玩的實驗誤差分析的不確定度竟然計算那麼複雜,連夜寫了一段代碼, (大佬勿噴,物理專業的小白剛自學,應該也沒人看。。。) 為了以後我用著方便,都寫成了函數塊,接下來會隨著實驗作業和Java的學習,繼續完善 (現在,不明白的是,兩組數,在定義的函數 ...
  • 此文章是基於 EasyUI+Knockout實現經典表單的查看、編輯 一. 準備工作 1. 點擊此下載相關文件,並把文件放到 ims 工程對應的文件夾下 二. 相關文件介紹 1. user.jsp:用戶管理界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...
  • Apache Thrift 是 Facebook 實現的一種高效的、支持多種編程語言的遠程服務調用的框架。 安裝thrift 從官網下載 然後按照./configure,make,make install 方式進行安裝,其他系統可以參照官網http://thrift.apache.org/docs/ ...
  • 下圖為測試結果: ...
  • 昨天沒有更新,特此來說明下原因,昨天回到家時已經甚晚,正逢公司這幾天項目比較緊張(bug多,趕需求,看著bug單齊刷刷的轉過來,心都顫抖了一下),沒有及時準備素材,今天又加了一天班(現在還在公司,偷個空隙趕緊發博,哈哈哈),所以昨晚沒有更博。 今天在改bug的時候發現瞭如圖的小問題,來分享一下,主要 ...
  • matplotlib實際上是一套面向對象的繪圖庫,它所繪製的圖表中的每個繪圖元素,例如線條Line2D、文字Text、刻度等在記憶體中都有一個對象與之對應。為了方便快速繪圖matplotlib通過pyplot模塊提供了一套和MATLAB類似的繪圖API,將眾多繪圖對象所構成的複雜結構隱藏在這套API內 ...
  • 轉自:http://blog.csdn.net/wushiwude/article/details/55101631 一、前言 dubbo的使用,其實只需要有註冊中心,消費者,提供者這三個就可以使用了,但是並不能看到有哪些消費者和提供者,為了更好的調試,發現問題,解決問題,因此引入dubbo-adm ...
  • 從一開始就讓我們簡化這次的討論。你有兩類你能夠繼承的函數:虛函數和非虛函數。然而,重新定義一個非虛函數總是錯誤的(Item 36),所以我們可以安全的把這個條款的討論限定在繼承帶預設參數值的虛函數上。 1. 虛函數是動態綁定的,而預設參數是靜態綁定的 在這種情況下,這個條款的驗證就相當直接了:虛函數 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...