最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring中REST和RESTful的區(qū)別以及基本實現(xiàn)

 更新時間:2022年04月07日 12:39:25   作者:張艷偉_Laura  
本文主要介紹了spring中REST和RESTful的區(qū)別以及基本實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

簡介

REST概念:

REST :全稱:Representational State Transfer,意思:表現(xiàn)層資源狀態(tài)轉(zhuǎn)移

詳細(xì)解釋可分為三部分:

資源

資源是一種看待服務(wù)器的方式,即,將服務(wù)器看作是由很多離散的資源組成。每個資源是服務(wù)器上一個可命名的抽象概念。因為資源是一個抽象的概念,所以它不僅僅能代表服務(wù)器文件系統(tǒng)中的一個文件、數(shù)據(jù)庫中的一張表等等具體的東西,可以將資源設(shè)計的要多抽象有多抽象,只要想象力允許而且客戶端應(yīng)用開發(fā)者能夠理解。與面向?qū)ο笤O(shè)計類似,資源是以名詞為核心來組織的,首先關(guān)注的是名詞。一個資源可以由一個或多個URI來標(biāo)識。URI既是資源的名稱,也是資源在Web上的地址。對某個資源感興趣的客戶端應(yīng)用,可以通過資源的URI與其進(jìn)行交互。

資源的表述

資源的表述是一段對于資源在某個特定時刻的狀態(tài)的描述。可以在客戶端-服務(wù)器端之間轉(zhuǎn)移(交換)。資源的表述可以有多種格式,例如HTML/XML/JSON/純文本/圖片/視頻/音頻等等。資源的表述格式可以通過協(xié)商機(jī)制來確定。請求-響應(yīng)方向的表述通常使用不同的格式。

狀態(tài)轉(zhuǎn)移

狀態(tài)轉(zhuǎn)移說的是:在客戶端和服務(wù)器端之間轉(zhuǎn)移(transfer)代表資源狀態(tài)的表述。通過轉(zhuǎn)移和操作資源的表述,來間接實現(xiàn)操作資源的目的。

REST很好地利用了HTTP本身就有的一些特征,如HTTP動詞、HTTP狀態(tài)碼、HTTP報頭等等

REST架構(gòu)的主要原則:

  • 對網(wǎng)絡(luò)上所有的資源都有一個資源標(biāo)志符;
  • 對資源的操作不會改變標(biāo)識符;
  • 同一資源有多種表現(xiàn)形式(xml、json);
  • 所有操作都是無狀態(tài)的(Stateless);
  • 符合上述REST原則的架構(gòu)方式稱為RESTful;

RESTful概念:

RESTful是一種常見的REST應(yīng)用,是遵循REST風(fēng)格的web服務(wù),REST式的(rest與restful相比,多了一個ful,就英語層面來說是一個形容詞,restful翻譯為中文為: “rest式的”)web服務(wù)是一種ROA(面向資源的架構(gòu))

REST和RESTful的聯(lián)系與區(qū)別:restful是由rest派生出來的。

RESTful實現(xiàn)

具體說,就是http協(xié)議里面,四個表示操作方式的動詞:get,post,put,delete,它們分別對應(yīng)四種基本操作:get用來獲取資源,post用來新建資源,put用來更新資源,delete用來刪除資源

REST 風(fēng)格提倡URL地址使用統(tǒng)一的風(fēng)格設(shè)計,從前到后各個單詞使用斜杠分開,不適用問號鍵值對方式攜帶請求參數(shù),而是將要發(fā)送給服務(wù)器的數(shù)據(jù)作為URL地址的一部分,以保證整體風(fēng)格的一致性。

GET, 查詢所有用戶信息

    /**
    * 使用RESTFul模擬用戶資源的增刪改查
    * /user    GET     查詢所有用戶信息
    */
    @RequestMapping(value = "/user", method = RequestMethod.GET)
    public String getAllUser(){
        System.out.println("查詢所有用戶信息");
        return "success";
    }
<a th:href="@{/user}" rel="external nofollow" >查詢所有用戶信息</a><br>

GET, 根據(jù)用戶ID查詢用戶信息

    /**
    * 使用RESTFul模擬用戶資源的增刪改查
    * /user     GET     根據(jù)用戶id查詢用戶信息
    */
    @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
    public String getUserById(){
        System.out.println("根據(jù)id查詢用戶信息");
        return "success";
    }
<a th:href="@{/user/1}" rel="external nofollow" >根據(jù)id查詢用戶信息</a><br>

POST, 添加用戶信息

    /**
    * 使用RESTFul模擬用戶資源的增刪改查
    * /user     POST     添加用戶信息
    */
    @RequestMapping(value = "/user", method = RequestMethod.POST)
    public String insertUser(String username, String password){
        System.out.println("添加用戶信息:"+username+","+password);
        return "success";
    }
<form th:action="@{/user}" method="post">
    用戶名:<input type="text" name="username"><br>
    密碼:<input type="password" name="password"><br>
    <input type="submit" value="添加"><br>
</form>

PUT, 修改用戶信息

    /**
    * 使用RESTFul模擬用戶資源的增刪改查
    * /user     PUT     修改用戶信息
    */
    @RequestMapping(value = "/user", method = RequestMethod.PUT)
    public String updateUser(String username, String password){
        System.out.println("修改用戶信息:"+username+","+password);
        return "success";
    }
<form th:action="@{/user}" method="post">
    <input type="hidden" name="_method" value="PUT">
    用戶名:<input type="text" name="username"><br>
    密碼:<input type="password" name="password"><br>
    <input type="submit" value="修改"><br>
</form>

注意:

由于瀏覽器只支持發(fā)送get和post方式的請求,那么該如何發(fā)送put和delete請求呢?

SpringMVC 提供了 HiddenHttpMethodFilter 幫助我們將 POST 請求轉(zhuǎn)換為 DELETE 或 PUT 請求

HiddenHttpMethodFilter 處理put和delete請求的條件: a>當(dāng)前請求的請求方式必須為post , b>當(dāng)前請求必須傳輸請求參數(shù)_method 滿足以上條件,HiddenHttpMethodFilter 過濾器就會將當(dāng)前請求的請求方式轉(zhuǎn)換為請求參數(shù)_method的值,因此請求參數(shù)_method的值才是最終的請求方式

配置HiddenHttpMethodFilter,在web.xml中

    <!--配置HiddenHttpMethodFilter-->
    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

注:

目前為止,SpringMVC中提供了兩個過濾器:CharacterEncodingFilter(編碼過濾器)和HiddenHttpMethodFilter(請求方式過濾器),在web.xml中注冊時,必須先注冊CharacterEncodingFilter,再注冊HiddenHttpMethodFilter。原因:

在 CharacterEncodingFilter 中通過 request.setCharacterEncoding(encoding) 方法設(shè)置字符集的request.setCharacterEncoding(encoding) 方法要求前面不能有任何獲取請求參數(shù)的操作,而 HiddenHttpMethodFilter 恰恰有一個獲取請求方式的操作:

String paramValue = request.getParameter(this.methodParam);

到此這篇關(guān)于spring中REST和RESTful的區(qū)別以及基本實現(xiàn)的文章就介紹到這了,更多相關(guān)spring REST和RESTful內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 劍指Offer之Java算法習(xí)題精講鏈表與二叉樹專項訓(xùn)練

    劍指Offer之Java算法習(xí)題精講鏈表與二叉樹專項訓(xùn)練

    跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化
    2022-03-03
  • 如何解決IDEA使用Tomcat控制臺中文出現(xiàn)亂碼問題

    如何解決IDEA使用Tomcat控制臺中文出現(xiàn)亂碼問題

    這篇文章主要介紹了如何解決IDEA使用Tomcat控制臺中文出現(xiàn)亂碼問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • mybatis?like模糊查詢特殊字符報錯轉(zhuǎn)義處理方式

    mybatis?like模糊查詢特殊字符報錯轉(zhuǎn)義處理方式

    這篇文章主要介紹了mybatis?like模糊查詢特殊字符報錯轉(zhuǎn)義處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java編程中的防轉(zhuǎn)義和轉(zhuǎn)義技巧匯總

    Java編程中的防轉(zhuǎn)義和轉(zhuǎn)義技巧匯總

    在編程過程中,我們常常需要處理特殊字符和特定上下文,以確保生成的內(nèi)容在正確的環(huán)境中能夠被解析和顯示,本文將介紹一些常見的防轉(zhuǎn)義或者轉(zhuǎn)義處理的編程技巧,需要的可以參考一下
    2023-07-07
  • SWT(JFace)體驗之ProgressBar

    SWT(JFace)體驗之ProgressBar

    SWT(JFace)體驗之ProgressBar 實現(xiàn)代碼。
    2009-06-06
  • Mybatis執(zhí)行插入語句后并返回主鍵ID問題

    Mybatis執(zhí)行插入語句后并返回主鍵ID問題

    這篇文章主要介紹了Mybatis執(zhí)行插入語句后并返回主鍵ID問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java中出現(xiàn)java.lang.IllegalStateException異常錯誤的解決

    Java中出現(xiàn)java.lang.IllegalStateException異常錯誤的解決

    這篇文章主要介紹了Java中出現(xiàn)java.lang.IllegalStateException異常錯誤的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 使用指定的JDK啟動IDEA的三種方法

    使用指定的JDK啟動IDEA的三種方法

    今天小編就為大家分享一篇關(guān)于使用指定的JDK啟動IDEA的三種方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • MyBatis批量插入的幾種方式效率比較

    MyBatis批量插入的幾種方式效率比較

    最近工作中遇到了解析excel,然后批量插入,發(fā)現(xiàn)這個插入時間比較長,所以想要進(jìn)行一些優(yōu)化,下面這篇文章主要給大家介紹了關(guān)于MyBatis批量插入的幾種方式效率比較的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Java并發(fā)編程ThreadLocalRandom類詳解

    Java并發(fā)編程ThreadLocalRandom類詳解

    這篇文章主要介紹了Java并發(fā)編程ThreadLocalRandom類詳解,通過提出問題為什么需要ThreadLocalRandom展開詳情,感興趣的朋友可以參考一下
    2022-06-06

最新評論

怀化市| 耒阳市| 承德县| 贵定县| 临颍县| 涪陵区| 九寨沟县| 德兴市| 连城县| 北碚区| 谢通门县| 天峻县| 荆门市| 平陆县| 通化市| 嘉禾县| 灵寿县| 长汀县| 连云港市| 那坡县| 平邑县| 汝南县| 衡南县| 沈阳市| 大余县| 德兴市| 翁源县| 沙坪坝区| 桓台县| 福鼎市| 台前县| 克东县| 正安县| 沁阳市| 平顺县| 萨迦县| 介休市| 综艺| 苏尼特右旗| 泉州市| 新化县|