日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JavaEE6引入的三大新技術(shù)之JAX-RS

【精選譯文】上周我們介紹了Java EE 6平臺(tái)的主要目標(biāo),本篇介紹這個(gè)版本中引入的新技術(shù)。這些新技術(shù)使這個(gè)平臺(tái)變得更加強(qiáng)大,其中三個(gè)重要的新技術(shù)包括:編輯推薦您閱讀《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)為是可通過URI識(shí)別和訪問的資源。為了操縱這些資源,網(wǎng)絡(luò)組件,客戶端和服務(wù)器通過一個(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í)特性和直接通過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ù)變得簡單。

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中的新特性保持一致。

下面我們一起來看一個(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()方法上指定的,注解指定了方法能夠接受的來自客戶端的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)一步簡化有關(guān)構(gòu)建行為的實(shí)用類和接口,前面看到的MediaType就是這樣的類,它抽象了MIME媒體類型。其它的一些類和接口是:

UriInfo:訪問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ì)象的類。

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

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

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

#T#第二個(gè)語句為新項(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è)原因是它簡化了構(gòu)建RESTful Web服務(wù),JAX-RS可以簡化許多類型的Web應(yīng)用程序,例如,如果你需要構(gòu)建一個(gè)檢查HTTP頭的應(yīng)用程序,JAX-RS比采用其它技術(shù)就更簡單。

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

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


網(wǎng)站標(biāo)題:JavaEE6引入的三大新技術(shù)之JAX-RS
分享路徑:http://www.5511xx.com/article/cdhsjpp.html