RESTful架構
REST(Resource Representational State Transfer)即“資源表現層狀態轉化”,省略了Resource (資源)。允許客戶端發出以統一資源標識符訪問和操作網絡資源的請求,而與預先定義好的無狀態操作集一致化。
資源
指網絡上的一個具體信息,可以是文本、圖片、視頻等,每種資源對應一個特定的URI,要想操作該資源訪問它的URI就可以,因此URI就成了每一個資源的地址或獨一無二的識別符。
表現層(Representation)
“資源"具體呈現出來的形式,叫做它的"表現層”(Representation),如,文本可以用txt格式表現,也可以用HTML格式、XML格式、JSON格式表現,甚至可以采用二進制格式;圖片可以用JPG格式表現,也可以用PNG格式表現。URI只代表資源的實體,不代表它的形式。嚴格地說,有些網址最后的".html"后綴名是不必要的,因為這個后綴名表示格式,屬于"表現層"范疇,而URI應該只代表"資源"的位置。它的具體表現形式,應該在HTTP請求的頭信息中用Accept和Content-Type字段指定,這兩個字段才是對"表現層"的描述
狀態轉化(State Transfer)
一次客戶端和服務器的一個互動過程,會涉及到數據和狀態的變化。互聯網通信協議HTTP協議,是一個無狀態協議,所有的狀態都保存在服務器端。因此,客戶端想要操作服務器,必須通過某種手段,讓服務器端發生"狀態轉化"(State Transfer),這種轉化是建立在表現層之上的,所以就是"表現層狀態轉化"。由于客戶端用到的技術手段只能是HTTP協議,使用四個操作方式的動詞:GET、POST、PUT、DELETE分別對應四種基本操作。GET用來獲取資源,POST用來新建資源(也可以用于更新資源),PUT用來更新資源,DELETE用來刪除資源
簡單小結
每一個URI代表一種資源;客戶端和服務器之間,傳遞這種資源的某種表現層;客戶端通過四個HTTP動詞,對服務器端資源進行操作,實現"表現層狀態轉化"。符合REST規范的軟件架構就是restful編程風格。
在Restful風格中,用戶請求的url使用同一個url而用請求方式:get,post,delete,put等方式對請求的處理方法進行區分,這樣可以在前后臺分離式的開發中使得前端開發人員不會對請求的資源地址產生混淆和大量的檢查方法名的麻煩,形成一個統一的接口
SpringMVC對RESTful架構的支持
Spring MVC通過注解的方式將對資源的請求映射為一個URL,通過JSON等格式表示和傳輸資源;使用SpringMVC可以完成
- 需要從URL中獲取一些參數
- 使得同一個接口的不同請求方法可以完成對應的操作
【示例】:設計一個對課程資源進行操作的RESTful接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
package com.kkb.controller; import com.kkb.pojo.Course; import com.kkb.service.CourseService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @RestController public class RESTCourseController { @Autowired CourseService service; //獲取全部課程 @RequestMapping (value = "/course" ,method = RequestMethod.GET) public List<Course> getCourseList(){ System.out.println( "getCourseList" ); return service.selectCourses(); } //根據id獲取某個課程 @RequestMapping (value = "/course/{id}" ,method = RequestMethod.GET) public Course getCourse( @PathVariable Integer id){ System.out.println( "getCourse" ); System.out.println( "參數:" +id); return service.selectByID(id); } //添加新的課程 @RequestMapping (value = "/course" ,method = RequestMethod.POST) public String addCourse( @RequestBody Course course){ System.out.println( "addCourse" ); System.out.println( "參數:" +course); service.insertCourse(course); return "{\"msg\":\"success\"}" ; } //根據id刪除課程 @RequestMapping (value = "/course/{id}" ,method = RequestMethod.DELETE) public String deleteCourse( @PathVariable Integer id){ System.out.println( "deleteCourse" ); System.out.println( "參數:" +id); service.deleteCourse(id); return "{\"msg\":\"success\"}" ; } //根據id更新課程 @RequestMapping (value = "/course" ,method = RequestMethod.PUT) public String updateCourse( @RequestBody Course course){ System.out.println( "updateCourse" ); System.out.println( "參數:" +course); service.updateCourse(course); return "{\"msg\":\"success\"}" ; } } |
代碼中使用@RestController做注解,相當于@Controller+@ResponseBody兩個注解的結合,返回json數據不需要在方法前面加@ResponseBody注解了,但使用@RestController這個注解,就不能返回jsp,html頁面,視圖解析器無法解析jsp,html頁面。
在前后端完全分離單頁面項目中,路由跳轉一般在前端進行,此時一般異步獲取數據時使用(ajax或axios)獲取,此時一般使用@RestController注解簡單方便。
在RequestMapping,URL均使用http://。。。/course,但method不同分別實現增、刪、改、查。
注意: 在web應用中,表單的提交只能使用post和get,put和delete是無法提交,在在web.xml中配置攔截器即可
示例代碼來源于:http://www.jfrwli.cn/article/140182.html
利用ajax實現前后端完全分離
當前web開發流行的單頁面系統使用前端路由,利用Ajax或AXOIS完成前端與后端的交互通訊,數據的傳遞格式一般使用json完成,具有rest編程風格的SpringMVC成為當前Java web開發主流技術。
以上就是java開發SSM框架具有rest風格的SpringMVC的詳細內容,更多關于SpringMVC具有rest風格的SSM框架的資料請關注服務器之家其它相關文章!
原文鏈接:https://blog.csdn.net/guoyp2126/article/details/118156181