1首先介绍一下什么是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地址来发送请求,根据请求方式来区分对一个资源的增删改查。
举个例子,那对书籍的正删改查操作来讲。
URL为:/book/1 请求方式:HTTP GET ----> 代表获取1号图书的信息。
URL为:/book/1 请求方式为:HTTP DELETE ----->删除1号图书
URL为: /book/1 请求方式为:HTTP PUT----->修改1号图书的信息
URL为:/book 请求方式为:HTTP POST---->添加图书
由于页面上只能发送POST请求和GET请求,那么如何发送DELETE请求和PUT请求?
SpringMVC为我们提供了Filter,这个Filter可以把普通请求转换为REST风格的请求。
发送REST风格的URL:
1、在web.xml中配置一个SpringMVC自带的支持REST风格的过滤器----》HiddenHttpMethodFilter
2、创建一个post请求的表单,表单中的必须有一个表单项携带一个name属性为’_method’的参数,value的值为DELETE或为PUT。
示例代码:
web.xml中的配置
<!-- 设置SpringMVC支持rest风格的url -->
<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>/*</url-pattern>
</filter-mapping>
前段页面的准备:
<body>
<a href="book">获取BOOK</a>
<form action="book" method="post">
<input type="submit" value="保存">
</form>
<br/>
<form action="book" method="post">
<input type="hidden" value="put" name="_method">
<input type="submit" value="修改">
</form>
<br/>
<form action="book" method="post">
<input type="hidden" value="delete" name="_method">
<input type="submit" value="删除">
</form>
</body>
controller层:
@Controller
public class TestRestUrlController {
@RequestMapping(value="/book",method=RequestMethod.GET)
public String get() {
System.out.println("查询book成功");
return "success";
}
@RequestMapping(value="/book",method=RequestMethod.POST)
public String add() {
System.out.println("添加book成功");
return "success";
}
@RequestMapping(value="/book",method=RequestMethod.PUT)
public String updata() {
System.out.println("修改book成功");
return "success";
}
@RequestMapping(value="/book",method=RequestMethod.DELETE)
public String delete() {
System.out.println("删除图书成功");
return "success";
}
}
注意,高版本的Tomcat对Rest风格的支持有问题,请求访问以后跳转到指定页面时,指定页面会报错,如何解决?
解决方案,在要跳转的页面上添加一个isErrorPage即可。如在success.jsp上添加一个isErrorPage=true即可。