REST风格
REST(Representational State Transfer)表象化状态转变(表述性状态转变),在2000年被提出,基于HTTP、URI、XML、JSON等标准和协议,支持轻量级、跨平台、跨语言的架构设计。是Web服务的一种新的架构风格(一种思想)。
在笔者看来,REST风格其实就是通过URL对服务器上的每一个资源分配一个“id”,然后通过GET、POST、DELETE、PUT对资源进行不同的操作。
REST并不是一个新的技术,而是一种规范,就像在中国我们靠右行驶,而在英国靠左行驶。这种规范可以有效的降低开发的复杂性,提高系统的可伸缩性。
简单的REST使用(GET为例)
请求方式(jsp):
<!-- 默认就是GET,这里不做修改 -->
<a href="hello/testRest/shiwei">点我发起rest请求</a>
controller:
//指定testRest作为请求路径,后接参数
//使用@PathVariable注解标注形参,使用{}来接收
@RequestMapping(value="/testRest/{uname}",method=RequestMethod.GET)
public String testRest(@PathVariable("uname")String uname,Model m) {
//添加数据
m.addAttribute("msg","rest"+uname);
//跳转至reg.jsp
return "reg";
}
部署并运行,测试请求
在jsp中发起DELETE和PUT请求
POST和GET同理,不做演示。
需要说明的是,由于jsp中不支持DELETE、PUT方式,所以我们在使用之前需要在web.xml中配置拦截器,代码如下。
<!-- 解决PUT请求无法提交表单数据的问题 -->
<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>
jsp改为:
<form action="testRest/shiwei" method="post">
<input type="hidden" name="_method" value="DELETE">
<input type="submit" value="delete提交">
</form>
controller:
@RequestMapping(value="/testRest/{uname}",method=RequestMethod.DELETE)
public String testRest(@PathVariable("uname")String uname,Model m) {
m.addAttribute("msg","rest"+uname);
return "reg";
}
注意!!!
如果你使用的是tomcat8或以上版本,会出现“JSP 只允许 GET、POST 或 HEAD。Jasper 还允许 OPTIONS”的错误,切换到8以下的版本即可。
常见错误
待补充。。。