• SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)


    代码资源位置:F:\workspace\SpringMVC代码\springMVC-demo4

    1、RESTful简介

    REST:Representational State Transfer,表现层资源状态转移。

    • a>资源
      资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文件、数据库中的一张表等等具体的东西,可以将资源设计的要多抽象有多抽象,只要想象力允许而且客户端应用开发者能够理解。与面向对象设计类似,资源是以名词为核心来组织的,首先关注的是名词。一个资源可以由一个或多个URI来标识。URI既是资源的名称,也是资源在Web上的地址。对某个资源感兴趣的客户端应用,可以通过资源的URI与其进行交互。

    • b>资源的表述
      资源的表述是一段对于资源在某个特定时刻的状态的描述。可以在客户端-服务器端之间转移(换)。资源的表述可以有多种格式,例如HTML/XML/JSON/纯文本/图片/视频/音频等等。资源的表述格式可以通过协商机制来确定。请求-响应方向的表述通常使用不同的格式。

    • c>状态转移
      状态转移说的是:在客户端和服务器端之间转移(transfer)代表资源状态的表述。通过转移和操作资源的表述,来间接实现操作资源的目的。

    2、RESTful的实现

    具体说,就是 HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。
    它们分别对应四种基本操作:GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE用来删除资源。REST 风格提倡 URL 地址使用统一的风格设计,从前到后各个单词使用斜杠分开,不使用问号键值对方式携带请求参数,而是将要发送给服务器的数据作为 URL 地址的一部分,以保证整体风格的一致性。

    在这里插入图片描述

    3、HiddenHttpMethodFilter

    由于浏览器只支持发送get和post方式的请求,那么该如何发送put和delete请求呢?

    SpringMVC 提供了 HiddenHttpMethodFilter 帮助我们将 POST 请求转换为 DELETE 或 PUT 请求HiddenHttpMethodFilter 处理put和delete请求的条件:

    • 当前请求的请求方式必须为post
    • 当前请求必须传输请求参数_method

    满足以上条件,HiddenHttpMethodFilter 过滤器就会将当前请求的请求方式转换为请求参数
    _method的值,因此请求参数_method的值才是最终的请求方式
    在web.xml中注册HiddenHttpMethodFilter

        <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>/*
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    目前为止,SpringMVC中提供了两个过滤器:CharacterEncodingFilter和
    HiddenHttpMethodFilter
    在web.xml中注册时,必须先注册CharacterEncodingFilter,再注册HiddenHttpMethodFilter
    原因:
    在 CharacterEncodingFilter 中通过 request.setCharacterEncoding(encoding) 方法设置字
    符集的
    request.setCharacterEncoding(encoding) 方法要求前面不能有任何获取请求参数的操作
    而 HiddenHttpMethodFilter 恰恰有一个获取请求方式的操作:String paramValue = request.getParameter(this.methodParam);

    在这里插入图片描述

    4、实际代码案例

    4.1 控制层

    package com.zyz.mvc.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    /**
     * @author zyz
     * @version 1.0
     * @data 2022/11/28 9:47
     * @Description:
     */
    @Controller
    public class ViewController {
    
        /**
         * 测试testThymeleafView
         * @return
         */
        @RequestMapping("/testThymeleafView")
        public String testView(){
            return "success";
        }
    
        /**
         * 测试forward 转发
         * @return
         */
        @RequestMapping("/testForward")
        public String testForward(){
            return "forward:/testThymeleafView";
        }
    
        /**
         * 测试redirect 重定向
         * @return
         */
        @RequestMapping("/testRedirect")
        public String testRedirect(){
            return "redirect:/testThymeleafView";
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    4.2 页面

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <a th:href="@{/user}">查询所有用户</a>
    <br>
    <a th:href="@{/user/1}">根据ID查询用户信息</a>
    <br>
    <form th:action="@{/user}" method="post" >
        用户名:<input type="text" name="username">
        <br>
        密码:<input type="password" name="password">
        <br>
        <input type="submit" value="添加">
    
    </form>
    
    <hr>
    <form th:action="@{/user}" method="post" >
        <input type="hidden" name="_method" value="PUT">
        用户名:<input type="text" name="username">
        <br>
        密码:<input type="password" name="password">
        <br>
        <input type="submit" value="添加">
    
    </form>
    
    </body>
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    4.3 测试结果

    在这里插入图片描述
    在这里插入图片描述

    5、后语

    学无止境。。。。。。

  • 相关阅读:
    打造千万级流量秒杀第十一课 系统参数:如何按业务场景优化网络性能?
    初识Load Runner
    路由协议是什么
    计算机网络--应用层(http)
    Cisco Firepower 9300 Series FTD Software 7.2.0 & ASA Software 9.18.1
    YOLOV7详细解读(一)网络架构解读
    NDepend v2022.2.1.9665 专业版
    海外问卷调查加盟可靠吗?
    C++笔记之std::forward
    001、Nvidia Jetson Nano Developer KIT(b01)-系统与登录
  • 原文地址:https://blog.csdn.net/weixin_43304253/article/details/128081298