成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java EE 6引入的三大新技術之JAX-RS

原創
開發 后端
Java EE 6引入的新技術使其成為一個更強大的平臺,其中包括三個重要技術:RESTful Web Services(JSR 311)、上下文和依賴性注入(JSR 299),以及Bean驗證(JSR 303)。本文介紹JSR 311,簡稱JAX-RS。

【51CTO精選譯文】上周我們介紹了Java EE 6平臺的主要目標,本篇介紹這個版本中引入的新技術。這些新技術使這個平臺變得更加強大,其中三個重要的新技術包括:51CTO編輯推薦您閱讀《Java EE 6平臺指南》專題了解更多。

◆RESTful Web Services Java API (JAX-RS)

◆面向Java EE平臺的上下文和依賴性注入(CDI)

◆Bean驗證

本文將介紹RESTful Web Services Java API (JAX-RS)。

RESTful Web Services Java API (JAX-RS)

RESTful Web Services Java API (JAX-RS),JSR 311讓你可以迅速構建遵循REST(Representational State Transfer,表象化狀態轉變。參考閱讀:《什么是REST》)風格軟件架構的輕量級Web服務。REST中的一個重要概念是資源的存在性,每個資源都一個全局引用標識符,即URI。特別是數據和函數都被認為是可通過URI識別和訪問的資源。為了操縱這些資源,網絡組件,客戶端和服務器通過一個標準的接口通信,如HTTP和一個組固定的動詞 — GET,PUT,POST和DELETE — 交換這些資源。

RESTful Web服務是按照REST架構風格構建的Web服務,利用RESTful方法使用基于SOAP的技術構建Web服務已經成為一個受歡迎的選擇,這都得感謝REST的輕量級特性和直接通過HTTP傳輸數據的能力。

JAX-RS為在Java中構建RESTful Web服務提供了標準化API,API提供了一組注解,以及相關的類和接口。對POJO應用注解允許你暴露Web資源,這個方法使得在Java中創建RESTful Web服務變得簡單。

JAX-RS 1.0技術規范定稿于2008年10月,包括了一個參考實現Jersey,Java EE 6包括了這個技術規范的***版本JAX-RS 1.1,這個版本與Java EE 6中的新特性保持一致。

下面我們一起來看一個使用JAX-RS構建的RESTful Web服務:

  1. import javax.ws.rs.Path;  
  2.    import javax.ws.rs.Produces;  
  3.    import javax.ws.rs.Get;  
  4.    import javax.ws.rs.Post;  
  5.    import javax.ws.rs.Consumes;  
  6.    import javax.ws.rs.core.Response;  
  7.    import javax.ws.rs.core.MediaType;  
  8.    import javax.ws.rs.core UriInfo;  
  9.    import javax.ws.rs.core.UriBuilder;  
  10.    import java.net.URI;  
  11.  
  12.    @Path ("items")  
  13.    @Produces (MediaType.APPLICATION_XML)  
  14.    Public class ItemsResource {  
  15.  
  16.        @Context UriInfo uriInfo;  
  17.  
  18.        @GET 
  19.        Items listItems() {  
  20.            Return Allitems();  
  21.        }  
  22.  
  23.        @POST 
  24.        @Consumes (MediaType.APPLICATION_XML)  
  25.        Public Response create(Item item) throws ItemCreationException {  
  26.            Item newItem = createItem(item);  
  27.            URI newItemURI = uriInfo.getRequestUriBuilder().path(newItem.getId()).build();  
  28.            return Response.created(newItemURI).build();  
  29.        }  
  30.  
  31.        ...  
  32.    }  
  33.  

在這個例子中,ItemsResource類是管理一組項目的Web服務,類中導入了JAX-RS 1.1注解,類和接口。

@Path注解指定了資源的相對路徑,在這里是“items”,類資源URI是基于應用程序上下文的,因此,如果應用程序上下文在這個例子中是http://example.com,那么類資源的URI就是http://example.com/items,這意味著如果一個客戶端直接請求URI http://example.com/items,ItemsResource類將會執行。

@GET注解指定了注解的方法,這里是listItems()方法,它處理HTTP GET請求,當某個客戶端直接發起對ItemsResource資源的HTTP GET請求時,JAX-RS運行時調用listItems()方法處理這個GET請求。

注意@Produces注解,它指定了返回給客戶端的MIME媒體類型,在ItemsResource這個例子中,@Produces注解指定了MediaType.APPLICATION_XML,MediaType類是一個抽象的MIME媒體類型,MediaType.APPLICATION_XML是XML內容MIME媒體類型的抽象 — application/xml。

注解如@Produces建議JAX-RS自動轉換某些內容類型,例如,listItems()方法返回一個Items類型的Java對象,JAX-RS自動將這個Java類型轉換成application/xml MIME類型,使用這個MIME類型響應客戶端的HTTP請求。注意僅當返回的類型默認是支持的才會自動轉換,例如,如果Items是一個JAXB注解Bean,那么將會自動轉換,但如果Items是一個POJO,你需要執行MessageBodyReader處理序列化。

你也可以在一個方法上指定@Produces注解,在上面的例子中,你在方法上指定的MIME類型覆蓋了在類的@Produces注解中指定的MIME類型,例如,你可以象下面這樣為listItems()方法指定@Produces注解:

  1. @GET 
  2.        @Produces (MediaType.TEXT_PLAIN)  
  3.        Items listItems() {  
  4.            Return Allitems();  
  5.        } 

JAX-RS然后會將Items Java類型轉換為text/plain MIME類型,返回這種類型的內容給HTTP請求客戶端。

@POST注解指定了注解的方法,這里是create()方法,它負責響應HTTP POST請求。在這個例子中,這個方法創建了一個新項目,然后返回一個表示它已創建了一個新項目的響應,當客戶端直接向ItemsResource資源發起HTTP POST請求時,JAX-RS運行時調用create()方法處理POST請求。

注意@Consumes注解是在create()方法上指定的,注解指定了方法能夠接受的來自客戶端的MIME媒體類型。如果你在類上指定@Consumes,它適用于類中的所有方法,如果你在方法上指定@Consumes,它會覆蓋你在類上指定的@Consumes注解包含的MIME類型。在這個例子中,@Consumes注解指定create()方法可接受XML內容,即MIME類型application/xml,這是從MIME類型轉換到Java類型。當某個客戶端在POST請求中提交XML內容時,JAX-RS調用create()方法自動將傳入的XML內容轉換成方法需要的Item Java類型。

JAX-RS也包括大量的進一步簡化有關構建行為的實用類和接口,前面看到的MediaType就是這樣的類,它抽象了MIME媒體類型。其它的一些類和接口是:

UriInfo:訪問URI信息的接口,在這個例子中,@Context注解注入UriInfo接口到ItemsResource類中的uriInfo字段。

UriBuilder:從它們的組件構建URI的類。

Response:代表HTTP響應的類。

Response.ResponseBuilder:根據著名的Builder模式構建Response對象的類。

這些類和接口在下面這些語句中非常有用:

  1. URI newItemURI = uriInfo.getRequestUriBuilder().path(newItem.getId()).build();  
  2.    return Response.created(newItemURI).build(); 

***個語句為新項目構建一個URI,getRequestUriBuilder()方法是創建UriBuilder對象的UriInfo方法,path() 和 build()方法是為新項目一起構造URI的UriBuilder方法。

#T#第二個語句為新項目創建一個返回給客戶端的Response對象,created方法是一個創建Response.ResponseBuilder 對象的Response方法,build()方法是一個為新項目創建Response 對象的Response.ResponseBuilder方法,這個對象提交元數據給JAX-RS運行時構造HTTP響應。

這些實用類和接口隱藏了HTTP編程的許多復雜性,使用JAX-RS的另一個原因是它簡化了構建RESTful Web服務,JAX-RS可以簡化許多類型的Web應用程序,例如,如果你需要構建一個檢查HTTP頭的應用程序,JAX-RS比采用其它技術就更簡單。

JAX-RS還有其它便捷功能,例如,JAX-RS包括大量基于參數的注解,從請求中提取信息,@QueryParam就是這樣的注解,通過它你可以從請求URL中的Query組件提取查詢參數,其它基于參數的注解還有@MatrixParam,它從URL路徑提取信息,@HeaderParam注解從HTTP頭提取信息,@CookieParam從Cookies提取信息。

原文名:Powerful New Technologies 作者:Ed Ort

責任編輯:yangsai 來源: 51CTO.com
相關推薦

2010-01-22 09:52:32

JPA 2.0Java EE 6

2009-09-22 13:04:19

ibmdwREST

2021-10-25 08:16:20

Java JAX-RS Java 基礎

2016-01-25 09:45:49

數據中心網絡技術

2009-12-23 09:50:45

JAX-RSJerseyRESTful

2023-08-14 11:27:17

2022-06-07 10:09:42

新技術人工智能5G

2011-09-05 11:04:25

Ubuntu 11.1LightDM

2022-05-25 07:49:52

人工智能邊緣計算區塊鏈

2009-04-27 12:26:45

AMD單核Nehalem

2022-09-07 18:01:58

AI芯片

2023-05-05 14:14:10

2010-10-15 10:55:52

Chrome 8

2009-09-18 12:15:53

GoogleChrome 3.0HTML 5

2024-01-31 16:52:51

2009-12-07 10:40:24

.NET 4.0

2015-03-18 14:02:25

生物識別認證Windows10

2019-08-27 15:38:19

2013-07-01 13:41:09

iOS7WWDC姿勢控制

2024-09-02 10:21:21

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99免费视频 | 在线观看国产www | 日日夜夜视频 | 亚洲一二三区在线观看 | 国产精品.xx视频.xxtv | 一区2区 | 亚洲啊v在线 | 色五月激情五月 | 亚洲欧美在线视频 | 91九色在线观看 | 综合一区二区三区 | 亚洲精品在线免费看 | 免费观看一级特黄欧美大片 | 日本特黄a级高清免费大片 国产精品久久性 | 综合国产| www.99热这里只有精品 | 免费色网址 | 国产成人精品免费视频大全最热 | 91视频18| 亚洲国产一区在线 | 蜜桃精品视频在线 | 亚洲成av人片在线观看 | 成人一级视频在线观看 | 毛片毛片毛片毛片毛片 | 九九国产| 国产成人99久久亚洲综合精品 | 久久国产视频网 | 国内久久| 亚洲视频在线一区 | 国产精品免费一区二区三区四区 | 亚洲精品一区中文字幕乱码 | 亚洲精品一区中文字幕乱码 | 精品一区二区三区在线观看国产 | av一区二区三区 | 91在线免费观看网站 | 一级黄色毛片 | 久久精品视频一区二区三区 | 91免费看片神器 | 青青草这里只有精品 | 久久中文网| 亚洲一区国产精品 |