您好,登錄后才能下訂單哦!
這篇文章主要介紹“SpringMVC RESTFul及REST架構(gòu)風(fēng)格是什么”,在日常操作中,相信很多人在SpringMVC RESTFul及REST架構(gòu)風(fēng)格是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”SpringMVC RESTFul及REST架構(gòu)風(fēng)格是什么”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
REST 是一種軟件架構(gòu)風(fēng)格。
REST:Representational State Transfer,表現(xiàn)層資源狀態(tài)轉(zhuǎn)移。
對(duì)此,有幾個(gè)名字需要理解一下:
表現(xiàn)層:實(shí)際上就是前端的頁面到后端的控制層。
資源:當(dāng)應(yīng)用部署到服務(wù)器上之后,萬物皆資源,比如一個(gè)類、一個(gè)html頁面等等。
1-資源是一種看待服務(wù)器的方式,即將服務(wù)器看作是由很多離散的資源組成。每個(gè)資源是服務(wù)器上一個(gè)可命名的抽象概念。
2-因?yàn)橘Y源是一個(gè)抽象的概念,所以它不僅僅能代表服務(wù)器文件系統(tǒng)中的一個(gè)文件、數(shù)據(jù)庫中的一張表等等具體的東西,可以將資源設(shè)計(jì)的要多抽象有多抽象,只要想象力允許而且客戶端應(yīng)用開發(fā)者能夠理解。
3-與面向?qū)ο笤O(shè)計(jì)類似,資源是以名詞為核心來組織的,首先關(guān)注的是名詞。
4-一個(gè)資源可以由一個(gè)或多個(gè)URI來標(biāo)識(shí)。
5-URI既是資源的名稱,也是資源在Web上的地址。
6-對(duì)某個(gè)資源感興趣的客戶端應(yīng)用,可以通過資源的URI與其進(jìn)行交互。
資源的表述:是一段對(duì)于資源在某個(gè)特定時(shí)刻的狀態(tài)的描述。
1-可以在客戶端-服務(wù)器端之間轉(zhuǎn)移(交換)。
2-資源的表述可以有多種格式,例如HTML/XML/JSON/純文本/圖片/視頻/音頻等等。
3-資源的表述格式可以通過協(xié)商機(jī)制來確定。
4-請(qǐng)求-響應(yīng)方向的表述通常使用不同的格式。
狀態(tài)轉(zhuǎn)移:在客戶端和服務(wù)器端之間轉(zhuǎn)移(transfer)代表資源狀態(tài)的表述。通過轉(zhuǎn)移和操作資源的表述,來間接實(shí)現(xiàn)操作資源的目的。
具體說,就是 HTTP 協(xié)議里面,四個(gè)表示操作方式的動(dòng)詞:GET、POST、PUT、DELETE。
它們分別對(duì)應(yīng)四種基本操作:
GET 用來獲取資源
POST 用來新建資源
PUT 用來更新資源
DELETE 用來刪除資源
REST 風(fēng)格提倡 URL 地址使用統(tǒng)一的風(fēng)格設(shè)計(jì),從前到后各個(gè)單詞使用斜杠分開。
不使用問號(hào)鍵值對(duì)方式攜帶請(qǐng)求參數(shù),而是將要發(fā)送給服務(wù)器的數(shù)據(jù)作為 URL 地址的一部分,以保證整體風(fēng)格的一致性。比如:
使用 RESTFul 模擬一下用戶資源的增刪改查。
控制器方法:
@Controller public class UserController { /** * /user GET 查詢所有用戶信息 * /user/1 GET 根據(jù)用戶 id 查詢用戶信息 * /user POST 添加用戶信息 * /user/1 DELETE 刪除用戶信息 * /user PUT 更新用戶信息 */ @RequestMapping(value = "/user", method = RequestMethod.GET) public String getAllUser() { System.out.println("查詢所有用戶信息"); return "success"; } @RequestMapping(value = "/user/{id}", method = RequestMethod.GET) public String getUserById() { System.out.println("根據(jù)用戶 id 查詢用戶信息"); return "success"; } @RequestMapping(value = "/user", method = RequestMethod.POST) public String addUser(String username, String password) { System.out.println("添加用戶信息:" + username + "," + password); return "success"; } }
test_rest.html:
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p>test_rest 頁面</p> <a th:href="@{/user}" rel="external nofollow" >查詢所有用戶信息</a><br> <a th:href="@{/user/1}" rel="external nofollow" >根據(jù)用戶 id 查詢用戶信息</a><br> <form th:action="@{/user}" method="post"> 用戶名:<input type="text" name="username"><br> 密碼:<input type="password" name="password"><br> <input type="submit" name="添加用戶"><br> </form> </body> </html>
配置文件里,加上視圖控制:
<mvc:view-controller path="/testRest" view-name="test_rest"></mvc:view-controller>
這樣就可以通過http://localhost:8080/springmvc/testRest訪問到test_rest.html的頁面了。
點(diǎn)擊測試一下。
由于瀏覽器只支持發(fā)送 get 和 post 方式的請(qǐng)求,那么該如何發(fā)送 put 和 delete 請(qǐng)求呢?
答案:使用 HiddenHttpMethodFilter 過濾器,可以幫助我們將 POST 請(qǐng)求轉(zhuǎn)換為 DELETE 或 PUT 請(qǐng)求。
在web.xml中注冊(cè)HiddenHttpMethodFilter,這個(gè)過濾器要配置在編碼過濾器之后,防止更新操作獲取到的參數(shù)是亂碼:
<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>
注意
使用的前提條件有 2 個(gè):
當(dāng)前請(qǐng)求的請(qǐng)求方式必須為 post當(dāng)
前請(qǐng)求必須傳輸請(qǐng)求參數(shù) _method
那么前端頁面里修改的表單應(yīng)該是成這樣:
<p>修改用戶信息的表單</p> <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" name="修改"><br> </form>
注意這里name="_method" value="put",value 的值才是真正的方法名。
提交測試一下:
到此,關(guān)于“SpringMVC RESTFul及REST架構(gòu)風(fēng)格是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。