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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jersey框架入门学习

發布時間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jersey框架入门学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

要學習框架前,首先要知道什么是RestFul?

? 基于REST構建的API就是RestFul風格。

REST(Representational State Transfer)介紹

1、Resource

? 資源:在REST中,網絡中一切內容都被認為是一種資源,所謂資源,就是網絡上的一個實體,或者說是網絡上的一個具體信息,它可以是一段文本,一張圖片,一個視頻,一段語音等。
統一資源訪問標志符(URI):用于訪問網絡上某一資源的路徑標志符,能夠唯一確定一個資源。

比如:
http://www.abc.com/employees 表示www.abc.com主機上的employees資源。
https://dss0.bdstatic.com/-0U0bnSm1A5BphGlnYG/tam-ogel/5d4e9b24-dcc5-483a-b6da-be1e9e621891.js 表示網絡上的一個js文件資源。

2、Representation

Representation:表現形式,資源是一種信息實體,我們把資源具體表現出來的形式,叫做它的“表現層”(Representation)。
比如一段文本可以使用txt的形式表示、也可以使用json形式,xml形式,html形式,二進制等等形式表示。

在REST規范中,URI只代表資源,只定位資源,不代表表現形式。資源的具體表現形式,應該在HTTP請求頭中用Accept頭和Content-Type頭,和在響應頭中用Content-Type頭指定。

Accept請求頭代表客戶端會接受何種表現形式的資源,服務端應該把資源按照這些形式返回。
Content-Type請求頭表示請求傳遞到服務器的信息內容格式。
Content-Type響應頭表示服務器返回給客戶端的信息內容格式。

3、State Transfer

State Transfer:狀態轉移,訪問一個網站,一種資源,就代表了客戶端與服務器的一個交互過程,勢必涉及到數據和狀態的變化。

互聯網通信協議HTTP協議是一個無狀態協議,這意味著所有狀態都保存在服務端,如果客戶端想要操作服務器,就必須使用某種手段,讓服務器端發生狀態轉換。改變服務器資源的狀態。

比如:

http://www.xxxx.com/users 代表xxxx網站上的用戶資源。
新增用戶:用戶從無到有的一個資源狀態轉化。
修改用戶:用戶從一種狀態變成另外一個狀態的資源狀態轉化。
刪除用戶:用戶從有到無的一個資源狀態轉化。

Jersey概述:

jersey是jax-rs(java api for restful webService)規范的完整實現者,比起jax-ws規范要簡單,明了,易用。

Jersey RESTful 框架是開源的RESTful框架,實現了JAX-RS(JSR 311 & JSP 339)規范。它擴展了JAX-RS參考實現,提供了更多的特性和工具,可以進一步的簡化RESTful service和Client開發。

  • 輕量級,快速開發
  • 優秀的文檔和案例
  • 與Spring較好的集成
  • 可以集成到其他庫/框架

jersey官方:https://jersey.java.net/

Jersey注解:

1、Http Methods:HTTP方法映射到資源的CRUD(創建、讀取、更新和刪除)操作,基本模式如下:

  • **@GET:**讀取、列出、檢索單個或資源集合。該注解標記的方法表明用于處理Get請求,Get方法是冪等且安全的。
  • @POST:新建資源。該注解標記的方法表明處理POST請求,POST方法表明是一種創建操作的方法,POST方法是一種寫操作的HTTP請求,RPC中的寫操作均是使用post方法,而在REST中我們只是使用POST方法來添加資源。
  • **@PUT:**更新現有資源或資源集合。
  • **@DELETE:**刪除資源或資源集合。該注解標記的方法表明這個方法執行的是一個刪除資源的操作,其返回值可以是void,即沒有返回值。

2、@Path

  • 注解可以標記在類名上,也可以標記在方法名上。該注解接收一個value參數,表示定義資源的地址。另外,資源地址相同,但是HTTP方法不同的兩個方法是完全兩個不同的REST接口,HTTP方法和資源地址相結合在一起才可以完成對一個資源的定位。

  • 兩個作用:

    • 標注class:表明該類是個資源類。凡是資源類,必須使用@Path注解,不然jersey無法掃描到該資源類。
    • 標注method,表示具體的請求資源的路徑

3、@Produces:

  • @Produces注釋用來指定將要返回給客戶端的數據標識類型(MIME)。@Produces可以作為class(類)注釋,也可以作為方法注釋,方法的@Produces注釋將會覆蓋class(類)的注釋。@Produces定義了服務器端生產的媒體類型,即服務器端產生的響應實體的媒體類型,同樣也可以是xml、json等媒體類型。

    • 返回給client字符串類型(text/plain)

      • @Produces(MediaType.TEXT_PLAIN)
    • 返回給客戶端為json類型(application/json)

      • @Produces(MediaType.APPLICATION_JSON)
    • 指定多個MIME類型

      • @Produces({“application/json”,“application/xml”})

4、 @Consumes

  • @Consumes與@Produces相反,用來指定可以接受客戶端發送過來的MIME類型,同樣可以用于class或者method,也可以指定多個MIME類型,一般用于@PUT,@POST。在服務器端,@Consumes定義了服務器端要消費的媒體類型,也就是說消費客戶端請求實體的媒體類型,可以是xml、json等類型。

    • 接受client參數為字符串類型

      • @Consumes(MediaType.TEXT_PLAIN)
    • 接受client參數為json類型

      • @Consumes(MediaType.APPLICATION_JSON)

5、@QueryParam

  • 該注解表明是一個查詢條件,查詢條件決定了方法的作用域,查詢參數組成了查詢條件。Jersey中使用@QueryParam注解來定義查詢參數。另外注解@QueryParam還可以和注解@DefaultVaule一起使用,注解@DefaultValue的作用則是預置一個默認值,當請求中不包括該參數時候使用這個默認值。
  • 請求地址: localhost:8080/introduction?booId=1?gg=2?version=3?platform=4?vps=5

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-AzDTaOFO-1612945398028)(C:\Users\lenovo\AppData\Local\YNote\data\qqC55C2CC4FD2FE5C6968E7C371694AC22\c6878a60d0db451fa2e5a8f99e0b9d96\clipboard.png)]

6、@PathParam

  • 該注解定義路徑的參數信息,每一個參數都對應一個子資源。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-vZa7hkLl-1612945398031)(C:\Users\lenovo\AppData\Local\YNote\data\qqC55C2CC4FD2FE5C6968E7C371694AC22\1c77021c8f3f4e2aa8e4f1b4029faa60\clipboard.png)]

7、@Context

  • 該注解用來解析上下文參數。(@Context HttpRequest request)。通過@Context可以獲得以下信息:UriInfo、ServletConfig、ServletContext、HttpServletRequest、HttpServletResponse和HttpHeaders等。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-1YrryELH-1612945398034)(C:\Users\lenovo\AppData\Local\YNote\data\qqC55C2CC4FD2FE5C6968E7C371694AC22\3ed668197fa248cd96e478bed29ac1ef\clipboard.png)]

8、@FormParam

  • 獲取post請求中表單中的數據。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-L11nyCiS-1612945398037)(C:\Users\lenovo\AppData\Local\YNote\data\qqC55C2CC4FD2FE5C6968E7C371694AC22\3dcb37d9e3d144b197f482f22190121b\clipboard.png)]

9、@BeanParam

  • 獲取請求參數中的數據,用實體Bean進行封裝。如果傳遞的參數較多,可以自己寫個bean,bean中的字段使用@PathParam、@QueryParam、@FormParam、@FormDataParam、@MatrixParam、@HeaderParam、@CookieParam來注解。而在resouces中具體方法參數中就可以使用@BeanParam來注解這個自定義的bean。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8ycM8dyw-1612945398038)(C:\Users\lenovo\AppData\Local\YNote\data\qqC55C2CC4FD2FE5C6968E7C371694AC22\64d2ce783d1e4b4d9e0bf213e47a163e\clipboard.png)]

10、****@Encoded

  • 禁止解碼,客戶端發送的參數是什么樣,服務器接收到的參數就是什么樣

11、****@Singleton

  • 表示單例模式。默認情況下,資源類的生命周期是per-request,也就是系統會為每個匹配資源類URI的請求創建一個實例,這樣的效率很低,可以對資源類使用@Singleton注解,這樣在應用范圍內,只會創建資源類的一個實例。

12、****@PerSession

  • 每一個 session 請求, 就產生一個 rest 資源實例 , 直到這個 session 消毀,這個 rest 資源才會消失 。session, 使用 @PerSession注解。

13、 application/json 和 application/x-www-form-urlencoded的區別

  • application/x-www-form-urlencoded:Jquery的Ajax請求默認方式,這種方式的好處就是瀏覽器都支持,在請求發送過程中會對數據進行序列化處理,以鍵值對形式?key1=value1&key2=value2,然后把這個字串append到url后面,用?分割,加載這個新的url方式發送到服務器。如果用Jquery,它內部已經進行了處理,如果自己寫原生的Ajax請求,就需要自己對數據進行序列化。
  • application/json:application/json作為請求content-type,告訴服務器請求的主題內容是json格式的字符串,服務器端會對json字
    符串進行解析,這種方式的好處就是前端人員不需要關心數據結構的復雜度,只要是標準的json格式就能提交成功。

14、Jersey與SpringMVC框架的區別

  • Jersey框架出發點RestFul風格的框架,體現點在接口的設計方面。我們經常使用的SpringMVC返回復雜結構需要使用ModelAndView。
  • jersey提供一種子資源的概念,這也是RESTFull中提倡所有url都是資源;
  • MVC提供Session等狀態的管理,Jersey沒有,這個來源于RESFFull設計的無狀態化。

15、創建Maven web項目

? [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-a131o9Mt-1612945398039)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210209115805611.png)]

16、搭建Jersey框架

  • ? 引入Jersey的必要的幾個jar包

    • Jersey必需的jar包
      • jackson-jaxrs-json-provider
      • jersey-container-servlet
      • jersey-hk2
    <dependencyManagement><dependencies><dependency><groupId>org.glassfish.jersey</groupId><artifactId>jersey-bom</artifactId><version>2.27</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.glassfish.jersey.containers</groupId><artifactId>jersey-container-servlet</artifactId></dependency><dependency><groupId>org.glassfish.jersey.inject</groupId><artifactId>jersey-hk2</artifactId></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>com.fasterxml.jackson.jaxrs</groupId><artifactId>jackson-jaxrs-json-provider</artifactId><version>2.9.5</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok-maven-plugin</artifactId><version>1.18.8.1</version><scope>provided</scope></dependency></dependencies>

17、web.xml加載Jersey的Servlet容器

  • Jersey1.X使用的是Sun公司的

    • com.sun.jersey.spi.Container.servlet.ServletContainer
  • Jersey2.X使用的是glassfish的

    • org.glassfish.jersey.servlet.ServletContainer

18、掃描Jersey resource

  • jersey1.X使用的是sun的
    • com.sun.jersey.config.property.packages
  • jersey2.X使用的是
    • glassfish的jersey.config.server.provider.packages

19、Jersey使用web.xml加載Application。簡單理解為就是我們SpringMVC中的前端控制器

<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><servlet><servlet-name>Jersey Web Application</servlet-name><servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class><!-- 配置自己的資源加載類去加載資源 --><init-param><param-name>jersey.config.server.provider.packages</param-name><param-value>com.itcast.rest</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>Jersey Web Application</servlet-name><url-pattern>/api/*</url-pattern></servlet-mapping> </web-app>

20、代碼練習

@Path("User") @Produces(MediaType.APPLICATION_JSON) public class JerseyDemo01 {Map<String, Map> map = new HashMap<>(10);HashMap<String, String> key = new HashMap<>(10);// public String PostJson(@FormParam("username") String username,@FormParam("password")String password){@POST@Consumes(MediaType.APPLICATION_FORM_URLENCODED)@Path("/PostJson")public String PostJson(@BeanParam User user) {System.out.println("POST已執行");String s = Optional.ofNullable(user.getUsername()).orElseThrow(() -> new RuntimeException("參數為空"));String s1 = Optional.ofNullable(user.getPassword()).orElseThrow(() -> new RuntimeException("參數為空"));System.out.println(s + ":" + s1);this.key.put("username", user.getUsername());this.key.put("password", user.getPassword());this.map.put("param", key);String json = JSON.toJSONString(map);return json;}@GET@Consumes(MediaType.APPLICATION_JSON)@Path("/ObjJson")public String ObjJson() {this.key.put("01", "張三");this.key.put("02", "李四");this.key.put("03", "王五");this.key.put("04", "馬六");this.map.put("param", key);String json = JSON.toJSONString(map);return json;}@GET@Consumes(MediaType.APPLICATION_JSON)@Path("/test/{id}")public String Test(@PathParam(id) String id){this.key.put("id", id);this.map.put("param", key);String json = JSON.toJSONString(map);return json;}

總結

以上是生活随笔為你收集整理的Jersey框架入门学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。