HTTP协议中的幂等性,以及ajax使用put请求时后台接收参数失败的问题
幂等(idempotent、idempotence) 是一个数学与计算机学概念,常见于抽象代数中。 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。 幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。 这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。
- 基于HTTP协议的Web
API是时下最为流行的一种分布式服务提供方式。无论是在大型互联网应用还是企业级架构中,我们都见到了越来越多的SOA或RESTful的Web API。为什么Web API如此流行呢?我认为很大程度上应归功于简单有效的HTTP协议。HTTP协议是一种分布式的面向资源的网络应用层协议,无论是服务器端提供Web服务,还是客户端消费Web服务都非常简单。再加上浏览器、Javascript、AJAX、JSON以及HTML5等技术和工具的发展,互联网应用架构设计表现出了从传统的PHP、JSP、ASP.NET等服务器端***页向Web API + RIA(富互联网应用)过渡的趋势。Web API专注于提供业务服务,RIA专注于用户界面和交互设计,从此两个领域的分工更加明晰。在这种趋势下,Web API设计将成为服务器端程序员的必修课。然而,正如简单的Java语言并不意味着高质量的Java程序,简单的HTTP协议也不意味着高质量的Web API。要想设计出高质量的Web API,还需要深入理解分布式系统及HTTP协议的特性。 - POST所对应的URI并非创建的资源本身,而是资源的接收者。比如POST http://www.love.com/articles 的语义是在 http://www.love.com/articles 下创建一篇帖子,HTTP响应中应包含帖子的创建状态以及帖子的URI。两次相同的POST请求会在服务器端创建两份资源,它们具有不同的URI;所以,POST方法不具备幂等性。而PUT所对应的URI是要创建或更新的资源本身。比如:PUT http://www.love/articles/666 的语义是创建或更新ID为666的帖子。对同一URI进行多次PUT的副作用和一次PUT是相同的;因此,PUT方法具有幂等性。
- 利用幂等性,可以防止重复,比如重复发帖问题,银行重复扣钱的问题等.
GET,POST,PUT和DELETE(还有其他)是HTTP标准的一部分,但目前仅限于GET和POST HTML格式,发出这样的请求,只能用ajax等技术了。
- 但是在使用ajax时,ajax使用put请求后台得不到封装对象的值,原因是tomcat会把前台传入的参数作为封装为map,像request.getparam()就是从map取值,而tomcat不会把put请求提交的参数封装为map,导致后台获取的值为Null
处理方法:
在web.xml中配置如下过滤器,spring会自动替我们封装为map。