1.REST风格
具体说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:
GET用来获取资源;
POST用来新建资源;
PUT用来更新资源;
DELETE 用来删除资源。
2.配置文件
由于浏览器只支持POST和GET方法,因此需要使用_method隐藏字段通知Spring这是一个PUT/DELETE请求。
为此,Spring3.0增加了一个过滤器,可以将这些请求转换为标准的http方法,使得支持GET、POST、PUT与DELETE请求,该过滤器是HiddenHttpMethodFilter。
因此,我们需要在web.xml文件中配置此过滤器。
web.xml
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<servlet-name>springmvc</servlet-name>
</filter-mapping>
前后台代码
完成配置后,就可以在对应页面使用我们的的四种提交方式进行前后台数据的交互了。
前台提交数据:
GET
<form action="/method/get" method="GET">
<input type="submit" value="GET">
</form>
POST
<form action="/method/post" method="post">
<input type="hidden" name="_method" value="POST">
<input type="submit" value="POST">
</form>
deteletd
<form action="/method/test" method="post">
<input type="hidden" name="_method" value="DELETE">
<input type="submit" value="删除">
</form>
put
<form action="/method/test2" method="post">
<input type="hidden" name="_method" value="PUT">
<input type="submit" value="put">
</form>
后台接收数据:重定向就是重新换个网址重新发送请求
@RequestMapping(value="/method/get",method=RequestMethod.GET)
public String GET(){
System.out.println("GET");
return "redirect:/test";
}
@RequestMapping(value="/method/post",method=RequestMethod.POST)
public String POST(){
System.out.println("POST");
return "redirect:/test";
}
DELETE PUT 不能直接跳转,需要重定向
@RequestMapping(value="/method/test",method=RequestMethod.DELETE)
public String DELETE(){
System.out.println("DELETE");
return "redirect:/test";
}
@GetMapping("/test")
public String redirecttest(){
return "test";
}
@RequestMapping(value="/method/test2",method=RequestMethod.PUT)
public String PUT(){
System.out.println("PUT");
return "redirect:/test2";
}
@GetMapping("/test2")
public String redirecttest2(){
return "test2";
}
其中get和post方法是html中自带的,但是不支持PUT和DELETE方法,所以需要通过POST方法模拟这两种方法,需要在表单中添加一个隐藏域,名为_method,值为PUT或DELETE。即如下代码:
<input type="hidden" name="_method" value="PUT/DELETE">