日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

JAX-RS 2.0:服务器端处理管道

發(fā)布時(shí)間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAX-RS 2.0:服务器端处理管道 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這篇文章的靈感來自JAX-RS 2.0規(guī)范文檔 (附錄C)中的Processing Pipeline部分。 我喜歡它是因?yàn)樗峁┝薐AX-RS中所有模塊的漂亮快照-以準(zhǔn)備好吞咽的膠囊形式!

禮貌– JAX-RS 2.0規(guī)范文檔

因此,我想到了使用此圖簡(jiǎn)要概述不同的JAX-RS組件以及它們?nèi)绾蜗嗷ヅ浜稀?

涵蓋了什么?

  • 過濾器(請(qǐng)求和響應(yīng))
  • 方法匹配
  • 注射
  • 攔截器(請(qǐng)求和響應(yīng))
  • 實(shí)體提供者(請(qǐng)求和響應(yīng))

注意:這里討論的是服務(wù)器端處理管道,即在客戶端發(fā)送HTTP請(qǐng)求(GET,POST,PUT等)后觸發(fā)的動(dòng)作序列

當(dāng)客戶端(瀏覽器或自定義REST客戶端)向您的RESTful服務(wù)發(fā)送HTTP請(qǐng)求時(shí),一切就開始了!

請(qǐng)求過濾器(鏈)

客戶端請(qǐng)求由JAX-RS過濾器處理。 它們適用于服務(wù)器端和客戶端(我們將研究服務(wù)器端過濾器-基于請(qǐng)求和響應(yīng))

  • 過濾器是可選組件,您可以通過簡(jiǎn)單地實(shí)現(xiàn)ContainerRequestFilter接口來編寫過濾器。 需要使用@Provider批注對(duì)它們進(jìn)行批注,以通過JAX-RS運(yùn)行時(shí)自動(dòng)檢測(cè)
  • 可以更改ContainerRequestContext的實(shí)例并更改標(biāo)頭,Cookie,URI等屬性。過濾器不允許您訪問HTTP請(qǐng)求正文/消息有效負(fù)載( 攔截器可以執(zhí)行此操作)
  • 可用于實(shí)現(xiàn)日志記錄,身份驗(yàn)證等
  • 如果需要在資源方法匹配之前執(zhí)行過濾器實(shí)現(xiàn)類,請(qǐng)?jiān)趯?shí)現(xiàn)類上使用@PreMatching批注。
  • 篩選器可以綁定到所有JAX-RS方法(全局),也可以使用@NamedBinding批注或DynamicFeature接口的實(shí)現(xiàn)有選擇地綁定
  • @Priority批注可用于確定多個(gè)過濾器(順序鏈)的執(zhí)行順序。

方法匹配

在(成功)執(zhí)行過濾器之后,JAX-RS運(yùn)行時(shí)將啟動(dòng)資源方法匹配過程

  • 要調(diào)用的確切方法基于規(guī)范概述的算法 (盡管JAX-RS提供程序不受其約束)
  • 由以下提到的注釋的組合確定
  • @ GET,@ PUT,@ POST,@ DELETE等–這些注釋應(yīng)與實(shí)際的HTTP操作匹配(注釋到HTTP動(dòng)詞的映射非常明顯)
  • @Path –其值(相對(duì)于上下文根)用于映射請(qǐng)求URI,例如/ tweeters / all
  • @Consumes –其值應(yīng)與HTTP請(qǐng)求中發(fā)送的Content-Type標(biāo)頭值匹配
  • @Produces –其值應(yīng)與HTTP請(qǐng)求中發(fā)送的Accept標(biāo)頭值匹配

HTTP組件注入

方法匹配完成后,所需的HTTP組件將在JAX-RS運(yùn)行時(shí)注入到JAX-RS資源類中(如果已配置)。 我們需要做的就是使用適當(dāng)?shù)淖⑨?

HTTP URI參數(shù)

  • @QueryParam –從URI查詢參數(shù)中提取值并將其注入,例如, http : //tweeter.com/info?tweeter = abhi_tweeter上的GET請(qǐng)求
  • @PathParam –從URI模板參數(shù)中提取值并將其注入,例如在http://tweeter.com/info/tweeter/abhi_tweeter上的GET請(qǐng)求
  • @MatrixParam –從URI矩陣參數(shù)中提取值并將其注入

其他HTTP組件

JAX-RS使訪問(注入)HTTP請(qǐng)求組件(例如標(biāo)頭,cookie甚至HTTP表單數(shù)據(jù))變得容易

  • @HeaderParam –提取請(qǐng)求的標(biāo)頭。 您還可以使用@Context批注注入HttpHeaders實(shí)例
  • @CookieParam –用于從HTTP請(qǐng)求注入HTTP cookie
  • @FormParam –可以幫助使用HTTP POST請(qǐng)求從通過HTML表單發(fā)送的屬性中插入值
  • @BeanParam –可以幫助在自定義域類的實(shí)例變量上使用上述所有與注入相關(guān)的注釋,而不是使用這些注釋將值注入各個(gè)方法參數(shù)

請(qǐng)求攔截器(鏈)

攔截器適用于服務(wù)器端和客戶端(我們將僅查看服務(wù)器端攔截器-基于請(qǐng)求和響應(yīng))

  • 攔截器有助于在處理HTTP請(qǐng)求有效負(fù)載之前對(duì)其進(jìn)行突變
  • 僅當(dāng)在JAX-RS運(yùn)行時(shí)中注冊(cè)了MessageBodyReader (請(qǐng)參見下一主題)實(shí)現(xiàn)時(shí),才調(diào)用請(qǐng)求攔截器。
  • 用于傳入服務(wù)器請(qǐng)求的攔截器由ReaderInterceptor接口的實(shí)現(xiàn)處理,并且需要使用@Provider注釋進(jìn)行注釋,以由JAX-RS運(yùn)行時(shí)自動(dòng)檢測(cè)
  • ReaderInterceptorContext實(shí)例在JAX-RS運(yùn)行時(shí)傳遞,并且可以使用java.io.InputStream形式訪問HTTP正文。
  • 攔截器可以(全局)綁定到所有JAX-RS方法,也可以通過使用@NamedBinding批注或DynamicFeature接口的實(shí)現(xiàn)有選擇地綁定
  • 攔截器可以被鏈接和(使用@priority)和優(yōu)先呼叫的繼續(xù)進(jìn)行的ReaderInterceptorContext的方法自動(dòng)調(diào)用鏈中的或化MessageBodyReader實(shí)現(xiàn)本身下一個(gè)攔截
  • ReaderInterceptor充當(dāng)MessageBodyReader的包裝器(在內(nèi)部調(diào)用)

實(shí)體提供者(

實(shí)體提供者幫助將HTTP消息有效負(fù)載轉(zhuǎn)換為適當(dāng)?shù)腏ava類型(用于注入到JAX-RS資源類的方法參數(shù)中),反之亦然

  • HTTP請(qǐng)求有效負(fù)載到其對(duì)應(yīng)的Java類型的轉(zhuǎn)換是通過實(shí)現(xiàn)MessageBodyReader接口的具體類完成的
  • MessageBodyReader實(shí)現(xiàn)的readFrom方法是執(zhí)行操作的地方。 JAX-RS運(yùn)行時(shí)會(huì)傳入所有上下文信息,包括有效載荷本身(以InputStream的形式),然后可以對(duì)其進(jìn)行自省并將其轉(zhuǎn)換為適當(dāng)?shù)腏ava類型。
  • JAX-RS規(guī)范要求,對(duì)于某些Java類型(例如String,InputStream,File等),實(shí)現(xiàn)應(yīng)包含MessageBodyReader接口的現(xiàn)成實(shí)現(xiàn)。

響應(yīng)過濾器(鏈)

響應(yīng)過濾器類似于前面討論的以請(qǐng)求為中心的過濾器。

  • 響應(yīng)過濾器是可選組件,您可以通過簡(jiǎn)單地實(shí)現(xiàn)ContainerResponseFilter接口來編寫一個(gè)。
  • 這些類型的過濾器用于修改響應(yīng)標(biāo)頭,添加cookie等。可以更改ContainerResponseContext的實(shí)例并更改屬性以實(shí)現(xiàn)此目的。 過濾器不允許您訪問HTTP響應(yīng)正文/消息有效負(fù)載( 攔截器可以執(zhí)行此操作)
  • 需要使用@Provider批注對(duì)它們進(jìn)行批注,以通過JAX-RS運(yùn)行時(shí)自動(dòng)檢測(cè)
  • 篩選器可以綁定到所有JAX-RS方法(全局),也可以使用@NamedBinding批注或DynamicFeature接口的實(shí)現(xiàn)有選擇地綁定
  • @Priority批注可用于確定多個(gè)過濾器(順序鏈)的執(zhí)行順序。

響應(yīng)攔截器(鏈)

  • 僅當(dāng)注冊(cè)MessageBodyWriter (請(qǐng)參閱下一主題)以處理傳出的HTTP有效負(fù)載時(shí),才調(diào)用它們。
  • 傳出服務(wù)器響應(yīng)的攔截器由類WriterInterceptor的實(shí)現(xiàn)處理,并且需要使用@Provider注釋進(jìn)行注釋,以由JAX-RS運(yùn)行時(shí)自動(dòng)檢測(cè)
  • 可以將攔截器進(jìn)行鏈接和確定優(yōu)先級(jí)(使用@Priority),并調(diào)用WriterInterceptorContext的proce方法會(huì)自動(dòng)調(diào)用鏈中的下一個(gè)攔截器或MessageBodyWriter實(shí)現(xiàn)本身
  • WriterInterceptor充當(dāng)MessageBodyWriter的包裝器(在內(nèi)部調(diào)用)

實(shí)體提供者(

  • 應(yīng)用程序代碼返回的Java對(duì)象到HTTP響應(yīng)有效負(fù)載的轉(zhuǎn)換是通過實(shí)現(xiàn)MessageBodyWriter接口的具體類完成的
  • MessageBodyWriter實(shí)現(xiàn)的writeTo方法是執(zhí)行操作的地方。 JAX-RS運(yùn)行時(shí)將所有上下文信息與OutputStream一起傳遞給OutputStream ,從Java類型轉(zhuǎn)換后,響應(yīng)流可以寫入到OutputStream中
  • JAX-RS規(guī)范要求,對(duì)于某些Java類型(例如String,InputStream,File等),實(shí)現(xiàn)應(yīng)包含MessageBodyWriter接口的現(xiàn)成實(shí)現(xiàn)。

好吧! 這是對(duì)服務(wù)器端請(qǐng)求處理如何在JAX-RS中工作以及哪些組件起作用的簡(jiǎn)要概述。 謝謝閱讀。 干杯!

參考文獻(xiàn)

  • JAX-RS規(guī)格文件
  • Java EE 7 API Java文檔

翻譯自: https://www.javacodegeeks.com/2015/01/jax-rs-2-0-server-side-processing-pipeline.html

總結(jié)

以上是生活随笔為你收集整理的JAX-RS 2.0:服务器端处理管道的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。