1.什么是
RESTful
其實(shí)是一種開發(fā)的理念,是對http的很好的詮釋。更詳細(xì)的說明請參考http://www.ruanyifeng.com/blog/2011/09/restful.html。-
2.作用
- 1.對
url進(jìn)行規(guī)范,有RESTful風(fēng)格的url。
非RESTful的url:http://..../queryItems.action?id=1
而RESTful風(fēng)格的url:http://..../ queryItems /1
特點(diǎn):RESTful風(fēng)格的url簡潔,將參數(shù)通過url傳遞到服務(wù)端。 - 2.對
http的方法規(guī)范
不管是刪除、添加、更新,使用的url是一致的。如果要進(jìn)行刪除,需要設(shè)置http的方法為delete,同理添加也是類似。而后臺的Controller方法需要判斷http方法,如果是delete則執(zhí)行刪除,如果是add則執(zhí)行添加。 - 3.對
http的contentType規(guī)范
請求時指定contentType,要json數(shù)據(jù),設(shè)置成json格式的type。
說明:實(shí)際開發(fā)中一般只是用到第一條和第三條規(guī)范。
- 1.對
3.例子(工程
springmvc-mybatis09)
需求:查詢商品信息,返回json數(shù)據(jù)。4.
Controller方法:
定義方法,進(jìn)行url映射使用RESTful風(fēng)格的url,將查詢商品信息id傳入到Controller方法中。
ItemsController.java
@RequestMapping("/itemsView/{id}")
public @ResponseBody ItemsCustom itemsView(@PathVariable("id") Integer id)throws Exception{
//調(diào)用service查詢商品信息
ItemsCustom itemsCustom = itemsService.findItemsById(id);
return itemsCustom;
}
說明:
1.
@RequestMapping(value="/ viewItems/{id}"):{×××}占位符,請求的URL可以是"/viewItems/1"或"/viewItems/2",通過在方法中使用@PathVariable獲取{×××}中的×××變量。2.
@PathVariable用于將請求URL中的模板變量映射到功能處理方法的參數(shù)上。3.如果
RequestMapping中表示為"/viewItems/{id}",id和形參名稱一致,@PathVariable不用指定名稱。5.在
web.xml中重新配置前端控制器
<!-- springMVC前端控制器 RESTful的前端控制器 -->
<servlet>
<servlet-name>springmvc_restful</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc_restful</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
說明:這里配置的前端控制器可以和之前配置的前端控制器共存。最后使用地址http://localhost:8080/springmvc-mybatis09/items/itemsView/1訪問測試。
- 6.對靜態(tài)資源的訪問
當(dāng)我們使用地址http://localhost:8080/springmvc-mybatis09/ js/jquery-1.4.4.min.js
訪問工程中的靜態(tài)資源時還是由前端控制器解析的,這樣很顯然是找不到Handler,所以訪問不到靜態(tài)資源。出現(xiàn)404錯誤。此時需要在springmvc.xml中添加對靜態(tài)資源訪問的配置:
<!-- 靜態(tài)資源(js、css、img)的解析 -->
<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
這樣就能訪問到上面的靜態(tài)資源了。