什么是REST?
REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。—— [ 百度百科 ]
SpringMVC如何使用
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>
<!-- DispatcherServlet -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<!--响应所有请求-->
<url-pattern>/</url-pattern>
</servlet-mapping>
2.控制层代码
// {id} 占位符变量名需和入参变量名一致
@RequestMapping(value="/user/{id}",method=RequestMethod.GET)
public String testGet(@PathVariable("id")Integer id){
System.out.println("GET:"+id);
return "hello";
}
@RequestMapping(value="/user/{id}",method=RequestMethod.POST)
public String testPost(@PathVariable("id")Integer id){
System.out.println("POST:"+id);
return "hello";
}
@RequestMapping(value="/user/{id}",method=RequestMethod.PUT)
public String testPut(@PathVariable("id")Integer id){
System.out.println("PUT:"+id);
return "hello";
}
@RequestMapping(value="/user/{id}",method=RequestMethod.DELETE)
public String testDelete(@PathVariable("id")Integer id){
System.out.println("DELETE:"+id);
return "hello";
}
3.前端请求
<a href="user/100">Get请求</a>
<!-- POST请求的隐藏域可选 -->
<form action="user/100" method="post">
<input type="hidden" name="_method" value="POST">
<input type="submit" value="post请求">
</form>
<form action="user/100" method="post">
<input type="hidden" name="_method" value="PUT">
<input type="submit" value="put请求">
</form>
<form action="user/100" method="post">
<input type="hidden" name="_method" value="DELETE">
<input type="submit" value="delete请求">
</form>
实现过程
- 前端提交表单会将隐藏域中的值一并提交到服务器
- SpringMVC 的 HiddenHttpMethodFilter 过滤器根据传来的 _method 的值找到对应Controller
- 执行对应的方法