1. 程式人生 > >SpringMVC_第四章(RESTful)

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風格