SpringMVC學習(十一)——SpringMVC實現Resultful服務
http://blog.csdn.net/yerenyuan_pku/article/details/72514034
Restful就是一個資源定位及資源操作的風格,不是標準也不是協議,只是一種風格,是對http協議的詮釋。
-
資源定位:互聯網所有的事物都是資源,要求url中沒有動詞,只有名詞,沒有參數。url請求的風格就像這樣:
http://blog.csdn.net/eson_15/article/details/51743514
- 資源操作:使用put、delete、post、get等不同方法對資源進行操作,分別對應添加、刪除、修改、查詢。一般使用時還是post和get,put和delete幾乎不使用。
現在有這樣一個需求:使用RESTful方式實現商品信息查詢。有需求,就要解決需求。我們可將ItemController類中的editItem方法改造為:
@RequestMapping("/itemEdit/{id}")
// 如果id和方法的形參一致,@PathVariable註解中可以不寫內容
public String editItem(@PathVariable("id") Integer iid, Model model) {
// 調用服務
Items items = itemService.getItemById(iid);
// 把數據傳遞給頁面,需要用到Model接口
model.addAttribute("item", items);
// 返回邏輯視圖
return "editItem";
}
@RequestMapping(value="/itemEdit/{id}")
:{×××}表示占位符,請求的URL可以是“/itemEdit/1”或“/itemEdit/2”,通過在方法中使用@PathVariable獲取{×××}中的×××變量。@PathVariable用於將請求URL中的模板變量映射到功能處理方法的參數上。如果@RequestMapping中表示為”/viewItems/{id}”,id和形參名稱一致,那麽@PathVariable就不用指定名稱。
除此之外,還要在前端控制器中針對REST進行配置,即將web.xml文件中的前端控制器配置改造為:
<!-- 配置前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 指定springmvc配置文件的路徑。如果不指定,默認為:/WEB-INF/${servlet-name}-servlet.xml -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- /:攔截所有請求,不包括jsp。/*:攔截所有請求,包括jsp,應該配置"/" -->
<url-pattern>/</url-pattern>
</servlet-mapping>
- 1
在SpingMVC框架中,/
即表示攔截所有請求,但不攔截jsp,/*
即表示所有的都攔截,包括jsp。這裏顯然應該配置/
,因為你想啊!假如說Controller類方法裏面已經把數據處理完了,要跳轉到jsp頁面,如果你配置的是/*
,這個jsp頁面的跳轉也會被攔截,就會報404錯誤。
為了便於測試,將itemList.jsp中的修改超鏈接改造為:
<td><a href="${pageContext.request.contextPath }/item/itemEdit/${item.id}">修改</a></td>
最後的一個測試效果為:
但是有個問題,使用上面的配置後會攔截所有的url(雖說不包括jsp),那麽對靜態資源也會攔截,所以DispatcherServlet也會解析靜態資源,但是這樣的話就會出錯,所以我們要設置一下不讓它解析靜態資源。SpringMVC的<mvc:resources mapping="" location="">
標簽可實現對靜態資源進行映射訪問。如下是對js文件的訪問配置:
<mvc:resources location="/js/" mapping="/js/**"/>
如果說我們把js文件夾放到工程的WEB-INF目錄下,照理來說外界肯定是無法訪問到的,但是我們非得訪問呢?這時就可通過<mvc:resources mapping="" location="">
標簽來對它進行映射訪問了,如下:
zhuanzi http://www.cnblogs.com/telwanggs/p/6943752.html
SpringMVC學習(十一)——SpringMVC實現Resultful服務