RESTful风格编码

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"固定写法!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值