1. 程式人生 > 其它 >SpringMVC-RestFul風格

SpringMVC-RestFul風格

RestFul特點&功能:

  • 每一個URL代表一種資源;
  • 客戶端使用GET(獲取資源)、POST(新建/更新資源)、PUT(更新資源)、DELETE(刪除資源)四個操作方式對伺服器資源進行操作;
  • 通過操作資源的表現形式來操作資源;
  • 資源的表現形式是XML/HTML;
  • 客戶端與服務端之間的互動形式在請求之間是無狀態的且客戶端到服務端的每個請求都必須包含理解該請求所必需的資訊。

網址對比

  • 傳統方法操作資源(post/get)
http://localhost/item/qureyitem.action?id=1
http://localhost/item/saveitem.action
http://localhost/item/updateitem.action?id=1
http://localhost/item/deleteitem.action?id=1
  • RestFul風格操作資源(相同地址可實現不同功能)
http://localhost/item/1(query)
http://localhost/item(add)
http://localhost/item(update)
http://localhost/item/1(delete)

結合SpringMVC實現

傳統方法傳參

  • 包cn.iris.controller下編寫一個Class RestFulController

package cn.iris.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
/**
 * @author Iris 2021/8/16
 */
public class RestFulController {

    @RequestMapping("/add")
    public String testMethod(int a, int b, Model model) {

        int res = a+b;
        model.addAttribute("msg","res = "+res);

        return "test";
    }

}
  • 配置Tomcat跑起來~

執行傳統網址http://localhost:8080/springmvc/add?a=1&b=2,得到網頁輸出:res = 3

RestFul風格傳參

  • Class RestFulController修改

    • @PathVariable註解將方法引數定義為頁面傳參,可在@RequestMapping引數新增URL字尾以實現傳參(如:http://localhost:8080/springmvc/add/1/2
package cn.iris.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
/**
 * @author Iris 2021/8/16
 */
public class RestFulController {

    @RequestMapping("/add/{a}/{b}")
    public String testMethod(@PathVariable int a,@PathVariable int b, Model model) {

        int res = a+b;
        model.addAttribute("msg","res = "+res);

        return "test";
    }

}
  • 執行Tomcat

執行RestFul風格網址【http://localhost:8080/springmvc/add/99/100】,得到網頁輸出:res = 199

RestFul風格實現相同URL不同功能

  • 【編寫Class RestFulController】

package cn.iris.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
/**
 * @author Iris 2021/8/16
 */
public class RestFulController {

    @RequestMapping(value = "/add/{a}/{b}", method = RequestMethod.GET)
    public String testMethod(@PathVariable int a,@PathVariable int b, Model model) {

        int res = a+b;
        model.addAttribute("msg","res = "+res);

        return "test";
    }

    @RequestMapping(value = "/add/{a}/{b}", method = RequestMethod.POST)
    public String testMethod2(@PathVariable String a, @PathVariable String b, Model model) {

        boolean res = a.equals(b);

        model.addAttribute("msg", "res : "+res);

        return "test";
    }

}
  • 【在WEB-INF/jsp編寫一個提交POST請求的表單--pwd.jsp】

<%--
  Created by IntelliJ IDEA.
  User: asus
  Date: 2021/8/16
  Time: 12:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<form action="/add/abd/abd" method="post">
    <input type="submit">
</form>

</body>
</html>
  • 【啟動Tomcat測試】

分別進行【http://localhost:8080/springmvc/add/1/2】&【提交表單操作】;
分別得到網頁結果:res = 3&res : true

RestFul優點

  • 簡潔
  • 高效(支援快取)
  • 安全(一定程度隱藏了引數名)