REST 風格的 Web 服務入門

要學習本教程,您須要具有如下軟件和資源。 php

軟件或資源 要求的版本
NetBeans IDE Java EE 下載包
Java 開發工具包 (JDK) 版本 6 或 7
符合 Java EE 規範的應用服務器

Oracle WebLogic Server 11g-12c
或者 GlassFish Server Open Source Edition 3.x 或 4.x
(除非在 Tomcat 中安裝了 EJB 支持插件,不然不適用於 Tomcat) html

jdbc/sample 數據庫(位於 
Java DB (Derby) 數據庫服務器或 MySQL 
數據庫服務器上) java

在 Java DB (Derby) 上,jdbc/sample 數據庫是由 NetBeans IDE 生成的 
(若是將 IDE 與 GlassFish 應用服務器一塊兒安裝)。 mysql

經過 IDE 在 MySQL 服務器上建立樣例數據庫後,IDE 將在 MySQL 上填充該樣例數據庫。 web

GlassFish Server 能夠隨 NetBeans IDE 的 Web 和 Java EE 分發一塊兒安裝。或者,還能夠訪問 GlassFish Server 下載頁spring

重要說明:Java EE 6 和 Java EE 7 項目須要使用 GlassFish Server 或 Oracle WebLogic Server 12c。 sql

簡介

REST 風格的 Web 服務是使用 REST 風格的體系結構樣式構建的服務。因爲其輕量的特性而且支持直接經過 HTTP 傳輸數據,使用 REST 風格的方法構建 Web 服務做爲一種新興趨勢已經開始替代傳統的 Web 服務構建方式,即便用基於 SOAP 的技術在 Internet 上部署服務。 數據庫

IDE 支持使用 JSR 311 - Java API for RESTful Web Services (JAX-RS) 和 Jersey(JAX-RS 的引用實現)快速開發 REST 風格的 Web 服務。 json

有關詳細信息,請參見如下內容: 瀏覽器

除了支持構建 REST 風格的 Web 服務以外,IDE 還支持測試、構建可訪問 REST 風格的 Web 服務的客戶端應用程序,以及構建用於調用 Web 服務(REST 風格和基於 SOAP)的代碼。

下面是 IDE 提供的 REST 風格的功能列表:

  1. 經過 JPA 實體類和模式快速建立 REST 風格的 Web 服務。
  2. 經過在 "Services"(服務)窗口的 Web 服務管理器中拖放組件,快速生成可調用各類 Web 服務的代碼,好比 Google 地圖、Yahoo News Search 和 StrikeIron Web 服務。
  3. 爲 Web 服務管理器中的已註冊服務生成 REST 風格的 Java 客戶端。
  4. 生成測試客戶端,用於測試 REST 風格的 Web 服務。
  5. 提供可輕鬆瀏覽項目中 REST 風格的 Web 服務實現類的邏輯視圖。
  6. 徹底集成的 Spring Framework,提供 Spring 事務處理。

在本教程中,將介紹 IDE 如何支持生成、實現和測試 REST 風格的 Web 服務。

REST 風格的 Web 服務、持久性和實體類

Java 中 REST 風格的 Web 服務依靠 Java 持久性 API 與數據庫進行通訊。具體來講,REST 風格的 Web 服務依賴於持久性 API 中定義的實體類持久性單元。實體類是指映射到關係數據庫中的對象的 Java 類。按照 Java EE5 教程中的說法,「實體是一種小型持久性域對象。一般狀況下,實體表示關係數據庫中的表,每一個實體實例與該表中的一行相對應」。持久性單元包含 persistence.xml 文件中定義的實體類、數據源、持久性提供器以及持久性單元自身的名稱集合。

您可使用 NetBeans IDE 在同一過程當中建立實體類和 REST 風格的 Web 服務,也可使用 IDE 經過現有實體類建立 REST 風格的 Web 服務。在本教程中,將使用 "RESTful Services from Database"(經過數據庫生成 REST 風格的服務)嚮導在相同過程當中生成實體類和 REST 風格的 Web 服務。該向導會自動生成持久性單元。

使用 MySQL 數據庫服務器

若是使用的是 MySQL 數據庫服務器而不是 JavaDB (Derby),您須要在 IDE 中註冊該數據庫服務器,而後將 sample 數據庫添加到該服務器上。

在本教程中使用 MySQL 數據庫服務器:

  1. 若是未註冊 MySQL 服務器,請在 IDE 中註冊該服務器。要註冊 MySQL 服務器,請轉至 IDE 的 "Services"(服務)窗口,右鍵單擊 "Databases"(數據庫)節點,而後選擇 "Register MySQL Server"(註冊 MySQL 服務器)。 
  2. 此時將打開一個對話框,您能夠在其中鍵入 MySQL 服務器的配置詳細信息,包括管理員用戶名和口令。請參見鏈接到 MySQL 數據庫中的「配置 MySQL 服務器屬性」。

    正在 IDE 中註冊的 MySQL 服務器的基本屬性
  3. 啓動並鏈接到 MySQL 服務器。請參見鏈接到 MySQL 數據庫中的「啓動 MySQL 服務器」。
  4. 右鍵單擊 "MySQL Server"(MySQL 服務器)節點,而後選擇 "Create Database"(建立數據庫)。此時將打開 "Create MySQL Database"(建立 MySQL 數據庫)對話框。 
    建立數據庫上下文菜單選項
  5. 鍵入 sample 做爲新數據庫名稱。爲超級用戶或所選的用戶授予徹底訪問權限。
    已填充的
  6. 單擊 "OK"(肯定)。此時將打開一個對話框,告知您 sample 是樣例數據庫的名稱,並詢問您是否要爲該數據庫建立表、對象和數據。
    提示使用樣例數據填充數據庫
  7. 單擊 "Yes"(是)。IDE 將建立並填充該數據庫,並添加與該數據庫的鏈接。

經過數據庫建立 REST 風格的 Web 服務

本練習的目標是建立一個項目,並經過數據庫生成實體類和 REST 風格的 Web 服務。

此部分使用 JavaDB (Derby) 數據庫和 jdbc/sample 數據源。JavaDB 包含在 SDK 中。jdbc/sample 數據源是在同時安裝 IDE 與 GlassFish 時由 NetBeans IDE 自動生成的。

建立項目

要建立 REST 風格的 Web 服務,您須要建立 Java Web 應用程序項目。

要建立此項目,請執行如下操做:

  1. 選擇 "File"(文件)> "New Project"(新建項目)(在 Linux 和 Windows 上爲 Ctrl-Shift-N 組合鍵,在 MacOS 上爲 ⌘-Shift-N 組合鍵)。在 "Categories"(類別)下,選擇 "Java Web"。在 "Projects"(項目)下,選擇 "Web Application"(Web 應用程序)。單擊 "Next"(下一步)。此時將打開新建 Web 應用程序嚮導。

    或者,也能夠建立 Maven Web 應用程序。選擇 "File"(文件)> "New Project"(新建項目)(在 Linux 和 Windows 上爲 Ctrl-Shift-N 組合鍵,在 MacOS 上爲 ⌘-Shift-N 組合鍵)。在 "Categories"(類別)下,選擇 "Maven"。在 "Projects"(項目)下,選擇 "Maven Web Application"(Maven Web 應用程序),而後單擊 "Next"(下一步)。

  2. 在 "Project Name"(項目名稱)字段中,輸入 CustomerDB。單擊 "Next"(下一步)。
  3. 選擇 "Java EE 6 Web" 或 "Java EE 7 Web"。在 "Server"(服務器)下,選擇要使用的服務器,但請注意,Java EE 項目須要使用 GlassFish Server 3.x 或 4.x。依次單擊其他選項,而後單擊 "Finish"(完成)。

    Maven 項目重要說明:在 NetBeans IDE 7.2 中,在建立 Maven Web 應用程序時,您沒法設置服務器。而需在建立持久性單元以前設置服務器。所以,在建立 Maven Web 應用程序後,請打開項目的 "Properties"(屬性)對話框並在 "Run"(運行)屬性中設置服務器。要打開項目的 "Properties"(屬性)對話框,請右鍵單擊 "Project"(項目)節點,而後從上下文菜單中選擇 "Properties"(屬性)。

生成實體類和 REST 風格的服務

在建立 Java Web 應用程序後,將實體類和 REST 風格的 Web 服務添加到項目中。

生成實體類和 REST 風格的 Web 服務:

  1. 右鍵單擊 CustomerDB 節點,而後選擇 "New"(新建)> "Other"(其餘)> "Web Services"(Web 服務)> "RESTful Web Services from Database"(經過數據庫建立 REST 風格的 Web 服務)。此時將在 "Database Tables"(數據庫表)面板中打開新建 REST 風格的 Web 服務嚮導。
    菜單中的
  2. 在 "Database Tables"(數據庫表)面板中,若是使用的是 GlassFish Server,請從 "Data Source"(數據源)下拉列表字段中選擇 jdbc/sample 數據源。

    若是使用的是 Tomcat,請選擇 jdbc:derby://localhost:1527/sample。若是 Derby 數據庫服務器未能自動啓動,須要從 "Services"(服務)窗口的 "Databases"(數據庫)標籤中啓動它。

    MySQL 用戶注意事項:您必須建立新的數據源。選擇 "New Data Source"(新建數據源),指定任意描述性名稱,而後選擇jdbc:mysql://localhost:3306/sample 數據庫鏈接。在 MySQL 上建立樣例數據庫時建立了該鏈接。 
    使用 mysql 鏈接的新數據源

  3. 在 "Available Tables"(可用表)下,選擇 "CUSTOMER",而後單擊 "Add"(添加)。DISCOUNT_CODE 表(與 CUSTOMER 表有關聯)將自動添加到 "Selected Tables"(選定表)列表中。若是使用 MySQL 數據庫或某些版本的 Derby,則還將添加 MICRO_MARKET 表。如今將顯示如下內容(Derby 版本):

    「經過數據庫新建實體類」嚮導的
  4. 單擊 "Next"(下一步)。"Entity Classes"(實體類)頁打開。爲包名鍵入 entities。如今將顯示如下內容(Derby 版本)。

    注:"RESTful Web Services from Database"(經過數據庫建立 REST 風格的 Web 服務)嚮導會自動生成 JAXB 標註。若是使用 "Entity Classes from Database"(經過數據庫生成實體類)嚮導爲 Java EE 應用程序生成實體類,而且之後可能要經過這些實例類建立 REST 風格的 Web 服務,請確保選中 "Generate JAXB Annotations"(生成 JAXB 標註)框。此外,還能夠在運行 "RESTful Web Services from Entity Classes"(經過實體類建立 REST 風格的 Web 服務)嚮導以前手動將 JAXB 標註添加到實體類中。有關詳細信息,請參見用於生成更簡單的 REST 風格 Web 服務的 NetBeans

  5. 單擊 "Next"(下一步)。打開了一個面板,在其中能夠設置生成的服務類和包的名稱及位置。對於 Java EE 項目,能夠選擇更改 REST 應用程序配置類的名稱和位置。

    Spring 框架應用程序: web.xml 部署描述符中註冊 REST 風格的資源。不要使用 javax.ws.rs.core.Application。

    在本教程中,接受默認值,而後單擊 "Finish"(完成)。單擊 "Finish"(完成)後,IDE 將生成實體類和服務類。在 Java EE 項目中,IDE 還將生成應用程序配置類,這是應用程序的子類。

    生成的服務和服務配置類及包

IDE 如今將生成 REST 風格的 Web 服務。在 IDE 完成後,查看 "Projects"(項目)窗口。生成的實體類位於 entities 包中,服務位於 service 包中。經過數據庫建立的 Java EE REST 風格的 Web 服務將實例化每一個服務類中的 EntityManager。這就不須要使用 JPA 控制器類並可生成更簡單的代碼。

測試 REST 風格的 Web 服務

本練習的目標是試驗您的應用程序。您將爲測試建立一個新的 Web 應用程序,而後使用 IDE 中的嚮導在新項目中生成測試。

  1. 從主菜單中選擇 "File"(文件)> "New Project"(新建項目)。
  2. 在 "Java Web" 類別中選擇 "Web Application"(Web 應用程序)項目類型。單擊 "Next"(下一步)。
  3. 爲項目名稱鍵入 WebServicesTest。單擊 "Next"(下一步)。
  4. 選擇 "GlassFish Server" 做爲目標服務器,並選擇 "Java EE 6 Web" 或 "Java EE 7 Web" 做爲 Java EE 版本。單擊 "Finish"(完成)。
  5. 右鍵單擊 CustomerDB 項目節點,並選擇 "Test RESTful Web Services"(測試 REST 風格的 Web 服務)。此時將打開一個對話框,詢問您是否要在服務項目或其餘 Java Web 項目中生成測試客戶端。經過此選項,能夠解決某些瀏覽器中的安全限制問題。只要將 Web 項目配置爲在 CustomerDB 項目所在的同一個服務器域中部署,您就可使用任何 Web 項目了。 
    選擇是在本地生成測試客戶端仍是在部署於相同域中的其餘 Java Web 項目中生成測試客戶端的對話框
  6. 選擇 Web Test Client in Project(項目中的 Web 測試客戶端),而後單擊 "Browse"(瀏覽)。
  7. 在 "Select Project"(選擇項目)對話框中選擇 "WebServiceTest" 項目。單擊 "OK"(肯定)。

    IDE 將在 WebServiceTest 項目中生成文件 test-resbeans.html。IDE 還將自動啓動服務器並部署 CustomerDB 應用程序。

    若是輸出窗口顯示錯誤消息,指出一個或多個類不存在,且項目未構建,則請將 Jersey 庫添加到編譯時庫中。右鍵單擊項目節點,而後選擇 "Properties"(屬性)。在 "Properties"(屬性)樹狀菜單中選擇 "Libraries"(庫)。單擊 "Add Library"(添加庫)並定位到 Jersey 庫。

  8. 右鍵單擊 "WebServiceTest",而後選擇 "Run"(運行)。
  9. 將瀏覽器打開到 http://localhost:8080/WebServicesTest/test-resbeans.html 
    瀏覽器中 REST 風格的 Web 服務測試器登陸頁

    左側是根資源集。此處將其命名爲 entities.customer、entities.discountCodes  entities.microMarket。

  10. 單擊 entities.customer 節點。在 "Choose method to test"(選擇要測試的方法)字段中,選擇 GET (application/json) 或 GET (application/xml)。單擊 "Test"(測試)。測試客戶端發送請求並在 "Test Output"(測試輸出)部分中顯示結果。默認狀況下,測試客戶端顯示原始視圖。如下圖像顯示了對 application/xml 請求的響應。
    REST 風格的 Web 服務測試器中的原始視圖窗口

"Test Output"(測試輸出)區域中有 5 個標籤。

  • 表格視圖是平面視圖,其中顯示生成的文檔中的全部 URI。當前此視圖僅顯示警告,指示不容許容器-包含物關係。
  • "Raw View"(原始視圖)顯示返回的實際數據。根據您選擇的 mime 類型(application/xml  application/json),顯示的數據將分別爲 XML 或 JSON 格式。
  • "Sub Resource"(子資源)標籤將顯示根資源和子資源的 URL。當 REST 風格的 Web 服務是基於數據庫實體類時,根資源表明了數據庫表,而子資源則表明列。
  • "Headers"(頭)標籤顯示 HTTP 頭信息。
  • "HTTP Monitor"(HTTP 監視)標籤顯示發送和接收的實際 HTTP 請求數和響應數。

退出瀏覽器並返回到 IDE。

Spring Framework 中 REST 風格的 Web 服務

Jersey 集成到了 Spring Framework 中。在使用 Spring Framework 建立 Java Web 應用程序時,會自動建立識別 REST 的 Servlet。不過,Spring 3 不包含 aopalliance.jar,REST 風格的 Web 服務須要使用它來注入 EntityManager 對象。

使用 Spring Framework 建立 Java Web 應用程序

按照經過數據庫生成實體類中所述在新建項目嚮導中建立 Java Web 應用程序時,在選擇服務器後,單擊 "Next"(下一步)而不是單擊 "Finish"(完成)將打開向導的 "Frameworks"(框架)面板。選擇 "Spring Web MVC",而後單擊 "Finish"(完成)。

注:若是您已建立項目,則能夠經過在 "Projects"(項目)窗口中右鍵單擊項目節點,而後在彈出菜單中選擇 "Properties"(屬性),來添加對 Spring Web MVC 框架的支持。在 "Project Properties"(項目屬性)窗口中,選擇 "Frameworks"(框架)類別,而後單擊 "Add"(添加)並選擇 "Spring Web MVC"。

將 aopalliance.jar 添加到項目中

Spring 3 不包含 aopalliance.jar。該應用程序須要使用此庫才能注入 EntityManager。要解決問題,您須要下載此 JAR,並將其添加到類路徑中。請參見問題 193626 Spring 論壇

添加 aopalliance.jar:

  1.  http://sourceforge.net/projects/aopalliance/files/aopalliance/1.0/ 下載 aopalliance.jar 的 zip 檔案。
  2. 將該檔案解壓縮到所選位置。
  3. 在 "Projects"(項目)窗口中,右鍵單擊 "Spring RESTful Web Service"(Spring REST 風格的 Web 服務)項目節點並在彈出菜單中選擇 "Properties"(屬性),而後在 "Project Properties"(項目屬性)窗口中選擇 "Libraries"(庫)類別。
    顯示屬性節點的上下文菜單

    或者,也能夠在 "Projects"(項目)窗口中右鍵單擊項目的 "Libraries"(庫)節點,而後選擇 "Add JAR/Folder"(添加 JAR/文件夾)。

  4. 單擊 "Add JAR/Folder"(添加 JAR/文件夾),而後在文件系統瀏覽器中查找 aopalliance.jar。單擊 "Open"(打開)。

    您須要使用絕對路徑引用。

    瀏覽 aopalliance.jar
  5. aopalliance.jar 文件如今包含在您的庫中。單擊 "OK"(肯定)。 
    顯示已添加的 aopalliance.jar 的庫屬性

在啓用 Spring 的項目中建立 REST 風格的服務

使用 Spring Framework 建立 Java Web 應用程序並將 aopalliance.jar 添加到項目的類路徑後,請運行 "RESTful Web Service from Database"(經過數據庫生成 REST 風格的 Web 服務)嚮導,如生成實體和服務中所述。可是,不會將 REST 風格的資源註冊到 javax.ws.rs.core.Application 的子類中。而是使用 web.xml 部署描述符。在全部狀況下,Spring Framework 都會生成 web.xml 部署描述符。

用於註冊 REST 風格的資源的選項,選擇了 web.xml

有關 NetBeans IDE 中 Spring Framework 項目功能的詳細信息,請參見 Spring Framework 簡介

編譯錯誤

已生成的服務類中可能存在編譯錯誤。若是在向類路徑中添加 aopalliance.jar 前建立 REST 風格的服務,則能夠查看這些錯誤。

解決服務類中的編譯錯誤:

  1. 確保將 aopalliance.jar 添加到類路徑中,如將 aopalliance.jar 添加到項目中所述。
  2. 在 IDE 的頂部菜單欄中,單擊 "Edit"(編輯),而後選擇 "Find in Projects..."(在項目中查找...)。
  3. 在項目中搜索具備 @Error  標註的全部實例。
    顯示搜索 <a href='http://my.oschina.net/u/102809' class='referer' target='_blank'>@Error</a>  標註的
  4. 從代碼中刪除每一個 @Error  行。
    <a href='http://my.oschina.net/u/102809' class='referer' target='_blank'>@Error</a>  的搜索結果,突出顯示了一行,而且將要刪除該行
相關文章
相關標籤/搜索