1. RESTful介绍
REST:即Representational State Transfer , (资源)表现层状态转化,是目前最流行的一种互联网软件架构。它结构清 晰、符合标注、易于理解、方便扩展,所以越来越多的网站采用!
具体说,就是HTTP协议里面,四个表示操作方式的动词:
GET POST PUT DELETE 它们分别代表着四种基本操作:
- GET用来获取资源
- POST用来创建新资源
- PUT用来更新资源
- DELETE用来删除资源
示例: - /order/1 HTTP GET :得到id = 1 的 order
- /order/1 HTTP DELETE: 删除 id=1 的order
- /order/1 HTTP PUT : 更新id = 1的 order
- /order HTTP POST : 新增 order
- /orders HTTP GET :得到所有的的 order
2. Spring中实现RESTful风格
HiddenHttpMethodFilter:浏览器form表单只支持GET和POST,不支持DELETE和PUT请求,Spring添加了一个过滤器,可以将这些请求转换为标准的http方法,支持GET,POST,DELETE,PUT请求!
3.具体实现
3.1 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>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>HttpPutFormContentFilter</filter-name>
<filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HttpPutFormContentFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.2 实现查,改,删 框架!
@Controller
@RequestMapping("/order")
public class OrderController
{
@RequestMapping(value = "/list",method = RequestMethod.GET)
public String list(){
//获取用户列表
return "order/list";
}
@RequestMapping(value = "/{id}",method = RequestMethod.DELETE)
public String delete(@PathVariable("id") Integer id){
//执行删除操作
System.out.println("id = " + id);
return "redirect:/order/list";
}
@RequestMapping(value = "/{id}",method = RequestMethod.PUT)
public String update(@PathVariable("id") Integer id){
//执行更新操作
System.out.println("id = " + id);
return "redirect:/order/list";
} }
Jsp代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body> <h1>获取用户列表</h1>
<a href="javascript:void(0)" onclick="deleteById()">删除</a>
<form action="/order/1" method="post" id="deleteForm">
<input type="hidden" name="_method" value="DELETE" />
</form>
<a href="javascript:void(0)" onclick="updateById()">修改</a>
<form action="/order/1" method="post" id="updateForm">
<input type="hidden" name="_method" value="PUT" />
</form>
<script>
function updateById() {
var form = document.getElementById("updateForm");
form.submit();
}
function deleteById() {
//TODO 删除
var form = document.getElementById("deleteForm");
form.submit();
}
</script>
</body>
</html>
需要注意: 由于doFilterInternal方法只对method为post的表单进行过滤,所以在页面中必须如下设置:
<form action="..." method="post">
<input type="hidden" name="_method" value="put" />
</form>
代表post请求,但是HiddenHttpMethodFilter将把本次请求转化成标准的put请求方式! name="_method"固定写法!