SpringMVC_第四章(RESTful)
1:什麼是RESTful
首先說什麼是REST,REST即表述性狀態轉移(英文:Representational State Transfer,簡稱REST)是Roy Fielding博士在2000年他的博士論文中提出來的一種軟體架構風格。它是一種針對網路應用的設計和開發方式,可以降低開發的複雜性,提高系統的可伸縮性。它不是規範,不是標準,它一種設計模式。REST是設計風格而不是標準。REST通常基於使用HTTP,URI,和XML(標準通用標記語言下的一個子集)以及HTML(標準通用標記語言下的一個應用)這些現有的廣泛流行的協議和標準。rest與restful相比,多了一個ful,就英語層面來說是一個形容詞,restful翻譯為中文為: “rest式的”。
RESTful的優點就是:
1:統一了客戶端訪問資源的埠
2:URI更加簡潔,易於理解,便於擴充套件
3:便於不同系統間資源共享
為使客戶端程式能與你的資源相互協作,資源應該正確地實現預設的應用協議(HTTP),也就是使用標準的GET、PUT、POST和DELETE方法。
GET:獲取資源(查詢)
POST:新建資源(新增)
PUT:修改資源(修改)
DELETE:刪除資源(刪除)
在Restful之前的操作:
http://127.0.0.1/user/query?id=1 GET 根據使用者id查詢使用者資料
http://127.0.0.1/user/save POST 新增使用者
http://127.0.0.1/user/update POST 修改使用者資訊
http://127.0.0.1/user/delete?id=1 GET 刪除使用者資訊
RESTful用法:
http://127.0.0.1/user/1 GET 根據使用者id查詢使用者資料
http://127.0.0.1/user POST 新增使用者
http://127.0.0.1/user PUT 修改使用者資訊
http://127.0.0.1/user DELETE 刪除使用者資訊
之前的操作是沒有問題的,大神認為是有問題的,有什麼問題呢?你每次請求的介面或者地址,都在做描述,例如查詢的時候用了query,新增的時候用了save,其實完全沒有這個必要,我使用了get請求,就是查詢.使用post請求,就是新增的請求,我的意圖很明顯,完全沒有必要做描述,這就是為什麼有了restful.
2:Spring的RESTful風格實現
2.1由於在from表單中沒有的method只有get,post方法沒有put和delete方法,所以需要設定過濾器,作用是將put和delete的引數獲取並且放到request中,controller便可以拿到這些引數。
需要注意的是,只有context-type:application/x-www-form-urlencoded的請求才會被過濾。
<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.2需要在表單中新增隱藏表單域,將HiddenHttpMethodFilter裡的_method屬性改為put或者delete後提交,因為只有form表單才具有post方法,而這個過濾器也只能將post方法轉化,get則不行。
比如你要提交一個刪除的請求
表單域如下:
<form action="${pageContext.request.contextPath}/course/deleteById/${course.id}" method="post">
<button class="btn btn-danger btn-sm delete_btn" type="submit">
<input type="hidden" name="_method" value="DELETE"/>
<span class="glyphicon glyphicon-trash">刪除</span>
</button>
</form>
其Controller裡的方法如下
@Controller
@RequestMapping(value = "/course")
public class CourseController {
@Autowired
private CourseDao courseDao;
// 刪除課程
// 根據id查詢,@PathVariable將ids的值繫結到I
@RequestMapping(value = "/deleteById/{ida}", method = RequestMethod.DELETE)
public String deleteById(@PathVariable(value = "ida") Integer id) {
}
}
最後顯示的路徑地址是:
http://localhost:8080/SpringMVC_3_RESTful/course/selectById/1
這就是一個簡單的springRESTful風格