基于RESTFull风格和技术的请求方式,客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;但是浏览器只支持get和post提交,如何接收delete和put请求呢?我们看一下Spring MVC的实现过程:首先需要在web.xml 文件中配置一个Filter,代码如下:
<!-- RESTFull 请求处理过滤器 -->
<filter>
<filter-name>HiddenFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
界面的表单部分:注意 hidden部分的name必须是: _method value对应的是delete、put、post和get。
<a th:href="@{/list}">列表</a><br>
<form th:action="@{/add}" method="post">
<input type="submit" value="添加">
</form>
<form th:action="@{/del}" method="post">
<input value="delete" type="hidden" name="_method">
<input type="submit" value="删除">
</form>
<form th:action="@{/update}" method="post">
<input value="put" type="hidden" name="_method">
<input type="submit" value="修改">
</form>
测试控制器:
@Controller
public class HelloController {
@RequestMapping(value = "/list",method = RequestMethod.GET)
public String tolist(Model model){
model.addAttribute("mess", "这是控制器的数据!");
return "list";
}
@RequestMapping(value = "/del",method = RequestMethod.DELETE)
public String delete(Model model){
System.out.println("delete");
model.addAttribute("mess","delete!!");
return "delete";
}
@RequestMapping(value = "/update",method = RequestMethod.PUT)
public String update(Model model){
System.out.println("update.....");
model.addAttribute("mess","update!!");
return "update";
}
@RequestMapping(value = "/add",method = RequestMethod.POST)
public String add(Model model){
System.out.println("add add");
model.addAttribute("mess","add");
return "add";
}
}