SpringMVC學習之RESTful風格post

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風格的使用,如有哪裏錯誤,請大神指出。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章