springmvc对rest的支持
RESTful的理解
REST,即Representational State Transfer的缩写。我对这个词组的翻译是”表现层状态转化”。
REST的名称”表现层状态转化”中,省略了主语。”表现层”其实指的是”资源”(Resources)的”表现层”。所谓”资源”,就是网络上的一个实体,或者说是网络上的一个具体信息
rest方式url要求简洁,一个url对应互联网上的一个资源:
http://www.bsw.com/user/001 001用户资源 特点:将原来url请求参数放在url中传入服务。
。。。
“资源”是一种信息实体,它可以有多种外在表现形式。我们把”资源”具体呈现出来的形式,叫做它的”表现层”(Representation)。
一个资源可以使用html展示、xml展示、json展示,,这此展示方式都不同的表现形式
通过url输出json、xml等格式的数据。
就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。
比如:
请求url:http://www.bsw.com/user/001
当请求的方法为get时,表示获取001的用户资源,服务端程序应该根据http的方法类型判断应该查询001用户
请求url:http://www.bsw.com/user/001
当请求的方法为post时,表示新建一个001的用户资源。
案例
第一步:编写controller
// 使用rest的请求路径
@RequestMapping("/itemViewRest/{id}")
@ResponseBody
public Items itemViewRest(@PathVariable("id") Integer id) {
ItemsCustom items = itemService.findItemsById(id);
return items;
}
@RequestMapping(value=”/ viewItems/{id}”):{×××}占位符,请求的URL可以是“/viewItems/1”或“/viewItems/2”,通过在方法中使用@PathVariable获取{×××}中的×××变量。
@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上
如果RequestMapping中表示为”/viewItems/{id}”,id和形参名称一致,@PathVariable不用指定名称。
第二步:配置前端控制器支持rest
<!-- springmvc的前端控制器支持rest -->
<servlet>
<servlet-name>springmvc-rest</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 加载springmvc的xml配置文件 注意:如果不加此配置,springmvc默认加载/WEB-INF/[DispatcherServlet
的Servlet 名字]-servlet.xml 即:/WEB-INF/springmvc-serlvet.xml -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc-rest</servlet-name>
<!-- rest的路径为/ -->
<url-pattern>/</url-pattern>
</servlet-mapping>
第三步:解决静态资源访问问题-此问题因为配置了支持rest的前端控制器所以必须配置,不然无法访问静态资源
<!-- 处理对静态资源的访问,因为实现支持rest并且路径为/,就必须处理对静态资源的访问,使这些资源不走前端控制器 -->
<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/css/" mapping="/css/**"/>
- 最终测试结果:
请求路径:
得到结果: