SpringMVC互联网软件架构REST使用详解

时间:2022-02-10 21:53:46

什么是rest

rest:即 representational state transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用

☐ 资源(resources):网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。可以用一个uri(统一资源定位符)指向它,每种资源对应一个特定的 uri 。要获取这个资源,访问它的uri就可以,因此 uri 即为每一个资源的独一无二的识别符。

☐ 表现层(representation):把资源具体呈现出来的形式,叫做它的表现层(representation)。比如,文本可以用 txt 格式表现,也可以用 html 格式、xml 格式、json 格式表现,甚至可以采用二进制格式。

☐ 状态转化(state transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程。http协议,是一个无状态协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生“状态转化”(state transfer)。而这种转化是建立在表现层之上的,所以就是 “表现层状态转化”。

☐ 具体说,就是 http 协议里面,四个表示操作方式的动词:get、post、put、delete。它们分别对应四种基本操作:

      ☐ get 用来获取资源,
      ☐ post 用来新建资源,
      ☐ put 用来修改资源,
      ☐ delete 用来删除资源。

如何使用rest

我们想实现的效果如下图,通过客户端访问特殊url(例如该url末尾的数字表示用户id)来快速实现curd操作。

SpringMVC互联网软件架构REST使用详解

但是,浏览器 form 表单只支持 get与 post 请求,而delete、put 等 method 并不支持,spring3.0 添加了一个过滤器,可以将这些请求转换为标准的 http 方法,使得支持 get、post、put 与delete 请求.这个过滤器就是hiddenhttpmethodfilter

过滤器的实现原理大致如下:检测请求参数中是否包含 _method这个参数,如果包含则获取其值,然后判断是哪种操作后继续传递:    

?
1
2
3
4
5
6
7
8
9
10
11
12
protected void dofilterinternal(httpservletrequest request, httpservletresponse response, filterchain filterchain) throws servletexception, ioexception {
    //methodparam="_method";
     string paramvalue = request.getparameter(this.methodparam);
    if("post".equals(request.getmethod()) && stringutils.haslength(paramvalue)) {
      string method = paramvalue.touppercase(locale.english);
      hiddenhttpmethodfilter.httpmethodrequestwrapper wrapper = new hiddenhttpmethodfilter.httpmethodrequestwrapper(request, method);
      filterchain.dofilter(wrapper, response);
    } else {
      filterchain.dofilter(request, response);
    }
 
  }

演示(rest风格的访问)

1.配置过滤器hiddenhttpmethodfilter,可以把post请求转换为delete或put请求:

SpringMVC互联网软件架构REST使用详解

2.在表单中携带隐藏域

SpringMVC互联网软件架构REST使用详解

说明:name="_method';

3.在控制器中处理请求

SpringMVC互联网软件架构REST使用详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。