自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java EE 6引入的三大新技術(shù)之JAX-RS

原創(chuàng)
開發(fā) 后端
Java EE 6引入的新技術(shù)使其成為一個(gè)更強(qiáng)大的平臺(tái),其中包括三個(gè)重要技術(shù):RESTful Web Services(JSR 311)、上下文和依賴性注入(JSR 299),以及Bean驗(yàn)證(JSR 303)。本文介紹JSR 311,簡(jiǎn)稱JAX-RS。

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

◆RESTful Web Services Java API (JAX-RS)

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

◆Bean驗(yàn)證

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

RESTful Web Services Java API (JAX-RS)

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

RESTful Web服務(wù)是按照REST架構(gòu)風(fēng)格構(gòu)建的Web服務(wù),利用RESTful方法使用基于SOAP的技術(shù)構(gòu)建Web服務(wù)已經(jīng)成為一個(gè)受歡迎的選擇,這都得感謝REST的輕量級(jí)特性和直接通過(guò)HTTP傳輸數(shù)據(jù)的能力。

JAX-RS為在Java中構(gòu)建RESTful Web服務(wù)提供了標(biāo)準(zhǔn)化API,API提供了一組注解,以及相關(guān)的類和接口。對(duì)POJO應(yīng)用注解允許你暴露Web資源,這個(gè)方法使得在Java中創(chuàng)建RESTful Web服務(wù)變得簡(jiǎn)單。

JAX-RS 1.0技術(shù)規(guī)范定稿于2008年10月,包括了一個(gè)參考實(shí)現(xiàn)Jersey,Java EE 6包括了這個(gè)技術(shù)規(guī)范的***版本JAX-RS 1.1,這個(gè)版本與Java EE 6中的新特性保持一致。

下面我們一起來(lái)看一個(gè)使用JAX-RS構(gòu)建的RESTful Web服務(wù):

  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.  

在這個(gè)例子中,ItemsResource類是管理一組項(xiàng)目的Web服務(wù),類中導(dǎo)入了JAX-RS 1.1注解,類和接口。

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

@GET注解指定了注解的方法,這里是listItems()方法,它處理HTTP GET請(qǐng)求,當(dāng)某個(gè)客戶端直接發(fā)起對(duì)ItemsResource資源的HTTP GET請(qǐng)求時(shí),JAX-RS運(yùn)行時(shí)調(diào)用listItems()方法處理這個(gè)GET請(qǐng)求。

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

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

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

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

JAX-RS然后會(huì)將Items Java類型轉(zhuǎn)換為text/plain MIME類型,返回這種類型的內(nèi)容給HTTP請(qǐng)求客戶端。

@POST注解指定了注解的方法,這里是create()方法,它負(fù)責(zé)響應(yīng)HTTP POST請(qǐng)求。在這個(gè)例子中,這個(gè)方法創(chuàng)建了一個(gè)新項(xiàng)目,然后返回一個(gè)表示它已創(chuàng)建了一個(gè)新項(xiàng)目的響應(yīng),當(dāng)客戶端直接向ItemsResource資源發(fā)起HTTP POST請(qǐng)求時(shí),JAX-RS運(yùn)行時(shí)調(diào)用create()方法處理POST請(qǐng)求。

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

JAX-RS也包括大量的進(jìn)一步簡(jiǎn)化有關(guān)構(gòu)建行為的實(shí)用類和接口,前面看到的MediaType就是這樣的類,它抽象了MIME媒體類型。其它的一些類和接口是:

UriInfo:訪問(wèn)URI信息的接口,在這個(gè)例子中,@Context注解注入U(xiǎn)riInfo接口到ItemsResource類中的uriInfo字段。

UriBuilder:從它們的組件構(gòu)建URI的類。

Response:代表HTTP響應(yīng)的類。

Response.ResponseBuilder:根據(jù)著名的Builder模式構(gòu)建Response對(duì)象的類。

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

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

***個(gè)語(yǔ)句為新項(xiàng)目構(gòu)建一個(gè)URI,getRequestUriBuilder()方法是創(chuàng)建UriBuilder對(duì)象的UriInfo方法,path() 和 build()方法是為新項(xiàng)目一起構(gòu)造URI的UriBuilder方法。

#T#第二個(gè)語(yǔ)句為新項(xiàng)目創(chuàng)建一個(gè)返回給客戶端的Response對(duì)象,created方法是一個(gè)創(chuàng)建Response.ResponseBuilder 對(duì)象的Response方法,build()方法是一個(gè)為新項(xiàng)目創(chuàng)建Response 對(duì)象的Response.ResponseBuilder方法,這個(gè)對(duì)象提交元數(shù)據(jù)給JAX-RS運(yùn)行時(shí)構(gòu)造HTTP響應(yīng)。

這些實(shí)用類和接口隱藏了HTTP編程的許多復(fù)雜性,使用JAX-RS的另一個(gè)原因是它簡(jiǎn)化了構(gòu)建RESTful Web服務(wù),JAX-RS可以簡(jiǎn)化許多類型的Web應(yīng)用程序,例如,如果你需要構(gòu)建一個(gè)檢查HTTP頭的應(yīng)用程序,JAX-RS比采用其它技術(shù)就更簡(jiǎn)單。

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

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

責(zé)任編輯:yangsai 來(lái)源: 51CTO.com
相關(guān)推薦

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 基礎(chǔ)

2016-01-25 09:45:49

數(shù)據(jù)中心網(wǎng)絡(luò)技術(shù)

2009-12-23 09:50:45

JAX-RSJerseyRESTful

2022-06-07 10:09:42

新技術(shù)人工智能5G

2023-08-14 11:27:17

2011-09-05 11:04:25

Ubuntu 11.1LightDM

2009-04-27 12:26:45

AMD單核Nehalem

2022-05-25 07:49:52

人工智能邊緣計(jì)算區(qū)塊鏈

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

2013-07-01 13:41:09

iOS7WWDC姿勢(shì)控制

2009-12-07 10:40:24

.NET 4.0

2015-03-18 14:02:25

生物識(shí)別認(rèn)證Windows10

2024-09-02 10:21:21

2024-01-31 16:52:51

2019-08-27 15:38:19

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)