什么是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操作。
但是,浏览器 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请求:
2.在表单中携带隐藏域
说明:name="_method';
3.在控制器中处理请求
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。