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/**"/>
- 最終測試結果:
請求路徑:
得到結果: