1. 程式人生 > >SpringMVC學習(十一)——SpringMVC實現Resultful服務

SpringMVC學習(十一)——SpringMVC實現Resultful服務

控制 不用 extc service 靜態 pku net pub 技術

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服務