SpringMVC REST設計風格

2021-07-25 05:15:50 字數 3000 閱讀 6619

知己海記憶體

2016-11-30 15:15

rest即表述性狀態傳遞(英文:representational state transfer,簡稱rest)是roy fielding博士在2023年他的博士**中提出來的一種軟體架構風格。

它是一種針對網路應用的設計和開發方式,可以降低開發的複雜性,提高系統的可伸縮性。

目前在三種主流的web服務實現方案中,因為rest模式的web服務與複雜的soap和xml-rpc對比來講明顯的更加簡潔,越來越多的web服務開始採用rest風格設計和實現。

例如,amazon.com提供接近rest風格的web服務進行圖書查詢;雅虎提供的web服務也是rest風格的。

①理解本真的rest架構風格:

②深入淺出rest:

2.rest風格是什麼?

①rest:即 representational state transfer。(資源)表現層狀態轉化。是目前最流行的一種網際網路軟體架構。它結構清晰、符合標準、易於理解、擴充套件方便,所以正得到越來越多**的採用

·資源(resources):網路上的乙個實體,或者說是網路上的乙個具體資訊。

它可以是一段文字、一張、一首歌曲、一種服務,總之就是乙個具體的存在。

可以用乙個uri(統一資源定位符)指向它,每種資源對應乙個特定的 uri 。

獲取這個資源,訪問它的uri就可以,因此 uri 即為每乙個資源的獨一無二的識別符。

·表現層(representation):把資源具體呈現出來的形式,叫做它的表現層(representation)。比如,文字可以用 txt 格式表現,也可以用 html 格式、xml 格式、json 格式表現,甚至可以採用二進位制格式。

·狀態轉化(state transfer):每發出乙個請求,就代表了客戶端和伺服器的一次互動過程。http協議,是乙個無狀態協議,即所有的狀態都儲存在伺服器端。因此,如果客戶端想要操作伺服器,必須通過某種手段,讓伺服器端發生「狀態轉化」(state transfer)。

而這種轉化是建立在表現層之上的,所以就是 「表現層狀態轉化」。

·具體說,就是 http協議裡面,四個表示操作方式的動詞:get、post、put、delete。

它們分別對應四種基本操作:get用來獲取資源,post用來新建資源,put用來更新資源,delete用來刪除資源。

②url風格

示例:/order/1 httpget:得到 id = 1 的 order

/order/1 httpdelete:刪除 id = 1的 order

/order/1 httpput:更新id = 1的 order

/order httppost:新增 order

瀏覽器 form 表單只支援 get 與 post 請求,而delete、put 等 method 並不支援,

spring3.0 新增了乙個過濾器,可以將這些請求轉換為標準的 http 方法,使得支援 get、post、put 與 delete 請求。

3.實驗**

①配置hiddenhttpmethodfilter過濾器

* 1.測試rest風格的 get,post,put,delete 操作

* 以crud為例:

* 新增: /order post

* 修改: /order/1 put update?id=1

* 獲取: /order/1 get get?id=1

* 刪除: /order/1 delete delete?id=1

* 2.如何傳送put請求或delete請求?

* ①.配置hiddenhttpmethodfilter

* ②.需要傳送post請求

* ③.需要在傳送post請求時攜帶乙個 name="_method"的隱含域,值為put或delete

* 3.在springmvc的目標方法中如何得到id值呢?

* 使用@pathvariable註解

public string testrestget(@pathvariable(value="id") integer id){

system.out.println("testrestget id="+id);

return "success";

public string testrestpost(){

system.out.println("testrestpost");

return "success";

public string testrestput(@pathvariable("id") integer id){

system.out.println("testrestput id="+id);

return "success";

public string testrestdelete(@pathvariable("id") integer id){

system.out.println("testrestdelete id="+id);

return "success";

③請求鏈結

testrest get

4.hiddenhttpmethodfilter過濾器原始碼分析

l為什麼請求隱含引數名稱必須叫做」_method」

——method定義

SpringMVC REST 風格靜態資源訪問配置

1 在web.xml中使用預設servlet處理靜態資源,缺點是如果靜態資源過多,則配置量會比較大,一旦有遺漏,則會造成資源無法正常顯示或404錯誤。2 在springmvc配置檔案中配置 我的所有靜態資源都在webcontent static 之下,下有如下目錄webcontent static ...

設計模式 設計原則與設計模式

一切設計都為了 的可擴充套件性和可讀性,都為了應對變化!我們是基於設計原則的思想,來選擇設計模式去實現,可讀,可擴充套件的目標!核心設計思想 對擴充套件開放,對修改關閉。含義 抽象可變功能,可變功能通過子類擴充套件實現,避免對已有抽象實現的修改。優點 便於擴充套件 核心設計思想 單個方法或單個類或單...

設計模式 設計模式

物件導向程式設計 oop 的基本概念有 封裝,抽象,繼承,多型等,如何開發出可復用的物件導向軟體一直困擾著軟體開發人員。可復用的物件導向技術包括類的繼承,物件的組合和引數化型別 generic gof的巨著 設計模式 總結出可復用的物件導向的23個設計模式,並且歸類成 建立型模式,結構型模式和行為型...