相信大家都遇到过在浏览器中表单提交的时候如果使用post和get是完全没有问题的,但是你使用delete和put方式提交,能够成功吗?
目前html5和一些新的浏览器支持所有的http方法,但是不是全部浏览器都支持,这个时候你如果还是想通过浏览器进行提交该怎么办了?
哈哈,不绕圈子了
html表单中,将put和delet请求伪装成post请求就可以了,关键是创建一个带有隐藏域并且method为post的表单。例如下面:
<form method="post">
<input type="hidden" name="_method" value=“delete"/>
.......
</form>
下面还有一种更简单的方式:
当使用spring 的表单绑定库时,<sf:form>会让其变得更加简单。你可以讲method属性设置为期望的HTTP方法,<sf:form>将为你隐藏域:
<sf:form method="delete" modelAttribute="spitter">
</sf:form>
当然你的服务器端还是应该做相应的配置。
web.xml
<filter>
<filter-name>httpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>httpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这里我们将HiddenHttpMethodFilter匹配到/*模式,这样所有URL的请求在到达DispatcherServlet前都会经过HiddenHttpMethodFilter。
注:通过非浏览器发送的请求以及RestTemplate发送的请求,没有必要包装成post,因此他们都支持所有的HTTP请求方式。