RESTful不是一種技術,而是一種風格。下面這個是百度百科對這種風格的解釋:
一種軟件架構風格,設計風格而不是標準,只是提供了一組設計原則和約束條件。它主要用於客戶端和服務器交互類的軟件。基於這個風格設計的軟件可以更簡潔,更有層次,更易於實現緩存等機制。
我們來比較一下REST和非REST的區別,本文和上一篇的有很大的關聯,可以先看上一篇文章把配置文件弄好和體驗一下SpringMVC的好處。
這是我上一篇文章的路徑:http://blog.csdn.net/qq_18895659/article/details/51824624
我們這篇和上一篇所有的配置文件一樣都沒有變。
好,我們繼續迴歸本文
----非REST的url:
http://...../queryItems.action?id=001&type=T01
----REST的url風格:
http://..../items/001/T01
注意 @PathVariable 將 @RequestMapping 中value帶的變量 此處是 {id}與方法中參數綁定
注意:如果變量名稱與方法參數名稱不一致,則需要指定
REST缺點 : 跳轉的時候瀏覽器不認post/get 之外的訪問方法 ,而此處是DELETE
我們下面寫一個例子來看一下當使用POST和使用DELETE時候的區別。配置文件和上篇的配置文件相同,這裏就不貼出來了。
我們來看我的action類
@Controller
@RequestMapping("/person")//註解爲控制器指定可以處理哪些 URL 請求,跟struts2中的命名空間作用一樣
public class PersonAction{
/**
* 使用@RequestParam註解指定參數的name
* 註解指定參數名稱
*/
@RequestMapping(value="/delete/{id}/{name}",method=RequestMethod.DELETE)
public String delete(@PathVariable Integer id,@PathVariable("name") String username){
System.out.println(id + " " + username) ;
return "person";
}
}
關於其中的一些參數這裏也不再做解釋了。
下面這是我的一個DELETE測試jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'test.jsp' starting page</title>
</head>
<body>
RESTful 風格 post
<form action="${pageContext.request.contextPath}/person/delete/1/haha" method="post">
<input type="hidden" name="_method" value="DELETE">
<input type="submit" value="測試 delete">
</form>
</body>
</html>
action="${pageContext.request.contextPath}/person/delete/1/haha"
我們可以看到url已經有變化了。我們可以從action裏面找出端倪
@RequestMapping(value="/delete/{id}/{name}",method=RequestMethod.DELETE)
而這種風格缺點也是跳轉的時候瀏覽器不認post/get 之外的訪問方法 ,而此處是DELETE,所以在點擊測試delete按鈕測試時頁面轉發會出現錯誤
但我們的值卻可以傳過去。可以看到我們頁面的值成功傳到後臺了。
那我們用post方法呢,我們可以在上面的action類裏面添加如下的方法。
@RequestMapping(value="/method1",method=RequestMethod.POST)
public String method1(Integer id,String name){
System.out.println(id + " --- "+name);
return "person";
}
我們把jsp改爲如下
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'test.jsp' starting page</title>
</head>
<body>
RESTful 風格 post
<form action="http://localhost:8080/${pageContext.request.contextPath}/person//method1" method="post">
<input type="hidden" name="_method" value="POST">
<input type="text" name="id">
<input type="text" name="name">
<input type="submit" value="測試 POST">
</form>
</body>
</html>
注意修改這個隱參
<input type="hidden" name="_method" value="POST">
我們可以來測試一下和DELETE有何不同。
由上面可以看到,轉發成功了,傳值也成功了。
通過上例可以發現,使用@RequestMapping(value="",.ethod=RequestMethod.POST)可以限制接收提交的方式,有利於規範代碼。
好了,這就是springMVC的RESTful風格的使用,如有哪裏錯誤,請大神指出。